web-dev-qa-db-ja.com

GPGマスターキーをサブキーとして新しいマスターキーに移行する

現在、私はすべてマスターキーである3つのプライベートGPGペアを持っています。これらのキーを新しいキーペアのサブキーに変換します(それをボールトに保持します)。

私は次のスレッドを読んだ http://atom.smasher.org/gpg/gpg-migrate.txt ある種のバイナリファイルをハッキングして、1つのマスターキーをサブキーに変換し、置き換える他のと。

私のさまざまなキーを新しい単一のキーペアに組み合わせて有効なままにしておくことは可能ですか?また、マスターキーに署名するように人々に紹介できるので、秘密のマスターキーを失うことを恐れる必要はありません。

私が持っているもの

ここには3つの異なる鍵があります(秘密鍵を使用できます)。

$ 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

欲しいもの

これらのキーをサブキーに変換して、新しいマスターキーに移動するのが好きです。代わりに次のようになります。

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

これは可能ですか?または、私の3つのキーを取り消して、ゼロから始めて、自分の用途に合った新しいキーを作成することが私の最善の希望ですか。

これまでに行ったこと

http://atom.smasher.org/gpg/gpg-migrate.txt からの指示を使用する

私はなんとかgpgsplitを使用してキーをエクスポートおよび抽出しました。また、最初のバイトを0x95から0x9dに変更することで、secret_keyをsecret_subkeyに変更しました

そのため、pgpdumpが秘密は秘密のサブキーであると言う

~/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)
        ...

次に、すべてのキーをファイルを連結する新しいキーにマージします。

$ 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

悪くないですね。しかし、キーサーバーからキーをインポートする場合、gpg2 --recv-keys 712A2BBD 72838B89 AC349218署名を取り戻す。これは次のようになります。

$ 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

残りのもの

この後、鍵リングに4つの公開鍵があります。これらのキーを移動したいので、上記のようにマスターキーCB577A43に依存しています

42
lz.

それは実際に行うことができます。

atom.smasher.org/gpg/gpg-migrate.txt の手順は古くなっています。

これを試して。いつものように、それを台無しにすることは本当に簡単なので、バックアップを作成します。


したがって、これらは「古い」キーです。

$ 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

そして、サブキーのない新しい「マスターキー」を作成しました。

sec   4096R/CB577A43 2013-03-21
uid                  Master Key

簡単にするために、最初の「古い」キーを使用する手順のみをリハーサルします。

sec   2048R/712A2BBD 2013-01-29  
uid                  Test Key 1
ssb   2048R/F0B63FDA 2013-01-29  

同じ手順を使用して、それらすべてを追加できます。すべてのキーを同時に追加することをお勧めします。キーを壊してからそれらを再構築するたびに、バインディング署名を再作成する必要があり、それが面倒です。


1。 gpgsplitを使用して、「古い」キーを構成パケットに分割します。

$ gpg --export-secret-keys 712A2BBD | gpgsplit -vp 712A2BBD_

次に、作成したファイルを確認します。

$ ls
----------------------------------
712A2BBD_000001-005.secret_key
712A2BBD_000002-013.user_id
712A2BBD_000003-002.sig
712A2BBD_000004-007.secret_subkey
712A2BBD_000005-002.sig

最初のファイル「712A2BBD_000001-005.secret_key」には、「古い」鍵「712A2BBD」のメイン秘密鍵( パケットタイプタグ5 、つまり「005」)のパケットが含まれています。 (これは必要ですが、新しい「マスターキー」に移行する場合は、サブキーに変換する必要があります。GPGの標準設定を使用して生成されたキーでは、通常、メインの秘密キーに使用フラグ「S」があります署名の場合は「C」、認証の場合は「C」、暗号化の場合は「E」がないため、通常は「E」サブキーでキーが生成されます。ただし、使用している手順により、最終的にメインキーがサブキーに変換され、新しい「マスターキー」に移行されると、すべての使用フラグ(「SCEA」)が有効になります。これは おそらく安全性を低下させる であり、おそらく回避すべき動作です。 )

