Understøttelse af elliptiske kurver (ECC)#

(Nitrokey Pro 2 - macOS)

RSA-2048 bliver mere og mere usikkert#

Af sikkerhedshensyn anbefaler det tyske forbundskontor for informationssikkerhed (Bundesamt für Sicherheit in der Informationstechnik, BSI) ikke længere, at RSA-nøgler med en længde på 2048 bit ` skal anvendes efter 2022 <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf?_blob=publicationFile&v=10>`_. Det betyder, at længere nøgler vil skulle tages i brug inden for en overskuelig fremtid. Hvis man går ud fra en brugsperiode på fem år, er det allerede nu nødvendigt at generere længere nøgler. Længere RSA-nøgler med 3072 bit eller 4096 bit er dog betydeligt langsommere. Derfor understøtter de nye Nitrokey Storage 2 og Pro 2 (hhv. det integrerede OpenPGP-kort version 3.3) kryptering ved hjælp af elliptic-curve-kryptografi (ECC). Denne metode anses for at være lige så sikker med mindre ECC-nøgler som længere RSA-nøgler og er også betydeligt hurtigere.

Grundlæggende om elliptisk kurve-kryptografi#

I modsætning til RSA findes der mange forskellige former (såkaldte kurver) af elliptisk kurve-kryptografi. Det skal bemærkes, at NSA var involveret i udviklingen af NIST-kurverne. Selv om der ikke er beviser for bagdøre i kurverne, kan brugen af en bestemt kurve give anledning til et spørgsmål om tillid. Heldigvis understøtter de nye Nitrokey Storage 2 og Pro 2 to slags kurver, nemlig NIST og Brainpool. I det følgende vil vi bruge Brainpool-kurver. Denne artikel giver en god indgang til at få en generel forståelse af kryptografi med elliptiske kurver.

Systemkrav#

For at kunne oprette nøgler baseret på elliptiske kurver kræves Nitrokey Storage 2 / Pro 2 og GnuPG version 2.1.17 eller højere.

Du kan læse Nitrokeys OpenPGP Card-version via gpg2 —card-status:

> gpg2 --card-status
Reader ...........: 20A0:...
Application ID ...: D276...
Version ..........: 3.3
...

Feltet »Version« repræsenterer versionen af OpenPGP-kortet, der er integreret i Nitrokey - i dette tilfælde er det 3.3, som er nødvendigt for Elliptic-curve-kryptografi. OpenPGP Card version 2.2 understøtter ikke ECC.

You can learn about the installed version of GnuPG via gpg2  --version. At least version 2.1.16 is required. The newest GnuPG version for Windows can be found here and the newest version for MacOS can be found here. A suitable version of GnuPG is included in the GNU/Linux distributions Ubuntu (since 18.04), Debian (from Stretch onwards), Arch Linux, Fedora (from Release 26 onwards) and openSUSE Tumbleweed. At the end of this articles are instructions how to manually update GnuPG on older Ubuntu versions.

Vigtigt

GnuPG 2.0 bruges stadig, men understøttelsen af den er ophørt i 2017. Alle kommunikationspartnere skal bruge GnuPG 2.1 eller nyere til e-mail-kryptering ved hjælp af ECC, da der ellers kan opstå inkompatibilitetsproblemer. Derfor bør du kun bruge ECC, hvis du er sikker på, at du vil kunne omgå dette problem.

Nøglegenerering på Nitrokey Storage 2 / Pro 2#

Når disse krav er opfyldt, kan du komme i gang. (Advarsel: eksisterende nøgler vil blive overskrevet i processen!) Du har nu to muligheder. Den første mulighed er at oprette nøglen direkte på Nitrokey Storage 2 / Pro 2. Fordelen her er, at nøglen aldrig vil være uden for enheden og som sådan aldrig kan læses ud. Den anden mulighed er at importere en tidligere lokalt genereret nøgle. Fordelen i dette tilfælde er, at du sikkert kan gemme en sikkerhedskopi af nøglen, som derefter kan gendannes, hvis Nitrokey skulle gå tabt. Kun den første mulighed er beskrevet nedenfor. For at oprette en nøgle med sikkerhedskopi kan du få adgang til den følgende vejledning og bruge denne generelle oplysninger til at overføre nøglen til Nitrokey.

