Elipses līkņu (ECC) atbalsts#

RSA-2048 kļūst arvien nedrošāks#

Drošības apsvērumu dēļ Vācijas Federālais informācijas drošības birojs (Bundesamt für Sicherheit in der Informationstechnik, BSI) pēc 2023. gada vairs neiesaka izmantot RSA atslēgas ar 2048 bitu garumu ` <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf>`__. Tas nozīmē, ka pārskatāmā nākotnē būs jāsāk izmantot garākas atslēgas. Pieņemot, ka izmantošanas periods ir pieci gadi, jau tagad ir nepieciešams ģenerēt garākas atslēgas. Tomēr garākas RSA atslēgas ar 3072 bitiem vai 4096 bitiem ir ievērojami lēnākas. Šā iemesla dēļ jaunā Nitrokey Storage 2 un Pro 2 (resp. integrētā OpenPGP karte 3.3 versijā) atbalsta šifrēšanu, izmantojot eliptisko līkņu kriptogrāfiju (ECC). Šī metode tiek uzskatīta par tikpat drošu ar mazākām ECC atslēgām kā garākas RSA atslēgas, turklāt tā ir arī ievērojami ātrāka.

Elipses līknes kriptogrāfijas pamati#

Atšķirībā no RSA ir daudz dažādu elipses līknes kriptogrāfijas formu (tā saukto līkņu). NIST līkņu izstrādē bija iesaistīta NSA. Pat ja līknēs nav pierādījumu par „aizmugurējām durvīm“, konkrētas līknes izmantošana var radīt uzticības jautājumu. Par laimi, jaunie Nitrokey Storage 2 un Pro 2 atbalsta divu veidu līknes, proti, NIST un Brainpool. Turpmāk mēs izmantosim Brainpool līknes. Šis raksts ir labs sākumpunkts, lai gūtu vispārēju izpratni par eliptisko līkņu kriptogrāfiju.

Sistēmas prasības#

Lai izveidotu atslēgas, kuru pamatā ir eliptiskās līknes, ir nepieciešama Nitrokey Storage 2 / Pro 2 un GnuPG 2.1.17 vai jaunāka versija.

Nitrokey OpenPGP kartes versiju var izlasīt, izmantojot gpg2 --card-status:

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

Laukā „Versija“ ir norādīta Nitrokey integrētās OpenPGP kartes versija - šajā gadījumā tā ir 3.3, kas nepieciešama elipses līknes kriptogrāfijai. OpenPGP kartes 2.2 versija neatbalsta ECC.

Par instalēto GnuPG versiju var uzzināt, izmantojot gpg2  --version. Ir nepieciešama vismaz 2.1.16 versija. Jaunāko GnuPG versiju operētājsistēmai Windows var atrast šeit un jaunāko versiju operētājsistēmai MacOS var atrast šeit. Atbilstoša GnuPG versija ir iekļauta GNU/Linux distribūcijās Ubuntu (kopš 18.04), Debian (sākot ar Stretch), Arch Linux, Fedora (sākot ar Release 26) un openSUSE Tumbleweed. Šī raksta beigās ir norādījumi, kā manuāli atjaunināt GnuPG vecākās Ubuntu versijās.

Svarīgi

GnuPG 2.0 joprojām tiek izmantota, taču tās atbalsts 2017. gadā tika pārtraukts. Visiem saziņas partneriem e-pasta šifrēšanai, izmantojot ECC, jāizmanto GnuPG 2.1 vai jaunāka versija, pretējā gadījumā var rasties nesaderības problēmas. Tāpēc ECC vajadzētu izmantot tikai tad, ja esat pārliecināts, ka spēsiet šo problēmu apiet.

Nitrokey Storage 2 / Pro 2 atslēgas ģenerēšana#

Kad šīs prasības ir izpildītas, varat sākt darbu. (Brīdinājums: procesā tiks pārrakstītas esošās atslēgas!) Tagad jums ir divas iespējas. Pirmā iespēja ir izveidot atslēgu tieši Nitrokey Storage 2 / Pro 2. Priekšrocība ir tā, ka atslēga nekad neatradīsies ārpus ierīces un tādējādi to nevarēs nolasīt. Otrā iespēja ir importēt iepriekš lokāli izveidotu atslēgu. Šajā gadījumā priekšrocība ir tā, ka varat droši saglabāt atslēgas rezerves kopiju, kuru pēc tam var atjaunot, ja Nitrokey tiek pazaudēts. Tālāk ir aprakstīta tikai pirmā iespēja. Lai izveidotu atslēgu ar rezerves kopiju, varat piekļūt šādām instrukcijām un izmantot šo kopējo informāciju, lai pārnestu atslēgu uz Nitrokey.

GnuPG sistēmā jau ir komanda „ģenerēt“, ko var izmantot, lai viegli izveidotu atslēgas ierīcē. Tomēr pagaidām nav iespējams tieši izvēlēties atslēgas veidu, tāpēc atslēga vispirms ir jāsagatavo. Šim nolūkam mēs izmantojam šādas komandas:

> 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īvi var izvēlēties citas līknes, kā aprakstīts nākamajā sadaļā.

Tagad mēs ievadām gpg2 --card-edit un redzam, ka sadaļā „atslēgas atribūti“ rsa2048 vietā ir brainpoolP256r1.

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

Pēc tam izveidojam atslēgu.

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.

Tagad Nitrokey izmanto RSA atslēgu vietā izmantoto elipses līknes kriptogrāfiju, un to var izmantot kā parasti.

Pieejamās līknes#

Iepriekšminētajā procedūrā mēs izvēlējāmies Brainpool līknes. Alternatīvi var izmantot NIST līknes. Konfigurēšana tiek veikta šādi:

> 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 atjaunināšana Ubuntu#

Turpmāk norādītās darbības ir nepieciešamas tikai tad, ja izmantojat Ubuntu versiju, kas ir vecāka par 18.04. Šādā sistēmā varat instalēt GnuPG 2.1.18, izmantojot tālāk minētās komandas. Tas ietver jaunākas Debian paketes, kas ir vienkāršākais variants. Šī pieeja ir veiksmīgi izmēģināta Ubuntu 17.10 un, iespējams, darbojas arī 16.04. Tomēr nevar izslēgt problēmu rašanos lietošanas laikā.

$ 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

Ja instalāciju vēlaties atcelt, ir jāizpilda šādas komandas:

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