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

(Nitrokey Pro 2 - Linux)

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) 2022 után már nem javasolja a 2048 bites ` hosszúságú RSA kulcsok használatát <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf?_blob=publicationFile&v=10>`_. 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 szükség van hosszabb kulcsok létrehozására. 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 elliptikus görbületű kriptográfiával (ECC). 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 adott 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.

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.

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 mentéssel ellátott kulcs létrehozásához a a következő utasításokat <https://www.gniibe.org/memo/software/gpg/keygen-25519.html>`_keresheti, és ennek `általános információk segítségével átviheti a kulcsot a Nitrokey-be.

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)