Elipsinių kreivių (ECC) palaikymas¶
Compatible Nitrokeys |
|||||||
|---|---|---|---|---|---|---|---|
✓ active |
⨯ inactive |
✓ active |
✓ active |
⨯ inactive |
✓ active |
⨯ inactive |
⨯ inactive |
RSA-2048 tampa vis labiau nesaugi¶
Saugumo sumetimais Vokietijos federalinė informacijos saugumo tarnyba (Bundesamt für Sicherheit in der Informationstechnik, BSI) po 2023 m. nebepataria naudoti 2048 bitų ilgio RSA raktų ` <https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf>`__. Tai reiškia, kad artimiausioje ateityje reikės pradėti naudoti ilgesnius raktus. Darant prielaidą, kad naudojimo laikotarpis yra penkeri metai, jau dabar reikia generuoti ilgesnius raktus. Tačiau ilgesni 3072 bitų arba 4096 bitų RSA raktai yra gerokai lėtesni. Dėl šios priežasties naujieji „Nitrokey Storage 2“ ir „Pro 2“ (arba integruota „OpenPGP Card“ 3.3 versija) palaiko šifravimą naudojant elipsinės kreivės kriptografiją (ECC). Manoma, kad šis metodas yra toks pat saugus naudojant mažesnius ECC raktus, kaip ir ilgesnius RSA raktus, be to, jis yra gerokai greitesnis.
Elipsinės kreivės kriptografijos pagrindai¶
Priešingai nei RSA, elipsinės kreivės kriptografija turi daug skirtingų formų (vadinamųjų kreivių). Pažymėtina, kad NSA dalyvavo kuriant NIST kreives. Net jei nėra įrodymų, kad kreivėse yra užpakalinių durų, tam tikros kreivės naudojimas gali kelti pasitikėjimo klausimą. Laimei, naujieji „Nitrokey Storage 2“ ir „Pro 2“ palaiko dviejų rūšių kreives, t. y. NIST ir „Brainpool“. Toliau naudosime „Brainpool“ kreives. Šis straipsnis yra geras pradinis taškas įgyti bendrą supratimą apie elipsinių kreivių kriptografiją.
Sistemos reikalavimai¶
Norint sukurti elipsinėmis kreivėmis pagrįstus raktus, reikia turėti „Nitrokey Storage 2“ / „Pro 2“ ir „GnuPG“ versiją 2.1.17 arba naujesnę.
„Nitrokey“ OpenPGP kortelės versiją galite perskaityti naudodami gpg2 --card-status:
> gpg2 --card-status
Reader ...........: 20A0:...
Application ID ...: D276...
Version ..........: 3.3
...
Lauke „Versija“ nurodoma „Nitrokey“ integruotos „OpenPGP“ kortelės versija - šiuo atveju tai yra 3.3 versija, reikalinga elipsės kreivės kriptografijai. 2.2 „OpenPGP Card“ versija nepalaiko ECC.
Įdiegtą GnuPG versiją galite sužinoti naudodami gpg2 --version. Reikalinga bent 2.1.16 versija. Naujausią „Windows“ skirtą „GnuPG“ versiją rasite kur, o naujausią „MacOS“ skirtą versiją rasite kur. Tinkama „GnuPG“ versija įtraukta į GNU/Linux distribucijas „Ubuntu“ (nuo 18.04), „Debian“ (nuo „Stretch“), „Arch Linux“, „Fedora“ (nuo „Release 26“) ir „openSUSE Tumbleweed“. Šio straipsnio pabaigoje pateikiamos instrukcijos, kaip rankiniu būdu atnaujinti GnuPG senesnėse „Ubuntu“ versijose.
Svarbu
GnuPG 2.0 vis dar naudojama, tačiau 2017 m. jos palaikymas buvo nutrauktas. Visi ryšio partneriai turi naudoti „GnuPG 2.1“ arba naujesnę versiją, skirtą el. laiškų šifravimui naudojant ECC, kitaip gali kilti nesuderinamumo problemų. Todėl ECC turėtumėte naudoti tik tuo atveju, jei esate tikri, kad galėsite apeiti šią problemą.
Raktų generavimas „Nitrokey Storage 2“ / „Pro 2“ įrenginyje¶
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.
„GnuPG“ programoje jau yra komanda „generate“, kurią galima naudoti norint lengvai sukurti raktus įrenginyje. Tačiau kol kas neįmanoma tiesiogiai pasirinkti rakto tipo, todėl raktą pirmiausia reikia paruošti. Tam naudojamos šios komandos:
> 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
Galima pasirinkti ir kitas kreives, kaip aprašyta kitame skyriuje.
Dabar įvedame gpg2 --card-edit ir matome, kad „brainpoolP256r1“ yra skiltyje „raktų atributai“, o ne 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]
Tada sukuriame raktą.
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.
Dabar „Nitrokey“ rakte vietoj RSA raktų naudojama elipsinės kreivės kriptografija ir jį galima naudoti kaip įprasta.
Galimos kreivės¶
Pirmiau aprašytoje procedūroje pasirinkome „Brainpool“ kreives. Galima naudoti ir NIST kreives. Konfigūracija atliekama taip:
> 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 atnaujinimas Ubuntu¶
Tolesni veiksmai reikalingi tik tuo atveju, jei naudojate senesnę nei 18.04 „Ubuntu“ versiją. Tokioje sistemoje galite įdiegti GnuPG 2.1.18 naudodami toliau pateiktas komandas. Tai susiję su naujesniais „Debian“ paketais, o tai yra paprasčiausias variantas. Šis metodas buvo sėkmingai išbandytas Ubuntu 17.10 versijoje ir tikriausiai veikia ir 16.04 versijoje. Tačiau negalima atmesti problemų atsiradimo naudojimo metu.
$ 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
Jei norite atšaukti diegimą, turite atlikti šias 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)