web-dev-qa-db-ja.com

Yubikeyが接続された後のexport-secret-key

私はYubikey Neoを使用していて、OS X(10.11.2)でGPGTools(GnuPG/MacGPG2 2.0.28)を実行しています。 SC機能と、署名と暗号化キーを個別に使用してマスターキーを生成しました。これらのキーは、keytocardコマンドを使用してYubikeyに移動しました。これらは、別のオフラインコンピューターで実行されます。

私の日常のコンピュータでは、自分の公開鍵しかインポートしていません。 Yubikeyを挿入してgpg --card-statusを実行すると、期待どおりに2つの秘密のサブキーが表示されます。ただし、Yubikeyが削除されると、gpg --list-secret-keysを実行できるようになり、署名と暗号化の両方の秘密サブキーが表示されます。さらに、私はgpg --export-secret-keyおよびそれらを再インポートすることもできますが、これらの秘密鍵は署名を実行したり、ファイルを復号化したりすることはできません(ここでも、Yubikeyがコンピューターから削除されています)。これは非常に奇妙な動作で、コンピューターがYubikeyから秘密キーを読み取ってローカルに保存しているようです(これらの秘密キーは無効です)。

再現する手順:

  1. 空のGPGキーチェーンから始めて、gpg --list-keysで確認します。
  2. Yubikeyにサブキーを挿入し、gpg --card-statusでこれらのサブキーを確認します。
  3. Yubikeyを削除します。
  4. gpg --list-secret-keyを実行すると、Yubikeyのサブキーが表示されます。
  5. gpg --armor --export-secret-key <key>を実行すると、秘密鍵が出力されます(この秘密鍵はアクションを実行できないようです)。

情報を誤って解釈していますか?

10

秘密鍵がYubikeyにあると、エクスポートできなくなります。エクスポートできるのは、秘密鍵stubsです。これは、実際にはこの鍵がスマートカード上にあるとだけ言っています。それらは別のコンピューターで(スマートカードを使用して)キーを機能させる主な方法でしたが、最近では、キーに関する十分な情報が保存されているため、-card-statusを使用して同じスタブを取得するだけですハードウェアキーから、公開キーをインポートします。

エクスポートされたスタブにどのような情報があるかを確認することができます

% gpg --list-packets --verbose <exported-stub.bin

# off=1796 ctb=9d tag=7 hlen=3 plen=294
:secret sub key packet:
    version 4, algo 1, created NNNNNNNNN, expires 0
    pkey[0]: [2048 bits]
    pkey[1]: [17 bits]
    gnu-divert-to-card S2K, algo: 0, simple checksum, hash: 0
    serial-number:  <ELIDED>
    keyid: <KEYID>
# off=2093 ctb=89 tag=2 hlen=3 plen=293
:signature packet: algo 1, keyid <KEYID>
    version 4, created NNNNNNNNNN, md5len 0, sigclass 0x18
    digest algo 8, begin of digest 7c 79
    hashed subpkt 2 len 4 (sig created <YYYY-MM-DD>)
    hashed subpkt 27 len 1 (key flags: 20)
    hashed subpkt 9 len 4 (key expires after <TIME>)
    subpkt 16 len 8 (issuer key ID <KEYID>)
    data: [2048 bits]

「秘密鍵サブパケット」にはpkeyが含まれているように見えますが、gnu-diver-to-cardエントリは、秘密鍵が存在しないことを示しています。署名は、公開鍵で確認できるようにするための鍵の署名であり、秘密鍵は含まれていません。

この場合、gpgが秘密鍵をエクスポートするためのパスフレーズを要求しないので、すべてが安全であるという別のヒント。

更新:pkeyが実際には秘密鍵ではなく公開鍵を参照していることをソースを介して確認-これらはgnupg内でskey sと呼ばれます。パスフレーズで保護されたskeyを含むパケットは次のようになります。

off=557 ctb=9c tag=7 hlen=2 plen=134
:secret sub key packet:
    version 4, algo 22, created NNNNNNNNNN, expires 0
    pkey[0]: [80 bits] ed25519 (1.3.6.1.4.1.11591.15.1)
    pkey[1]: [263 bits]
    iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: HHHHHHHHHHHHHHHH
    protect count: NNNNNNN (NNN)
    protect IV:  <IV>
 >> skey[2]: [v4 protected] <<
    keyid: <KEYID>

したがって、結論として、秘密鍵は安全です。Yubikeyなどのスマートカードを使用する場合、暗号化コンテンツは上記の方法でエクスポートされません。

13
chexum