Suport pentru curbe eliptice (ECC)

RSA-2048 devine din ce în ce mai nesigur

Din motive de securitate, Oficiul Federal German pentru Securitatea Informației (Bundesamt für Sicherheit in der Informationstechnik, BSI) nu mai recomandă cheile RSA cu o lungime de 2048 biți pentru a fi utilizate după 2023. Acest lucru înseamnă că va trebui să se utilizeze chei mai lungi în viitorul apropiat. Presupunând o perioadă de utilizare de cinci ani, este deja necesar să se genereze chei mai lungi. Cu toate acestea, cheile RSA mai lungi cu 3072 biți sau 4096 biți sunt semnificativ mai lente. Din acest motiv, noile Nitrokey Storage 2 și Pro 2 (resp. cardul OpenPGP integrat versiunea 3.3) acceptă criptarea prin intermediul criptografiei cu curbă eliptică (ECC). Această metodă este considerată a fi la fel de sigură cu chei ECC mai mici ca și cheile RSA mai lungi și este, de asemenea, considerabil mai rapidă.

Noțiuni de bază ale criptografiei cu curbă eliptică

Spre deosebire de RSA, există multe forme diferite (așa-numitele curbe) de criptografie cu curbe eliptice. În special, NSA a fost implicată în dezvoltarea curbelor NIST. Chiar dacă nu există dovezi privind existența unor uși ascunse în curbe, utilizarea unei anumite curbe poate pune o problemă de încredere. Din fericire, noile Nitrokey Storage 2 și Pro 2 suportă două tipuri de curbe, și anume NIST și Brainpool. În cele ce urmează vom folosi curbele Brainpool. Acest articol oferă un bun punct de intrare pentru a obține o înțelegere generală a criptografiei cu curbe eliptice.

Cerințe de sistem

Pentru a crea chei bazate pe curbe eliptice, sunt necesare Nitrokey Storage 2 / Pro 2 și GnuPG versiunea 2.1.17 sau o versiune mai recentă.

Puteți citi versiunea OpenPGP Card a lui Nitrokey prin gpg2 --card-status:

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

Câmpul „Version” (Versiune) reprezintă versiunea cardului OpenPGP integrat în Nitrokey - în acest caz este 3.3, așa cum este necesar pentru criptografia cu curbă eliptică. OpenPGP Card versiunea 2.2 nu acceptă ECC.

Puteți afla despre versiunea instalată a GnuPG prin gpg2  --version. Este necesară cel puțin versiunea 2.1.16. Cea mai nouă versiune GnuPG pentru Windows poate fi găsită ` aici <https://www.gpg4win.org/>`__, iar cea mai nouă versiune pentru MacOS poate fi găsită ` aici <https://gpgtools.org/>`__. O versiune adecvată a GnuPG este inclusă în distribuțiile GNU/Linux Ubuntu (începând cu versiunea 18.04), Debian (începând cu Stretch), Arch Linux, Fedora (începând cu versiunea 26) și openSUSE Tumbleweed. La finalul acestui articol se găsesc instrucțiuni despre cum să actualizați manual GnuPG pe versiunile mai vechi de Ubuntu.

Important

GnuPG 2.0 este încă utilizat, dar suportul pentru acesta a fost întrerupt în 2017. Toți partenerii de comunicare trebuie să utilizeze GnuPG 2.1 sau o versiune mai nouă pentru criptarea e-mailurilor prin intermediul ECC, în caz contrar ar putea apărea probleme de incompatibilitate. Prin urmare, ar trebui să utilizați ECC numai dacă sunteți sigur că veți putea ocoli această problemă.

Generarea cheilor pe Nitrokey Storage 2 / Pro 2

Odată ce aceste cerințe sunt îndeplinite, puteți începe. (Atenție: cheile existente vor fi suprascrise în acest proces!) Acum aveți două opțiuni. Prima opțiune este să creați cheia direct pe Nitrokey Storage 2 / Pro 2. Avantajul în acest caz este că cheia nu se va afla niciodată în afara dispozitivului și, ca atare, nu poate fi citită. A doua opțiune este de a importa o cheie generată anterior la nivel local. Avantajul în acest caz este că puteți stoca în siguranță o copie de rezervă a cheii, care poate fi apoi restaurată în cazul în care Nitrokey este pierdut. Doar prima opțiune este descrisă mai jos. Pentru a crea o cheie cu copie de rezervă, puteți accesa ` următoarele instrucțiuni <https://www.gniibe.org/memo/software/gpg/keygen-25519.html>`__ și puteți utiliza aceste informații generale pentru a transfera cheia pe Nitrokey.

În cadrul GnuPG există deja o comandă „generate”, care poate fi utilizată pentru a crea cu ușurință chei pe dispozitiv. Cu toate acestea, nu este încă posibilă selectarea directă a tipului de cheie, astfel încât cheia trebuie mai întâi pregătită. Pentru aceasta, folosim următoarele comenzi:

> 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

Alternativ, pot fi selectate și alte curbe, așa cum se descrie în secțiunea următoare.

Acum introducem gpg2 --card-edit` și vedem că brainpoolP256r1 se află la „key attributes” în loc de 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]

Apoi creăm cheia.

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.

Nitrokey încorporează acum criptografia cu curbă eliptică în loc de chei RSA și poate fi utilizată ca de obicei.

Curbe disponibile

În procedura de mai sus am ales curbele Brainpool. Alternativ, se pot utiliza curbele NIST. Configurarea se realizează după cum urmează:

> 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

Actualizarea lui GnuPG pe Ubuntu

Următorii pași sunt necesari doar dacă utilizați o versiune Ubuntu mai veche de 18.04. Puteți instala GnuPG 2.1.18 pe un astfel de sistem cu ajutorul comenzilor de mai jos. Acest lucru implică pachete Debian mai noi, ceea ce reprezintă cea mai ușoară opțiune. Această abordare a fost testată cu succes pe Ubuntu 17.10 și probabil că funcționează și pe 16.04. Cu toate acestea, apariția unor probleme în timpul utilizării nu poate fi exclusă.

$ 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

În cazul în care doriți să anulați instalarea, trebuie să executați următoarele comenzi:

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