I GnuPG findes der allerede en »generate«-kommando, som kan bruges til nemt at oprette nøgler på enheden. Det er dog endnu ikke muligt at vælge nøgletypen direkte, så nøglen skal først forberedes. Vi bruger følgende kommandoer til dette:

> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 1 19 brainpoolP256r1" /bye
> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 2 18 brainpoolP256r1" /bye
> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 3 19 brainpoolP256r1" /bye

Alternativt kan der vælges andre kurver, som beskrevet i næste afsnit.

Nu indtaster vi gpg2 --card-edit og ser, at brainpoolP256r1 er under »key attributes« i stedet for rsa2048.

> gpg2 --card-edit
Reader ...........: 20A0:4109:0000000000000:0
Application ID ...: D276000124010303000500005F100000
Version ..........: 3.3
Manufacturer .....: ZeitControl
Serial number ....: 00005F10
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: brainpoolP256r1 brainpoolP256r1 brainpoolP256r1
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

Derefter opretter vi nøglen.

gpg/card> admin
Admin commands are allowed

gpg/card> generate
Make off-card backup of encryption key? (Y/n) n
Please note that the factory settings of the PINs are
PIN = '123456' Admin PIN = '12345678'
You should change them using the command --change-pin
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>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.doe@example.org
Comment:
You selected this USER-ID:
"Jane Doe <jane.doe@example.org>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
gpg: key 7F8C68E1B084E169 marked as ultimately trusted
gpg: revocation certificate stored as '/home/jane/.gnupg/openpgp-revocs.d/F8C00BC1636A7D7604A31A877F8C68E1B084E169.rev'
public and secret key created and signed.

Nitrokey indeholder nu elliptisk kurve-kryptografi i stedet for RSA-nøgler og kan bruges som sædvanlig.

Tilgængelige kurver#

I ovenstående procedure valgte vi Brainpool-kurverne. Alternativt kan NIST-kurver anvendes. Konfigurationen udføres på følgende måde:

> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 1 19 nistp256" /bye
> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 2 18 nistp256" /bye
> gpg-connect-agent "SCD SETATTR KEY-ATTR --force 3 19 nistp256" /bye

Opdatering af GnuPG på Ubuntu#

De følgende trin er kun nødvendige, hvis du kører en Ubuntu-version ældre end 18.04. Du kan installere GnuPG 2.1.18 på et sådant system med nedenstående kommandoer. Dette involverer nyere Debian-pakker, hvilket er den nemmeste løsning. Denne fremgangsmåde er blevet testet med succes på Ubuntu 17.10 og virker sandsynligvis også på 16.04. Det kan dog ikke udelukkes, at der kan opstå problemer under brugen.

$ mkdir gnupg_tmp
$ cd gnupg_tmp
$ wget http://ftp.debian.org/debian/pool/main/g/gnupg2/gnupg_2.1.18-8~deb9u1_amd64.deb
$ wget http://ftp.debian.org/debian/pool/main/g/gnupg2/dirmngr_2.1.18-8~deb9u1_amd64.deb
$ wget http://ftp.debian.org/debian/pool/main/g/gnupg2/gnupg-agent_2.1.18-8~deb9u1_amd64.deb
$ wget http://ftp.debian.org/debian/pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u1_amd64.deb
$ sudo dpkg -i *
$ cd ..
$ rm -rf gnupg_tmp

Hvis du ønsker at fortryde installationen, skal du udføre følgende kommandoer:

$ sudo dpkg --remove --force-depends gnupg dirmngr gnupg-agent scdaemon
  # (removes manually installed packages)
$ sudo apt-get install gnupg dirmngr gnupg-agent scdaemon
  # (installs the appropriate packages from regular package repositories)