Elliptisten käyrien (ECC) tuki

RSA-2048 muuttuu yhä epävarmemmaksi

Saksan liittovaltion tietoturvavirasto (Bundesamt für Sicherheit in der Informationstechnik, BSI) ei turvallisuussyistä enää suosittele 2048-bittisten ` RSA-avainten käyttöä vuoden 2023 jälkeen <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf>`__. Tämä tarkoittaa, että pidempiä avaimia on otettava käyttöön lähitulevaisuudessa. Jos oletetaan, että käyttöaika on viisi vuotta, on jo nyt tarpeen luoda pidempiä avaimia. Pidemmät RSA-avaimet, 3072 tai 4096 bittiä, ovat kuitenkin huomattavasti hitaampia. Tästä syystä uudet Nitrokey Storage 2 ja Pro 2 (tai integroidun OpenPGP-kortin versio 3.3) tukevat salausta elliptisen käyrän salausmenetelmällä (ECC). Tätä menetelmää pidetään yhtä turvallisena pienemmillä ECC-avaimilla kuin pidemmillä RSA-avaimilla, ja se on myös huomattavasti nopeampi.

Elliptisen käyrän salauksen perusteet

Toisin kuin RSA:ssa, elliptisen käyrän salausmenetelmästä on olemassa monia eri muotoja (niin sanottuja käppyröitä). Erityisesti NSA oli mukana NIST-käyrien kehittämisessä. Vaikka käyrissä ei olisikaan todisteita takaovista, tietyn käyrän käyttäminen voi herättää luottamuskysymyksen. Onneksi uudet Nitrokey Storage 2 ja Pro 2 tukevat kahdenlaisia käyriä, nimittäin NIST- ja Brainpool-käyriä. Seuraavassa käytämme Brainpool-käyriä. Tämä artikkeli tarjoaa hyvän lähtökohdan yleiseen ymmärrykseen elliptisten käyrien kryptografiasta.

Järjestelmävaatimukset

Elliptisiin käyriin perustuvien avainten luomiseen tarvitaan Nitrokey Storage 2 / Pro 2 ja GnuPG:n versio 2.1.17 tai uudempi.

Voit lukea Nitrokeyn OpenPGP-korttiversion gpg2 --card-status kautta:

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

Versio-kenttä edustaa Nitrokey-korttiin integroidun OpenPGP-kortin versiota - tässä tapauksessa se on 3.3, jota tarvitaan Elliptic-curve-kryptografiassa. OpenPGP-kortin versio 2.2 ei tue ECC:tä.

GnuPG:n asennetun version saat selville gpg2  --version kautta. Vähintään versio 2.1.16 vaaditaan. Uusin GnuPG-versio Windowsille löytyy täältä ja uusin versio MacOS:lle löytyy täältä. Sopiva versio GnuPG:stä sisältyy GNU/Linux-jakeluihin Ubuntu (18.04:stä lähtien), Debian (Stretchistä lähtien), Arch Linux, Fedora (julkaisusta 26 lähtien) ja openSUSE Tumbleweed. Tämän artikkelin lopussa on ohjeet GnuPG:n manuaaliseen päivittämiseen vanhemmissa Ubuntu-versioissa.

Tärkeä

GnuPG 2.0 on edelleen käytössä, mutta sen tuki on lopetettu vuonna 2017. Kaikkien viestintäkumppaneiden on käytettävä GnuPG 2.1:tä tai uudempaa versiota sähköpostin salaukseen ECC:n avulla, muuten saattaa syntyä yhteensopimattomuusongelmia. Siksi ECC:tä kannattaa käyttää vain, jos olet varma, että pystyt kiertämään tämän ongelman.

Avainten tuottaminen Nitrokey Storage 2 / Pro 2 -laitteella

Kun nämä vaatimukset on täytetty, voit aloittaa. (Varoitus: olemassa olevat avaimet ylikirjoitetaan prosessin aikana!) Sinulla on nyt kaksi vaihtoehtoa. Ensimmäinen vaihtoehto on luoda avain suoraan Nitrokey Storage 2 / Pro 2 -laitteeseen. Tämän etuna on se, että avain ei koskaan ole laitteen ulkopuolella eikä sitä näin ollen voida koskaan lukea. Toinen vaihtoehto on tuoda aiemmin paikallisesti luotu avain. Tässä tapauksessa etuna on, että voit tallentaa avaimesta turvallisesti varmuuskopion, joka voidaan palauttaa, jos Nitrokey katoaa. Jäljempänä kuvataan vain ensimmäinen vaihtoehto. Luodaksesi avaimen varmuuskopion voit käyttää sekä seuraavia ohjeita ja käyttää näitä yleisiä tietoja siirtäessäsi avaimen Nitrokeyyn.

GnuPG:ssä on jo komento ”generate”, jolla voit helposti luoda avaimia laitteeseen. Avaintyyppiä ei kuitenkaan vielä voi valita suoraan, joten avain on ensin valmisteltava. Käytämme tähän seuraavia komentoja:

> 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

Vaihtoehtoisesti voidaan valita myös muita käyriä, kuten seuraavassa jaksossa kuvataan.

Nyt kirjoitamme gpg2 --card-edit ja näemme, että brainpoolP256r1 on ”key attributes” -kohdassa rsa2048:n sijaan.

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

Sitten luomme avaimen.

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 käyttää nyt RSA-avaimen sijasta elliptisen käyrän salausmenetelmää, ja sitä voidaan käyttää tavalliseen tapaan.

Saatavilla olevat käyrät

Edellä esitetyssä menettelyssä valitsimme Brainpool-käyrät. Vaihtoehtoisesti voidaan käyttää NIST-käyriä. Konfigurointi suoritetaan seuraavasti:

> 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

Päivitys GnuPG Ubuntussa

Seuraavat vaiheet ovat tarpeen vain, jos käytössäsi on Ubuntun versio, joka on vanhempi kuin 18.04. Voit asentaa GnuPG 2.1.18:n tällaiseen järjestelmään alla olevilla komennoilla. Tämä edellyttää uudempia Debian-paketteja, mikä on helpoin vaihtoehto. Tämä lähestymistapa on testattu onnistuneesti Ubuntu 17.10:ssä ja toimii todennäköisesti myös 16.04:ssä. Ongelmien esiintymistä käytön aikana ei kuitenkaan voida sulkea pois.

$ 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

Jos haluat peruuttaa asennuksen, sinun on suoritettava seuraavat komennot:

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