Por que o GPG não é descriptografado com todas as subchaves?

4

Eu tenho várias subchaves para assinatura e criptografia. Aqui está a minha lista de chaves públicas e privadas.

jeremy@localhost ~ 
$ gpg -k
/home/jeremy/.gnupg/pubring.gpg
-------------------------------
pub   4096R/35E40FA7 2015-04-14
uid                  keybase.io/jeremytwfortune <[email protected]>
uid                  Jeremy Fortune <[email protected]>
uid                  Jeremy Fortune <[email protected]>
sub   2048R/73671EAD 2015-04-14 [expires: 2023-04-12]
sub   2048R/0690427C 2015-04-14 [expires: 2023-04-12]
sub   4096R/AEE9FB5F 2015-12-06 [expires: 2025-12-03]
sub   4096R/757D1A1D 2015-12-06 [expires: 2025-12-03]
sub   2112R/9B5BAC36 2015-12-06 [expires: 2025-12-03]
sub   4096R/5A8F548A 2015-12-06 [expires: 2025-12-03]


jeremy@localhost ~ 
$ gpg -K
/home/jeremy/.gnupg/secring.gpg
-------------------------------
sec   4096R/35E40FA7 2015-04-14
uid                  keybase.io/jeremytwfortune <[email protected]>
ssb   2048R/73671EAD 2015-04-14
ssb   2048R/0690427C 2015-04-14

Quando eu criptografo uma mensagem para mim, a mais nova chave de criptografia (9b5bac36) é usada. Isso parece bom, já que é uma subchave, mas quando descriptografar, o gpg ainda está apenas procurando exatamente essa chave privada. Nem sequer tenta usar o 0690427c.

jeremy@localhost ~ 
$ echo -e "\nAn encrypted message." | gpg -vver 35e40fa7 | gpg -vvd
gpg: using subkey 9B5BAC36 instead of primary key 35E40FA7
gpg: using PGP trust model
gpg: key 35E40FA7: accepted as trusted key 
gpg: checking the trustdb
gpg: 1 keys cached (11 signatures)
gpg: 1 keys processed (0 validity counts cleared)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: This key belongs to us
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: RSA/AES256 encrypted for: "9B5BAC36 keybase.io/jeremytwfortune <[email protected]>"
:pubkey enc packet: version 3, algo 1, keyid 743409AA9B5BAC36
        data: [2111 bits]
gpg: public key is 9B5BAC36
:encrypted data packet:
        length: 76
        mdc_method: 2
gpg: using subkey 9B5BAC36 instead of primary key 35E40FA7
gpg: encrypted with 2112-bit RSA key, ID 9B5BAC36, created 2015-12-06
      "keybase.io/jeremytwfortune <[email protected]>"
gpg: decryption failed: secret key not available

Quando revogo as chaves de criptografia mais recentes, tudo funciona conforme o esperado.

jeremy@localhost ~
$ gpg -k
/home/jeremy/.gnupg/pubring.gpg
-------------------------------
pub   4096R/35E40FA7 2015-04-14
uid                  keybase.io/jeremytwfortune <[email protected]>
uid                  Jeremy Fortune <[email protected]>
uid                  Jeremy Fortune <[email protected]>
sub   2048R/73671EAD 2015-04-14 [expires: 2023-04-12]
sub   2048R/0690427C 2015-04-14 [expires: 2023-04-12]
sub   4096R/AEE9FB5F 2015-12-06 [expires: 2025-12-03]
sub   4096R/5A8F548A 2015-12-06 [expires: 2025-12-03]

jeremy@localhost ~
$ echo -e "\nAn encrypted message." | gpg -vver 35e40fa7 | gpg -vvd
gpg: using subkey 0690427C instead of primary key 35E40FA7
gpg: using PGP trust model
gpg: key 35E40FA7: accepted as trusted key
gpg: This key belongs to us
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: RSA/AES256 encrypted for: "0690427C keybase.io/jeremytwfortune <[email protected]>"
:pubkey enc packet: version 3, algo 1, keyid 60A3F13E0690427C
        data: [2045 bits]
gpg: public key is 0690427C
gpg: no secret subkey for public subkey AEE9FB5F - ignoring
gpg: no secret subkey for public subkey 5A8F548A - ignoring
gpg: using subkey 0690427C instead of primary key 35E40FA7

You need a passphrase to unlock the secret key for
user: "keybase.io/jeremytwfortune <[email protected]>"
gpg: using subkey 0690427C instead of primary key 35E40FA7
2048-bit RSA key, ID 0690427C, created 2015-04-14 (main key ID 35E40FA7)
gpg: gpg-agent is not available in this session
gpg: public key encrypted data: good DEK
:encrypted data packet:
        length: 76
        mdc_method: 2
gpg: encrypted with 2048-bit RSA key, ID 0690427C, created 2015-04-14
      "keybase.io/jeremytwfortune <[email protected]>"
gpg: AES256 encrypted data
:compressed packet: algo=1
:literal data packet:
        mode b (62), created 1458172973, name="",
        raw data: 23 bytes
gpg: original file name=''

An encrypted message.
gpg: decryption okay

Mas, claro, isso é porque agora ele está criptografando com o 0690427c. Posso realmente ter apenas uma subchave de criptografia? Se não, eu tenho que manter todas as subchaves secretas em cada máquina?

    
por Jeremy Fortune 17.03.2016 / 21:59

1 resposta

3

As implementações do OpenPGP (incluindo o GnuPG), por padrão, escolherão a mais nova (válida) chave de criptografia e criptografarão usando isso. Não há como definir que uma determinada subchave está de alguma forma vinculada a um determinado computador ou ID de usuário no OpenPGP, nem pode impor que a criptografia seja executada para todas as chaves de criptografia válidas.

Pode-se muito bem manualmente escolher a chave a ser usada para criptografia com o GnuPG usando o ID da chave como destinatário, mas seguido por ! . Por exemplo, dado que há uma subchave de criptografia mais antiga DEADBEEF e você deseja substituir o padrão de usar outra subchave de criptografia mais recente:

gpg --recipient DEADBEEF! --encrypt

Se o ! for omitido, o GnuPG resolverá o ID da chave para a chave primária e escolherá a subchave correspondente mais recente novamente. Usando o mesmo método, você pode impor o uso da chave primária (se tiver o recurso de criptografia definido).

Se você quiser usar chaves diferentes de criptografia em computadores diferentes, terá que usar chaves primárias diferentes. Esta é uma das maiores deficiências do OpenPGP.

    
por 17.03.2016 / 22:56