Geração de chaves OpenPGP com Backup#

(Nitrokey Start - Linux)

The following instructions explain the generation of OpenPGP keys and how to copy them to the Nitrokey. This method has the advantage of providing a backup of the keys in case of losing or breaking the Nitrokey. The instructions are based on the command line interface of GnuPG. Thus, you need to have GnuPG installed on your system. The newest GnuPG version for Windows can be found here and the newest version for MacOS can be found here. Users of Linux systems please install GnuPG with help of the package manager.

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]

A tabela a seguir ilustra qual algoritmo pode ser usado em qual dispositivo, caso você queira usar diferentes atributos-chave.

Início

Pro + Armazenamento

Pro 2 + Armazenamento 2

rsa1024

rsa2048

rsa3072

rsa4096

curva25519 (ECC)

NIST (ECC)

Brainpool (ECC)

secp256k1

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