2番目のファイル「712A2BBD_000002-013.user_id」は、ユーザーIDのパケットです( packet type tag 1 )。 (これは必要ありません)。

3番目のファイル「712A2BBD_000003-002.sig」は、これらのパケットのバインディング署名( packet type tag 2 )です。 (これは必要ありません)。

4番目のファイルは、秘密サブキー(F0B63FDA)のパケットです( パケットタイプタグ7 )。 (これが必要になります。通常、このようなサブキーには「E」使用フラグがあり、これは暗号化のみを目的としています。ただし、新しい「マスターキー」にインポートするプロセスでは、すべての使用フラグを取得します、( "SCEA")、つまり おそらく良いことではない です。)

5番目のファイル「712A2BBD_000005-002.sig」は、サブキーのバインディング署名( パケットタイプタグ2 )です。あなたはそれを必要としません。

必要な2つのファイルを保存し、他のファイルを削除します。


2。メインキー(712A2BBD)をサブキーに変更します

サブキー(F0B63FDA)を新しい「マスターキー」に移行するために何もする必要はありませんが、古いキーのメインキー(712A2BBD)を変更して、機能させる必要があります。

16進数またはバイナリの編集が可能なエディタで、メインキー「712A2BBD_000001-005.secret_key」を開きます。私は ghex を使用しました:

$ ghex 712A2BBD_000001-005.secret_key

16進エディタを使用している場合、最初のバイトは「95」になります。 「9D」に変更してください。

バイナリエディタを使用している場合、最初のバイトは「10010101」になります。 「10011101」に変更します。

それを保存してから、pgpdumpを使用して、サブキーへの変更に成功したかどうかを確認します。成功した場合は、次の出力が表示されます。

$ pgpdump 712A2BBD_000001-005.secret_key | head -1
-----------------
Old: Secret Subkey Packet(tag 7)(1836 bytes)

3。追加するサブキーのeachの新しい「マスターキー」に「ダミー」サブキーを追加します。

atom.smasher.org のチュートリアルと同じように、マスターキーにキーバインド署名があることを確認するために、「マスターキー」に新しい「ダミー」サブキーを作成する必要があります。 (少なくとも最初は)移行するサブキーに対応します。

それは、古いサブキーがスロットに入る「スロット」を作成することと考えてください。追加するキーと同じ数のスロットが必要です。

この例では、2つのダミーサブキーを作成しますが、元の投稿にリストしたすべてのキーを追加する場合は、6つ作成する必要があります。

$ 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

サブキー生成ウィザード(上記の--expertオプションのおかげでエキスパートモードです)を実行しているときに、新しい「ダミー」サブキーを生成するときも同じであることを確認してください...

  • キー強度(2048、4096など)
  • タイプ(DSA、RSA、elgamal)
  • 使用法(暗号化、署名)

...その「スロット」に追加するサブキーとして。

2つのサブキーを追加するので、「マスターキー」に2つの新しい「ダミー」サブキーを追加します。保存して終了:

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

4。新しい「マスターキー」を、その新しいサブキーとともに、構成パケットに分割します。

$ gpg --export-secret-keys CB577A43 | gpgsplit -vp CB577A43_

あなたは次のようなもので終わるはずです:

$ 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**

5番目と7番目のファイル(**に入れたもの)は、「ダミーサブキー」を生成したときに生成されたサブキーキーバインディング署名パケットです。これらが必要になります。

4番目と6番目のファイルは、実際の「ダミーサブキー」パケットです。それらを安全に削除できるようになりました(削除する必要があるファイルは1つだけです)。

$ rm CB577A43_000004-007.secret_subkey CB577A43_000006-007.secret_subkey

5。移行する「サブキー」を分割マスターキーに「スロットイン」します。

