Podpora eliptických kriviek (ECC)

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

inactive

active

active

inactive

active

inactive

inactive

RSA-2048 sa stáva čoraz viac nezabezpečeným

Nemecký Spolkový úrad pre informačnú bezpečnosť (Bundesamt für Sicherheit in der Informationstechnik, BSI) už z bezpečnostných dôvodov neodporúča používať kľúče RSA s dĺžkou 2048 bitov po roku 2023. To znamená, že v dohľadnej budúcnosti sa budú musieť začať používať dlhšie kľúče. Za predpokladu obdobia používania päť rokov je už teraz potrebné generovať dlhšie kľúče. Dlhšie kľúče RSA s 3072 bitmi alebo 4096 bitmi sú však výrazne pomalšie. Z tohto dôvodu nový Nitrokey Storage 2 a Pro 2 (resp. integrovaná karta OpenPGP vo verzii 3.3) podporuje šifrovanie pomocou eliptic-curve cryptography (ECC). Táto metóda sa považuje za rovnako bezpečnú pri menších kľúčoch ECC ako pri dlhších kľúčoch RSA a je aj podstatne rýchlejšia.

Základy kryptografie eliptickej krivky

Na rozdiel od RSA existuje mnoho rôznych foriem (tzv. kriviek) eliptickej kryptografie. Je pozoruhodné, že NSA sa podieľala na vývoji kriviek NIST. Aj keď v krivkách nie sú žiadne dôkazy o zadných dvierkach, používanie určitej krivky môže predstavovať otázku dôveryhodnosti. Našťastie nové zariadenia Nitrokey Storage 2 a Pro 2 podporujú dva druhy kriviek, a to NIST a Brainpool. V nasledujúcom texte budeme používať krivky Brainpool. Tento článok poskytuje dobrý vstupný bod na získanie všeobecných poznatkov o kryptografii eliptických kriviek.

Systémové požiadavky

Na vytvorenie kľúčov založených na eliptických krivkách je potrebné úložisko Nitrokey Storage 2 / Pro 2 a GnuPG vo verzii 2.1.17 alebo vyššej.

You can read Nitrokey’s OpenPGP Card version via gpg2 --card-status:

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

The Version field represents the version of the OpenPGP Card integrated in the Nitrokey — in this case it is 3.3 as needed for Elliptic-curve cryptography. OpenPGP Card version 2.2 doesn’t support ECC.

Nainštalovanú verziu GnuPG môžete zistiť prostredníctvom gpg2  --version. Vyžaduje sa minimálne verzia 2.1.16. Najnovšiu verziu GnuPG pre Windows nájdete `tu<https://www.gpg4win.org/>`__ a najnovšiu verziu pre MacOS nájdete `tu<https://gpgtools.org/>`__. Vhodná verzia GnuPG je súčasťou distribúcií GNU/Linux Ubuntu (od verzie 18.04), Debian (od verzie Stretch), Arch Linux, Fedora (od verzie 26) a openSUSE Tumbleweed. Na konci tohto článku sú pokyny, ako ručne aktualizovať GnuPG v starších verziách Ubuntu.

Dôležité

GnuPG 2.0 sa stále používa, ale jeho podpora bola v roku 2017 ukončená. Všetci komunikační partneri musia na šifrovanie e-mailov pomocou ECC používať GnuPG 2.1 alebo novšiu verziu, inak by mohli vzniknúť problémy s nekompatibilitou. Preto by ste mali používať ECC len vtedy, ak ste si istí, že tento problém dokážete obísť.

Generovanie kľúčov na zariadení Nitrokey Storage 2 / Pro 2

Once these requirements are fulfilled, you can get started. (Warning: existing keys will be overwritten in the process!) You now have two options. The first option is to create the key directly on the Nitrokey Storage 2 / Pro 2. The benefit here is that the key will never be outside the device and as such can never be read out. The second option is to import a previously locally generated key. The advantage in this case is that you can securely store a backup of the key, which can then be restored in case the Nitrokey is lost. Only the first option is described below. In order to create a key with backup, you can access the following instructions and use this general information to transfer the key to the Nitrokey.

V GnuPG už existuje príkaz „generate“, ktorý možno použiť na jednoduché vytvorenie kľúčov v zariadení. Zatiaľ však nie je možné priamo vybrať typ kľúča, preto je potrebné kľúč najprv pripraviť. Na tento účel používame nasledujúce príkazy:

> 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

Prípadne sa môžu vybrať iné krivky, ako je opísané v nasledujúcej časti.

Teraz zadáme gpg2 --card-edit a vidíme, že brainpoolP256r1 je v položke „key attributes“ namiesto 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]

Potom vytvoríme kľúč.

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.

Kľúč Nitrokey teraz namiesto kľúčov RSA obsahuje kryptografiu eliptickej krivky a môže sa používať ako zvyčajne.

Dostupné krivky

V uvedenom postupe sme zvolili krivky Brainpool. Alternatívne je možné použiť krivky NIST. Konfigurácia sa vykonáva takto:

> 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

Aktualizácia GnuPG v Ubuntu

The following steps are needed only if you are running a Ubuntu version older than 18.04. You can install GnuPG 2.1.18 on such system with the commands below. This involves newer Debian packages, which is the easiest option. This approach has been tested successfully on Ubuntu 17.10 and propbably works on 16.04 as well. However, the occurence of problems during usage can’t be excluded.

$ 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

Ak chcete inštaláciu zrušiť, musíte vykonať nasledujúce príkazy:

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