Geração de chaves OpenPGP com Backup#

(Nitrokey 3 - macOS)

As instruções seguintes explicam a geração das chaves OpenPGP e como copiá-las para a Nitrokey. Este método tem a vantagem de fornecer um backup das chaves em caso de perda ou quebra da Nitrokey. As instruções são baseadas na interface de linha de comando do GnuPG. Assim, é necessário ter o GnuPG instalado no seu sistema. A mais recente versão do GnuPG para Windows pode ser encontrada here e a mais recente versão para MacOS pode ser encontrada here. Os utilizadores de sistemas Linux devem instalar o GnuPG com a ajuda do gestor de pacotes.

Geração de chaves#

No início, você precisa gerar uma chave localmente. Você pode decidir quais atributos-chave usar e - o mais importante - pode exportar a chave e mantê-la em algum lugar, exceto em caso de necessidade de restaurar a chave.

Chave Principal e Subchave de Criptografia#

Podemos usar o comando gpg --full-generate-key --expert para iniciar uma geração de chaves guiadas com todas as opções possíveis. Você pode escolher o tipo de chave (geralmente RSA (1) ou ECC (9)), o comprimento da chave e outros atributos. A saída seguinte é apenas um exemplo simples, você pode escolher outros valores.

> gpg --full-generate-key --expert
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
   (9) ECC and ECC
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (13) Existing key
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want for the subkey? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Jane Doe
Email address: jane@example.com
Comment:
You selected this USER-ID:
    "Jane Doe "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 0EFFB0704391497C marked as ultimately trusted
gpg: revocation certificate stored as '/home/nitrokey//.gnupg/openpgp-revocs.d/9D12C91F6FC4CD6E10A1727A0EFFB0704391497C.rev'
public and secret key created and signed.

pub   rsa2048 2018-09-17 [SC]
      9D12C91F6FC4CD6E10A1727A0EFFB0704391497C
uid                      Jane Doe
sub   rsa2048 2018-09-17 [E]

Nota

For information regarding the supported algorithms, please refer to the faq

Sub-chave para Autenticação#

Agora você tem uma chave principal com a capacidade de assinar e certificar (marcada como [SC]) e uma sub chave para criptografia (marcada como [E]). É necessário ter outra subchave para os casos de uso em que a autenticação é necessária. Esta subchave é gerada no próximo passo. Digite gpg --edit-key --expert keyID para iniciar o processo, enquanto «keyID» é ou o id da chave ou o endereço de e-mail usado durante a geração da chave.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
[ultimate] (1). Jane Doe

gpg>

Agora você está no modo interativo do GnuPG e você pode adicionar uma chave simplesmente digitando addkey. Você precisa escolher a chave que você quer usar. É crucial escolher «definir as suas próprias capacidades», porque queremos ter a capacidade de «autenticar» que não está disponível de outra forma. Nós alteramos o sinal e encriptamos digitando s e e e ativamos a autenticação digitando `x id="375"></x>`.

gpg> addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (12) ECC (encrypt only)
  (13) Existing key
Your selection? 8

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? s

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: 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:

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? a

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? q

Saímos com q`. Depois precisamos responder as mesmas perguntas de antes. Finalmente, temos um conjunto de chaves prontas a usar que podemos importar para o nosso dispositivo.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

Agora é uma boa altura para fazer uma cópia de segurança da sua chave. Por favor, mantenha esta cópia de segurança muito segura. É a melhor prática nunca ter esta chave num computador normal que tenha ligação à Internet, para que a chave nunca fique comprometida. Você pode criar uma cópia de segurança com algo como:

> gpg --export-secret-keys jane@example.com > sec-key.asc

Importação de chaves#

Você tem uma chave principal e duas subchaves que podem ser importadas para a sua Nitrokey. Antes de prosseguir, certifique-se de que tem realmente uma cópia de segurança da chave, se precisar de uma. O comando keytocard usado nos próximos passos irá apagar a sua chave do seu disco!

Iniciamos o processo acessando a interface interativa do GnuPG novamente com gpg --edit-key --expert keyID, enquanto `x id="125"></x> é ou o id da chave ou o endereço de e-mail usado durante a geração da chave.

> gpg --edit-key --expert jane@example.com
gpg (GnuPG) 2.2.10; Copyright (C) 2018 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.

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Acabámos de importar a chave principal do cartão. Agora continuamos com as duas subchaves. Digitamos key 1` para selecionar a subchave de criptografia e digitamos keytocard novamente e selecionamos o slot a ser utilizado.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb* rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

Agora desmarcamos a primeira tecla com key 1 e selecionamos a segunda subchave com key 2` e mova-o também com `x id="116"></x>`. Depois desistimos e guardamos as alterações.

gpg> key 1

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb  rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> key 2

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> keytocard
Please select where to store the key:
   (3) Authentication key
Your selection? 3

sec  rsa2048/0EFFB0704391497C
     created: 2018-09-17  expires: never       usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/A9A814C210F16700
     created: 2018-09-17  expires: never       usage: E
ssb* rsa2048/61F186B8B0BBD5D5
     created: 2018-09-17  expires: never       usage: A
[ultimate] (1). Jane Doe

gpg> quit
Save changes? (y/N) y

As suas chaves são agora movidas para a Nitrokey e, assim, protegidas em hardware. Parabéns!

Exportação de Chaves Públicas e Utilização do Servidor de Chaves#

Embora possa começar a usar a sua Nitrokey imediatamente após gerar as chaves no seu sistema, precisa de importar a sua chave pública em todos os sistemas, você quer usar a Nitrokey ligada. Por isso, para estar preparado, você tem duas opções: Ou guarda a chave pública onde quiser e usa-a noutro sistema ou guarda a chave pública num webpage/keyserver.

Geração de um arquivo de chave pública#

Para obter um ficheiro simples da sua chave pública, pode apenas usar gpg --armor --export keyID > pubkey.asc`. Utilize a impressão digital como «keyID» (olhe para gpg -K para a obter) ou utilize apenas o seu endereço de e-mail como identificador.

Você pode carregar este arquivo com você ou enviá-lo a quem quiser. Este ficheiro não é de todo secreto. Se quiser usar a Nitrokey noutro sistema, primeiro importa esta chave pública através de gpg --import pubkey.asc e depois digite gpg --card-status para que o sistema saiba onde procurar por esta chave. E é tudo.

Carregamento da chave pública#

Se você não quiser carregar um arquivo de chave pública com você, você pode carregá-lo no keyerver. Você pode fazer isso digitando gpg --keyserver search.keyserver.net --send-key keyID`. Se você estiver usando outra máquina você pode simplesmente importá-la usando gpg --keyserver search.keyserver.net --recv-key keyID`.

Outra possibilidade é alterar a configuração do URL no seu cartão. Inicie gpg --card-edit` novamente e primeiro defina a URL onde a chave está situada (por exemplo, no servidor de chaves ou na sua página web, etc.) através do comando url. De agora em diante você pode importar a chave em outro sistema apenas usando o comando fetch dentro do comando gpg --card-edit environment`.