手順1と2では、2つのファイルが残っています。

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".)

これらを「マスターキー」の構成要素が分割されたフォルダーにコピーし、これらのファイルの名前を変更して、削除した「ダミーサブキー」ファイルを置き換えます。

$ mv 712A2BBD_000001-005.secret_key CB577A43_000004-007.secret_subkey
$ mv 712A2BBD_000004-007.secret_subkey CB577A43_000006-007.secret_subkey

ここでも7つのファイル(この例では)が必要ですが、ファイル4と6は古いキーになり、すべて設定され、新しいマスターキーのサブキーになる準備ができました。

$ 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

6。ファイルを秘密鍵ファイルと公開鍵ファイルに連結し、インポートの準備をします

後で簡単にインポートできるように、ファイルをまとめて1つのファイルに連続して連結します。

$ 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

同じコマンドを使用しますが、新しいファイルにリダイレクトする前に、対応するパブリックを作成するために出力をgpgsplitにパイプします。

$ 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

7。鍵リングをバックアップし、公開鍵と秘密鍵の両方の「古い」および「マスター」鍵を鍵リングから削除します。

$ cp -R ~/.gnupg/ ~/.gnupg_backup
$ gpg --delete-secret-and-public-keys CB577A43 712A2BBD

8。 gnupg-1.2.0をダウンロードしてビルドします

最近、誰かが atom.smasher.org でチュートリアルを実行しようとするたびに、彼らが遭遇する問題は、最新バージョンのgpgでは、キーを再構成してキーリングに追加すると、追加されたサブキー1)使用フラグがありません。2) atom.smasher.orgチュートリアル でアドバイスされているように、有効期限をリセットできません。新しい有効なキーバインディング署名を作成するために必要な手順です。その結果、1回のエクスポート/インポートサイクルの後、キーはGPGによって無効と見なされ、秘密キーリングから消えます。

キーを正常にインポートするには、gnupgの古いバージョンをダウンロードしてビルドする必要があります: 2002からのバージョン 以上。それを作成したら、新しいキーの有効期限をリセットし、キーの有効なキーバインドを正常に再作成できます。

古い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

新しくビルドしたgpgバイナリが含まれているg10フォルダーに移動します。

$ cd g10

このバイナリを使用するには、システム全体の最新のgpgビルドの代わりに、バイナリへの絶対パスを入力する必要があります。同じフォルダにいる場合は、。/ gpgを使用します。次に例を示します。

$ ./gpg --list-keys

8。インポートされたサブキーを含む、新しく組み立てられた「マスターキー」ファイルを公開キーリングと秘密キーリングに追加します。

キーバインド署名はチェックアウトされないため、キーを通常の方法でインポートしないでください。その結果、インポートされたサブキーは通常の方法でインポートされません。代わりに、ファイルを公開鍵リングと秘密鍵リングの最後に配置してください。

$ cat concatenated_CB577A43.secret >> ~/.gnupg/secring.gpg
$ cat concatenated_CB577A43.public >> ~/.gnupg/pubring.gpg

Gnupg-1.2.0を使用してキーをリストすることにより、それらがそこに入っていることを確認します。

$ ./gpg --list-keys
-----------------
pub   4096R/CB577A43 2013-03-21
uid                  Master Key
sub   2048R/712A2BBD 2013-01-29
sub   2048R/F0B63FDA 2013-01-29

9。 gnupg-1.2.0を使用してキーを編集します

Gnupg-1.2.0/g10のビルドフォルダーに戻り、ビルドされたバイナリを呼び出して、新しくインポートされ、新しくアセンブルされたマスターキーを編集し、インポートされた古いサブキーを完成させます。

$ ./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 

まず、パスワードをリセットします。

Command> passwd

