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

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

inactive

active

active

inactive

active

inactive

inactive

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.

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.

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

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.

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

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

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)