Qual é a relação entre uma chave OpenPGP e sua subchave?

6

Estou vindo do uso de RSA simples e antigo com o OpenSSL para todas as minhas necessidades de criptografia assimétrica, que aprendi muito bem, mas estou tendo dificuldades de lidar com o protocolo OpenPGP. Portanto, isso vai ser algumas perguntas.

Na minha caixa Debian, usando o GnuPG, após a criação de uma chave mestra no keychain atual, notei a criação padrão de uma subchave. Eu aprendi, depois de ler um pouco, que o GnuPG gerencia as chaves dessa maneira automaticamente; a chave mestra usada estritamente para assinatura e a subchave usada estritamente para criptografia. Isso me levou a acreditar que eles tinham nomes diferentes para uma chave privada e pública: a chave mestra (como a chave privada) era usada para assinar dados que somente a subchave (a chave pública) podia descriptografar, mas a subchave chave pública) só poderia criptografar dados, que só poderiam ser descriptografados pela chave mestra (a chave privada). Estou correto nesta suposição, ou eles são dois pares de chaves separados ao todo?

Se eles são dois pares de chaves separados, o que vincula matematicamente a subchave à chave mestra?

É apenas o GnuPG que usa este método, onde uma subchave é criada automaticamente para criptografia, ou isso é mandado pelo protocolo OpenPGP?

Quando eu carrego uma chave em um servidor de chaves, que chave é carregada, minha chave mestra ou a subchave? Ou ambos?

Quando eu uso a função --export , qual chave OpenPGP é exportada quando especifico meu UID?

    
por TheFuzzyFish 14.08.2016 / 02:58

2 respostas

7

Sobre chaves primárias e subchaves

The master key (like the private key) was used to sign data that only the subkey (the public key) could decrypt, but the subkey (the public key) could only encrypt data, which could then only be decrypted by the master key (the private key). Am I correct in this assumption, or are they 2 separate key-pairs altogether?

Você não tem os conceitos de criptografia de chave pública / privada (também chamada de assimétrica) bem. Cada conjunto de chaves públicas e privadas é dividido, você publica a chave pública para que outras pessoas possam usá-la e manter a chave privada privada. As assinaturas emitidas pela chave privada podem ser verificadas através da chave pública, as mensagens criptografadas usando a chave pública podem ser descriptografadas com a chave privada. Não há relação imediata entre a chave primária e os pares de subchaves no OpenPGP, estes são pares de chaves completamente diferentes.

Is it just GnuPG that uses this method, where a subkey is created automatically for encryption, or is this mandated by the OpenPGP protocol?

A configuração padrão no GnuPG é que você tem um par de chaves primárias usado para certificação e assinaturas, enquanto a subchave de criptografia é usada apenas para criptografia. Usando o RSA, você também pode gerar chaves primárias que suportam todas essas operações (e com o GnuPG e o --expert flag, você pode!). Isto é principalmente devido a outros algoritmos como DSA e Elgamal, que suportam apenas uma das operações (DSA é apenas para assinatura, Elgamal para criptografia) onde você precisa para ter chaves diferentes.

Há também alguma vantagem em ter chaves diferentes para diferentes usos: considere-se uma falha que permite calcular uma chave privada de assinaturas sob certas condições. Embora sua chave de assinatura seja segmentada, a subchave de criptografia é outra e não é alvo desse ataque. Algumas pessoas até consideram restringir a chave primária à certificação apenas e adicionar dois pares de subchaves é a prática recomendada, uma para assinatura e outra para criptografia.

Assinaturas de ligação

If they are 2 separate key-pairs, what mathematically binds the subkey to the master key?

No OpenPGP, um tipo especial de assinatura de ligação é emitido quando uma subchave é criada. As subchaves capazes de assinar também podem emitir essa assinatura de ligação na chave primária. Essas assinaturas especiais são definidas em RFC 4880, OpenPGP, 5.2.1. Tipos de assinatura :

   0x18: Subkey Binding Signature
       This signature is a statement by the top-level signing key that
       indicates that it owns the subkey.  This signature is calculated
       directly on the primary key and subkey, and not on any User ID or
       other packets.  A signature that binds a signing subkey MUST have
       an Embedded Signature subpacket in this binding signature that
       contains a 0x19 signature made by the signing subkey on the
       primary key and subkey.

   0x19: Primary Key Binding Signature
       This signature is a statement by a signing subkey, indicating
       that it is owned by the primary key and subkey.  This signature
       is calculated the same way as a 0x18 signature: directly on the
       primary key and subkey, and not on any User ID or other packets.

Endereçamento de subchaves no GnuPG

When I upload a key to a keyserver, which key is uploaded, my master key or the subkey? Or both?

When I use the --export function, which OpenPGP key is exported when I specify my UID?

Normalmente, os IDs de chave e UIDs do GnuPG são sempre resolvidos para a chave primária. Todas as operações de exportação (e o upload para um servidor de chaves também é considerado uma exportação) também exporta as subchaves, IDs de usuário e certificações em sua chave. Existem coisas semelhantes para outras operações, como assinar e criptografar. Se você realmente quiser denotar uma subchave para operações, será necessário adicionar ! atrás da subchave (por exemplo, gpg --recipient 0xDEADBEEF! --encrypt ).

    
por 14.08.2016 / 09:10
1

Gosto de pensar no relacionamento entre a chave mestra e as subchaves, como o relacionamento entre uma autoridade de certificação (CA) e os certificados que ela assina e emite. Terceiros que tentam atestar certificados estabelecem uma relação de confiança com a CA e usam sua chave pública para verificar sua assinatura dos certificados que ela emitiu. Da mesma forma, você faz com que outras pessoas verifiquem sua chave mestra e assine a chave PGP (ou seja, toda a coisa descentralizada, web of trusts). Então você usa suas subchaves para todo o trabalho prático de assinar e criptografar dados. Quando outras pessoas querem atestar a validade das subchaves, elas usam o fato de que sua chave mestra é (espero) confiável (porque ela foi assinada por outras chaves confiáveis) e pode ser usada para verificar a assinatura nas subchaves, estabelecendo assim as subchaves como confiáveis.

As chaves mestras raramente devem ser usadas, exceto para coisas como a assinatura de novas subchaves.

    
por 13.08.2017 / 18:56