古いキーはすべて、新しいマスターキーとは異なるパスワードを持っている可能性があります。ここでパスワードをリセットすると、古いキーの各パスワード(サブキーIDとともに)が順番に表示され、すべてのキーを正しく入力すると、新しいキーの入力を求められます。これが完了すると、それらはすべて同じパスワードを持ち、後で奇妙なことを避けます。

次に、すべてのキーの有効期限をリセットします。メインマスターキーから始めます。

Command> expiry

次に、各サブキーの有効期限を変更して、各サブキーを操作します。

Command> key 1
Command> expiry
Command> key 1
Command> key 2
Command> expiry
Command> key 2
Command> key 3

等々

まだ変更していない値に変更してください。変更しないと変更されません。後で元の値に戻すことができます。今必要なのは変更なので、gpg-1.2.0は新しいサブキーバインディング署名を作成できます。

これがすべて完了したら、保存します。

Command> save

gnupg-1.2.0は終了して新しいキーバインディング署名を保存し、古いキーの新しいマスターキーへの移行を検証します。


10。次に、標準の(現在の)gnupgを使用してキーを編集し、それが機能するかどうかを確認します

システム全体の標準バージョンのgpgを使用して編集用に同じキーを開き、機能するかどうかを確認します。うまくいった場合、次の2つが表示されます。

  1. 有効期限は、手順9で変更した新しい有効期限であり、元の有効期限ではありません。
  2. サブキーの右側にある使用フラグには「usage:SCEA」と表示されます

$ 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

機能しなかった場合、使用フラグは空白になり、有効期限には手順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: 

最後に、1つのエクスポート/インポートサイクルを経て、その間のキーを削除する必要があります。これが生き残った場合、手順はうまくいきました。

$ 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

11。最終タスク

それが機能したと仮定すると、サブキーを作成して検証できるように、サブキーを cross certify する必要があります。

$ gpg --edit-key CB577A43

そして、gpg編集プロンプトから:

gpg> cross-certify

また、信頼をリセットする必要があります。

gpg> trust

最後に、キーを厳密にテストし、配布する前に機能することを確認してください。これらの最後の手順については、 atom.smasher.orgチュートリアル を参照します。

  • すべての有効期限と設定を確認してください。これらの操作の一部により、有効期限と設定が変更された可能性があります。必要に応じてリセットしてください。

  • 署名の作成と検証、および暗号化/復号化のためのすべての主要コンポーネントをテストします。強打(!)を使用して、各(サブ)キーを強制します。署名を作成して確認します。

    $ date | gpg -u '712A2BBD!' --clearsign | gpg -v --verify
    $ date | gpg -u 'F0B63FDA!' --clearsign | gpg -v --verify
    

    暗号化/復号化:

    $ date | gpg -ear '712A2BBD!' | gpg -v --decrypt
    $ date | gpg -ear 'F0B63FDA!' | gpg -v --decrypt
    
  • キーをローカルでテストした後、新しい公開キーを1人または2人に送信し、すべてのキーコンポーネントをテストします(すべてのキーコンポーネントを使用して、互いに署名/暗号化されたメッセージを送信します)。彼らが最初に古いキーを(キーリングから)削除することを確認してください!そして、すべての機能が動作することが確認されるまで、キーを循環させないように彼らが理解していることを確認してください!

  • 新しいキーを配布する場合は、古いキーを期限切れにするか、失効させることをお勧めします。新しいキーIDを指定する失効コメントと、キーリングから古いキーを削除する手順を含めます。

  • キーの失効に関する注意:OpenPGP標準に従って、サブキーが失効キーとして(主キーによって)指定されていない限り、サブキーによって生成された失効は無視されます。 GnuPGは正しく動作しているように見えますが、PGP(tm)の一部のバージョンでは動作しない場合があります。新しいキーが取り消されたと誰かが主張している場合は、キーリングから古いキーと現在のキーをすべて削除し、現在のキーを再インポートします。

36
breakingbits

GnuPG 2.1から、私が間違っていない限り、これを簡単に開始する方法があります。新しい主キーを作成し、次にその他既存のキーをサブキーとして追加します。

