Elliptikus görbék (ECC) támogatása#

Az RSA-2048 egyre bizonytalanabbá válik#

Biztonsági okokból a német Szövetségi Információbiztonsági Hivatal (Bundesamt für Sicherheit in der Informationstechnik, BSI) 2023 után már nem javasolja a 2048 bites ` RSA kulcsok használatát <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf>`__. Ez azt jelenti, hogy belátható időn belül hosszabb kulcsokat kell majd használni. Ötéves felhasználási időszakot feltételezve már most hosszabb kulcsokat kell generálni. A hosszabb, 3072 bites vagy 4096 bites RSA kulcsok azonban jelentősen lassabbak. Ezért az új Nitrokey Storage 2 és Pro 2 (illetve az integrált OpenPGP kártya 3.3. verziója) támogatja a titkosítást az elliptikus görbe kriptográfia (ECC) segítségével. Ez a módszer kisebb ECC-kulcsokkal ugyanolyan biztonságosnak tekinthető, mint a hosszabb RSA-kulcsok, és lényegesen gyorsabb is.

Az elliptikus görbe kriptográfia alapjai#

Az RSA-val ellentétben az elliptikus görbékre épülő kriptográfiának számos különböző formája (úgynevezett görbéje) létezik. Nevezetesen, a NSA részt vett a NIST görbék kifejlesztésében. Még ha nincs is bizonyíték a görbékben lévő hátsó ajtókra, egy bizonyos görbe használata bizalmi kérdést vethet fel. Szerencsére az új Nitrokey Storage 2 és Pro 2 kétféle görbét támogat, nevezetesen a NIST és a Brainpool görbéket. A következőkben a Brainpool görbéket fogjuk használni. Ez a cikk jó kiindulópontot nyújt az elliptikus görbékre épülő kriptográfia általános megértéséhez.

Rendszerkövetelmények#

Az elliptikus görbéken alapuló kulcsok létrehozásához Nitrokey Storage 2 / Pro 2 és a GnuPG 2.1.17 vagy magasabb verziója szükséges.

A Nitrokey OpenPGP Card verzióját a gpg2 --card-status segítségével olvashatja:

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

A «Verzió» mező a Nitrokey-be integrált OpenPGP kártya verzióját jelöli - ebben az esetben ez a 3.3, ami az elliptikus görbületű kriptográfiához szükséges. Az OpenPGP kártya 2.2-es verziója nem támogatja az ECC-t.

A GnuPG telepített verzióját a gpg2  --version segítségével ismerheti meg. Legalább a 2.1.16-os verzió szükséges. A GnuPG legújabb verziója Windowsra itt, MacOS-re pedig itt található. A GnuPG megfelelő verziója megtalálható a GNU/Linux disztribúciókban: Ubuntu (18.04 óta), Debian (a Stretch-től kezdve), Arch Linux, Fedora (a 26-os kiadástól kezdve) és openSUSE Tumbleweed. A cikk végén találhatók utasítások a GnuPG kézi frissítéséhez a régebbi Ubuntu verziókon.

Fontos

A GnuPG 2.0-t még mindig használják, de 2017-ben megszűnt a támogatása. Minden kommunikációs partnernek a GnuPG 2.1-es vagy újabb verziót kell használnia az ECC segítségével történő e-mail titkosításhoz, ellenkező esetben inkompatibilitási problémák merülhetnek fel. Ezért csak akkor használja az ECC-t, ha biztos benne, hogy meg tudja kerülni ezt a problémát.

Kulcsgenerálás a Nitrokey Storage 2 / Pro 2 készülékeken#

Amint ezek a követelmények teljesülnek, elkezdheti a munkát. (Figyelem: a meglévő kulcsok felülíródnak a folyamat során!) Most két lehetősége van. Az első lehetőség, hogy a kulcsot közvetlenül a Nitrokey Storage 2 / Pro 2 eszközön hozza létre. Ennek az az előnye, hogy a kulcs soha nem lesz az eszközön kívül, és mint ilyen, nem is olvasható ki. A második lehetőség egy korábban helyben létrehozott kulcs importálása. Ebben az esetben az az előnye, hogy biztonságosan tárolhat egy biztonsági másolatot a kulcsról, amely aztán visszaállítható, ha a Nitrokey elveszne. Az alábbiakban csak az első lehetőséget ismertetjük. A biztonsági másolattal ellátott kulcs létrehozásához a a következő utasításokat érheti el, és ennek általános információk segítségével viheti át a kulcsot a Nitrokeyre.

A GnuPG-n belül már létezik egy „generate” parancs, amellyel egyszerűen létrehozhatsz kulcsokat az eszközön. A kulcs típusát azonban még nem lehet közvetlenül kiválasztani, így a kulcsot először elő kell készíteni. Ehhez a következő parancsokat használjuk:

> 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

Alternatívaként más görbéket is ki lehet választani a következő szakaszban leírtak szerint.

Most beírjuk a gpg2 --card-edit és látjuk, hogy a brainpoolP256r1 a „key attributes” alatt van rsa2048 helyett.

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

Ezután létrehozzuk a kulcsot.

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.

A Nitrokey mostantól RSA kulcsok helyett elliptikus görbületű kriptográfiát tartalmaz, és a szokásos módon használható.

Elérhető görbék#

A fenti eljárásban a Brainpool-görbéket választottuk. Alternatívaként a NIST görbék is használhatók. A konfiguráció a következőképpen történik:

> 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 frissítése Ubuntun#

A következő lépésekre csak akkor van szükség, ha 18.04-nél régebbi Ubuntu verziót használ. Ilyen rendszerre a GnuPG 2.1.18-as verzióját az alábbi parancsokkal telepítheti. Ez újabb Debian csomagokat foglal magában, ami a legegyszerűbb megoldás. Ezt a megközelítést sikeresen teszteltük Ubuntu 17.10-en, és valószínűleg működik 16.04-en is. A használat során azonban nem zárható ki a problémák előfordulása.

$ 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

Ha vissza szeretné vonni a telepítést, akkor a következő parancsokat kell végrehajtania:

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