Поддръжка на елиптични криви (ECC)¶
Compatible Nitrokeys |
|||||||
|---|---|---|---|---|---|---|---|
✓ active |
⨯ inactive |
✓ active |
✓ active |
⨯ inactive |
✓ active |
⨯ inactive |
⨯ inactive |
RSA-2048 става все по-несигурен¶
От съображения за сигурност Германската федерална служба за информационна сигурност (Bundesamt für Sicherheit in der Informationstechnik, BSI) вече не препоръчва ключове RSA с дължина 2048 бита да се използват след 2023 г.. Това означава, че в обозримо бъдеще ще трябва да започнат да се използват по-дълги ключове. Ако приемем, че периодът на използване е пет години, вече е необходимо да се генерират по-дълги ключове. Въпреки това по-дългите ключове RSA с 3072 бита или 4096 бита са значително по-бавни. Поради тази причина новите Nitrokey Storage 2 и Pro 2 (респ. интегрираната OpenPGP карта версия 3.3) поддържат криптиране чрез криптография с елиптична крива (ECC). Счита се, че този метод е също толкова сигурен с по-малки ключове ECC, колкото и с по-дълги ключове RSA, а освен това е значително по-бърз.
Основи на криптографията с елиптична крива¶
За разлика от RSA съществуват много различни форми (т.нар. криви) на криптографията с елиптични криви. Забележително е, че NSA е участвала в разработването на кривите на NIST. Дори и да няма доказателства за наличие на „задни вратички“ в кривите, използването на определена крива може да постави под въпрос доверието. За щастие новите Nitrokey Storage 2 и Pro 2 поддържат два вида криви, а именно NIST и Brainpool. По-нататък ще използваме криви Brainpool. Тази статия предоставя добра отправна точка за придобиване на обща представа за криптографията с елиптични криви.
Изисквания¶
За създаване на ключове, базирани на елиптични криви, са необходими Nitrokey Storage 2 / Pro 2 и GnuPG версия 2.1.17 или по-висока.
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.
Можете да научите за инсталираната версия на GnuPG чрез gpg2 --version. Изисква се поне версия 2.1.16. Най-новата версия на GnuPG за Windows може да бъде намерена тук, а най-новата версия за MacOS може да бъде намерена тук. Подходяща версия на GnuPG е включена в дистрибуциите на GNU/Linux Ubuntu (от 18.04), Debian (от Stretch нататък), Arch Linux, Fedora (от Release 26 нататък) и openSUSE Tumbleweed. В края на тази статия са дадени инструкции как ръчно да актуализирате GnuPG в по-старите версии на Ubuntu.
Important
GnuPG 2.0 все още се използва, но поддръжката му беше прекратена през 2017 г. Всички комуникационни партньори трябва да използват GnuPG 2.1 или по-нова версия за криптиране на имейли чрез ECC, в противен случай може да възникнат проблеми с несъвместимостта. Затова трябва да използвате ECC само ако сте сигурни, че ще можете да заобиколите този проблем.
Генериране на ключове в Nitrokey Storage 2 / Pro 2¶
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 вече има команда „generate“, която може да се използва за лесно създаване на ключове на устройството. Все още обаче не е възможно да се избере директно типът на ключа, така че ключът трябва първо да се подготви. За тази цел използваме следните команди:
> 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
Алтернативно могат да бъдат избрани други криви, както е описано в следващия раздел.
Сега въвеждаме gpg2 --card-edit и виждаме, че brainpoolP256r1 е под „ключови атрибути“ вместо 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]
След това създаваме ключа.
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 вече използва криптография с елиптична крива вместо RSA ключове и може да се използва както обикновено.
Налични криви¶
В горната процедура избрахме кривите на Brainpool. Алтернативно могат да се използват кривите на NIST. Конфигурацията се извършва по следния начин:
> 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 в Ubuntu¶
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
В случай че искате да върнете инсталацията, трябва да изпълните следните команди:
$ 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)