ここに古いキーがあります:

$ 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

まず、完全に新しい主キーを作成します。

$ 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]

(簡単にするために--quick-generate-keyを使用しました。もちろん、必要に応じて--generate-keyまたは--full-generate-keyを使用できます。)

次に、--expertフラグを使用して新しいキーを編集します。

$ 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>

私はaddkeyサブコマンドを使用していますが、--expertフラグがあるため、キーグリップを使用して既存のキーを追加するオプションが表示されます(この例ではオプション13ですが、数値は変わる可能性があるため、私は安定したエイリアス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>

(許可されたアクションについて尋ねられたら、常にデフォルトで署名と暗号化を行うため、キー機能を適切に調整します。)

この方法で、古い主キーとそのサブキーをすべて新しいキーに追加できます。そして最後にsaveを忘れないでください。

キーグリップを比較することで、これが実際に同じキーであることを確認できます。

$ 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
5
kirelagin

残念ながら、最良のオプションは、キーを取り消し、必要なサブキーで新しいキーを作成し、それをキーサーバーにアップロードすることです。私は数年前にこの分割と統合を試みましたが、あなたと同じような問題に遭遇しました。私は結局それがなぜ機能しないかを示す優れた記事に出くわしましたが、私はそれを見つけることができないようです。リンクを投稿します。

1
felixphew

これは、キーサーバーからサブキーを削除するだけの問題である可能性があります。署名をインポートしようとすると、キーの種類を元の値に上書きしていると思います。

統合されたキーに期待した署名がない場合は、分割するキーに含まれていることを確認し、再構築時に正しく追加されるようにする必要があります。あなたがそれらを連結しているとき、それはおそらく注文の問題ですか?または、再構成されたときにサブキーに署名するマスターの署名がない(sigタイプ0x18:サブキーバインディングsig)?

最終的な製品の外観と同じように、3つのサブキーを持つ新しいマスターキーを作成し、それをダンプまたは分割して、その構造を確認し、最後に、すべてのサブキーと同じ順序でサブキーを持つ元のマスターキーを組み立てることをお勧めします同じ作品。いくつかの署名タイプを作成する必要がある場合があるため、pgpdumpの署名タイプに注意してください。 gpg --edit-keyを使用すると、キーのシグを確認できます。

次に、更新したキーをサーバーにプッシュしてから、再度ダウンロードを試みます。

編集:私が追加する必要があるのは、復元しようとしているサブキーの署名のいずれかが他のサブキーのものである場合、それらは新しいコンテキストでは意味をなさないため、おそらく省略すべきです。実際、サブキーが通常まったく署名されているか、またはマスターキーのみが通常署名されているかどうかを確認します。

1
petiepooo

徹底的なウォークスルーのためのbreakingbitsのおかげで。失われた/壊れた使用フラグは、新しいselfsigで修正できます。私の調査では、この件に関してgnupg-usersにいくつかの投稿が示され、すべて本質的に「サポートされていませんが、コードは編集できます」と述べています。別のスレッドによって引用されたある投稿は、コードソリューションの大まかなスケッチを提供しましたが、実際には機能しません。 (これは (*p) &= ~2 役職;最近のgnupg-1.4では、少なくとも、ローカルgpgがキーを解析して、使用フラグを変更したかのように見えますが、実際にはキーマテリアルは変更されず、他の誰かのgpgでは機能しません。結局。)

私は現存する解決策を見つけられなかったので、私はgnupg-1.4へのパッチを書いて、-edit-keyでほぼ任意の使用フラグ編集を許可することによって使用フラグを本当に修正しました。有効期限を変更する必要はありません。これは、セルフシグアップデートを強制するための一般的なトリックです。興味がある場合は、ここで見つけることができます: https://github.com/xdgc/gnupg/tree/dgc/usage-1-4

1
dgc