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