Elliptiliste kõverate (ECC) tugi

RSA-2048 muutub üha ebakindlamaks

Saksamaa föderaalne infoturbeamet (Bundesamt für Sicherheit in der Informationstechnik, BSI) ei soovita pärast 2023. aastat ` enam kasutada RSA võtmeid pikkusega 2048 bit ` <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf>`__ turvakaalutlustel. See tähendab, et lähitulevikus tuleb kasutusele võtta pikemad võtmed. Eeldades viieaastast kasutusperioodi, on juba praegu vaja luua pikemaid võtmeid. Kuid pikemad RSA võtmed 3072 või 4096 bitiga on oluliselt aeglasemad. Seepärast toetavad uued Nitrokey Storage 2 ja Pro 2 (või integreeritud OpenPGP-kaardi versioon 3.3) krüpteerimist elliptilise kõveraga krüptograafia (ECC) abil. Seda meetodit peetakse väiksemate ECC-võtmete puhul sama turvaliseks kui pikemaid RSA-võtmeid ja see on ka oluliselt kiirem.

Elliptilise kurvi krüptograafia alused

Erinevalt RSA-st on elliptilise kõveraga krüptograafia palju erinevaid vorme (nn kõverad). Nimelt osales NSA NIST-kõverate väljatöötamisel. Isegi kui kõverates ei ole tõendeid tagauste kohta, võib teatud kõverate kasutamine tekitada usaldusküsimuse. Õnneks toetavad uued Nitrokey Storage 2 ja Pro 2 kahte liiki kõveraid, nimelt NIST ja Brainpool. Järgnevalt kasutame Brainpooli kõveraid. See artikkel annab hea lähtekoha elliptiliste kõverate krüptograafia üldiseks mõistmiseks.

Süsteeminõuded

Elliptilistel kõveratel põhinevate võtmete loomiseks on vaja Nitrokey Storage 2 / Pro 2 ja GnuPG versiooni 2.1.17 või uuemat versiooni.

Nitrokey OpenPGP-kaardi versiooni saate lugeda gpg2 --card-status kaudu:

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

Väli „Version“ tähistab Nitrokey’sse integreeritud OpenPGP-kaardi versiooni - antud juhul on see 3.3, mis on vajalik Elliptic-curve krüptograafia jaoks. OpenPGP-kaardi versioon 2.2 ei toeta ECC-d.

GnuPG installeeritud versiooni saate teada gpg2  --version kaudu. Vajalik on vähemalt versioon 2.1.16. Uusim GnuPG versioon Windowsile on leitav kuskilt ja uusim versioon MacOSile on leitav kuskilt. GnuPG sobiv versioon on lisatud GNU/Linuxi distributsioonidesse Ubuntu (alates versioonist 18.04), Debian (alates Stretchist), Arch Linux, Fedora (alates versioonist 26) ja openSUSE Tumbleweed. Selle artikli lõpus on juhised, kuidas GnuPG käsitsi uuendada vanematel Ubuntu versioonidel.

Tähtis

GnuPG 2.0 on endiselt kasutusel, kuid selle toetus on 2017. aastal lõpetatud. Kõik suhtluspartnerid peavad kasutama ECC abil toimuvaks e-posti krüpteerimiseks GnuPG 2.1 või uuemat versiooni, vastasel juhul võivad tekkida ühildamatusprobleemid. Seetõttu peaksite ECC-d kasutama ainult siis, kui olete kindel, et suudate sellest probleemist mööda minna.

Nitrokey Storage 2 / Pro 2 võtmete genereerimine

Kui need nõuded on täidetud, võite alustada. (Hoiatus: olemasolevad võtmed kirjutatakse protsessi käigus üle!) Nüüd on teil kaks võimalust. Esimene võimalus on luua võti otse Nitrokey Storage 2 / Pro 2-s. Selle eelis on see, et võti ei ole kunagi väljaspool seadet ja seega ei saa seda kunagi välja lugeda. Teine võimalus on importida eelnevalt lokaalselt loodud võti. Selle eelis on see, et saate turvaliselt salvestada võtme varukoopia, mida saab taastada, kui Nitrokey peaks kaduma. Allpool on kirjeldatud ainult esimest võimalust. Varukoopiaga võtme loomiseks saate juurdepääsu järgnevatele juhistele ja kasutada seda üldteavet võtme Nitrokey’sse ülekandmiseks.

GnuPG-s on juba olemas käsk „generate“, mida saab kasutada võtmete lihtsaks loomiseks seadmes. Siiski ei ole veel võimalik võtme tüüpi otse valida, seega tuleb võti kõigepealt ette valmistada. Kasutame selleks järgmisi käske:

> 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

Alternatiivselt võib valida ka muid kõveraid, nagu on kirjeldatud järgmises punktis.

Nüüd sisestame gpg2 --card-edit ja näeme, et brainpoolP256r1 on „key attributes“ all rsa2048 asemel.

> 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]

Seejärel loome võtme.

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 sisaldab nüüd RSA-võtmete asemel elliptilise kõveraga krüptograafiat ja seda saab kasutada tavapäraselt.

Saadaolevad kõverad

Ülaltoodud menetluses valisime Brainpooli kõverad. Alternatiivina võib kasutada ka NISTi kõveraid. Konfigureerimine toimub järgmiselt:

> 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

GnuPG uuendamine Ubuntu’s

Järgmised sammud on vajalikud ainult siis, kui kasutate Ubuntu versiooni, mis on vanem kui 18.04. GnuPG 2.1.18 saab sellisele süsteemile paigaldada alljärgnevate käskudega. See hõlmab uuemaid Debian-pakette, mis on kõige lihtsam variant. Seda lähenemist on edukalt katsetatud Ubuntu 17.10 peal ja tõenäoliselt töötab see ka 16.04 peal. Siiski ei saa välistada probleemide tekkimist kasutamise ajal.

$ 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

Kui soovite installimist tühistada, peate täitma järgmised käsud:

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