Yubikey + GPG – быстрый старт
Требования к безопасности непрерывно растут, так как взломщики постоянно эволюционируют и все лучше умеют красть данные. Доступ к данным становится все более ценным - это могут быть живые деньги, секретная информация или доступ в инфраструктуру, интеллектуальную собственность или пользовательские данные (которые эта инфраструктура обрабатывает). А это – очень большие деньги. А иногда и вовсе вопрос жизни и смерти целой структуры.
Простой системы логин/пароль уже недостаточно, чтобы обеспечить надежную защиту, и даже система с ассиметричными ключами имеет уязвимости:
- ключ можно выкрасть. Он будет шифрован, но пароль можно подобрать. Это медленный процесс, но взломщику может повезти, особенно, если у него есть какая-то информация об особенностях пароля. Например, он знает его точную длинну.
- Для того, чтобы ключ можно было использовать - он должен быть расшифрован. Обычно расшифрованый ключ хранится в оперативной памяти, но при наличии доступа к памяти его можно украсть. Атака сложная, но если ключ по-настоящиему ценный - реальная.
Для того, чтобы сделать работу с шифрованием надежной и безопасной – были придуманы аппаратные носители ключей. Концепция выглядит просто – шифровальный ключ не покидает аппаратного токена (обычно это смарт-карта с чипом), и если операционной системе требуется произвести какое-то действие с шифрованием (зашифровка, расшифровка, подпись) – данные передаются в аппаратный ключ. Ключ выполняет действия (если проситель имеет право на такие действия) и выдает результат.
В этой статье я расскажу, как настроить Yubikey 4 для работы с GPG и использовать его для стандартных действий (шифрование, расшифровка, авторизация по SSH).
Yubikey - это именно такой ключ. Это простой, удобный и понятный для начинающего ключ-смарткарта в форм-факторе USB-флешки. Классический Yubikey 4 выпускается в двух форм-факторах – обычная “полноразмерная” флешка или “нано-ключ” - вставленный в комп наноключ практически не выступает из порта, что удобно, если ключ подключен постоянно и не должен изыматься. Yubikey 4 выпускается как под USB2 Type A, так и под USB3 Type C порт, что удобно для обладателей новых ноутбуков (macbook pro touch bar). Так же компания Yubiko выпускает Yubkey Neo - Yubkey с поддержкой NFC (для смартфонов), но со сниженным максимальным размером ключа (2048 бит вместо 4096 для Yubikey 4).
Кроме GPG, Yubikey может работать как стандартная smart-карта и генерировать одноразовые пароли (TOTP/HOTP). В этой статье будет описана только настройка под GPG.
Предварительные настройки
Для того, чтобы использовать gpg для Yubikey - потребуется сам gpg. Пользователи MacOS могут использовать MacGPG. Пользователям Linux ничего делать не надо - gpg входит в поставку ОС. Чтобы gpg создал нужные ему папки - запускаем gpgtool. Он предложит создать новый приватный ключ - игнорируем, просто закрываем программу.
После установки пакета надо добавить в ~/.bashrc
следующие строки:
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(/usr/local/MacGPG2/bin/gpgconf --list-dirs agent-ssh-socket)
if ! pgrep gpg-agent &> /dev/null; then
echo "gpg-agent not running"
/usr/local/MacGPG2/bin/gpg-agent --homedir /Users/YOUR_LOGIN/.gnupg --daemon
fi
Обратите внимание, что вам нужно поменять логин на свой
Также надо указать pinentry и включить поддежку ssh-agent в файле ~/.gnupg/gpg-agent.conf
:
default-cache-ttl 600
max-cache-ttl 7200
pinentry-program /usr/local/MacGPG2/libexec/pinentry-mac.app/Contents/MacOS/pinentry-mac
enable-ssh-support
Теперь можно подключить yubikey. Проверим, что карта подключилась и определилась:
tungsten> gpg --card-edit
Reader ...........: Yubico Yubikey 4 OTP U2F CCID
Application ID ...: D2760001240102010006070171690000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 07017169
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]
gpg/card>
Отлично, карта есть, можно настраивать. Первое, что нужно поменять - pin-коды карты. У карты два pin-кода:
- User PIN - отвечает за проверку авторизации самой карты. Его нужно ввести, чтобы использовать ключ (зашифровать, расшифровать данные или авторизоваться)
- Admin PIN - отвечает за настройку карты. Он позволяет управлять содержимым карты или ее настройками.
Не смотря на названия, PIN-коды - это полноценные пароли длинной до 127 символов включительно. Пароли имеют ограничения - там нельзя использовать символы национальных алфавитов и спецсимволы. То есть – можно только английские буквы и цифры. Кроме того, Admin PIN должен быть не менее 8 символов длинной. Yubikey никак не предупредит об этом, но pin короче 8 символов просто не запишется. При смене PIN-кода спросят старый PIN. PIN-коды по умолчанию:
- User PIN: 123456
- Admin PIN: 12345678
Переключимся в админ-режим и поменяем пины:
gpg/card> admin
Admin commands are allowed
gpg/card> passwd
gpg: OpenPGP card no. D2760001240102010006070171690000 detected
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Your selection? 1
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Your selection? 3
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Your selection? q
Небольшая ремарка про PIN-ы. Карта считает все неуспешные попытки использования PIN-кода. Если ввести PIN-код неправильно несколько раз подряд – он блокируется. User PIN можно разблокировать с помощью Admin PIN. Заблокированный Admin PIN разблокировать нельзя никак. Карту можно полностью сбросить командой factory-reset
- при этом все ее содержимое будет безвозвратно уничтожено. Для factory-reset
никакие пин-коды не нужны. Счетчик неуспешных попыток сбрасывается, если ввести PIN правильно.
Теперь рекомендуется персонализировать карту - внести в нее информацию о себе. Это мало на что влияет, но имя будет отображаться в диалоге ввода PIN (что облегчает идентификацию карты). Кроме того, общую информацию о карте можно прочитать без кода – это может помочь, если вы потеряете карту. Важный параметр - url, это адрес, с которого можно будет скачать ваш публичный ключ:
gpg/card> name
Cardholder's surname: Rudnitskiy
Cardholder's given name: Paul
gpg/card> sex
Sex ((M)ale, (F)emale or space): M
gpg/card> lang
Language preferences: en
gpg/card> login
Login data (account name): logan
gpg/card> url
URL to retrieve public key: https://prudnitskiy.pro/gpg.pub
Карта готова и теперь можно экспортировать ключ на нее или создать ключ прямо на ней. Если у вас нет ключа - я рекомендую прямо на карте его и создавать. Если ключ уже есть – ниже есть раздел о том, как перенести ключ на карту
Генерация ключа на Yubikey
Перед тем, как создавать ключ - я рекомендую поменять его размер. По умолчанию Yubikey создает один мастер-ключ и два сабключа:
- Master + Certify
- SUB1 - Encryption
- SUB2 – Authentication
Все три ключа по умолчанию - RSA2048. RSA4096 выглядит намного интереснее. Поменяем:
gpg/card> key-attr
Changing card key attribute for: Signature key
Please select what kind of key you want:
(1) RSA
(2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
Changing card key attribute for: Encryption key
Please select what kind of key you want:
(1) RSA
(2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
Changing card key attribute for: Authentication key
Please select what kind of key you want:
(1) RSA
(2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
gpg: error changing key attribute for key 3: Bad PIN
Changing card key attribute for: Authentication key
Please select what kind of key you want:
(1) RSA
(2) ECC
Your selection? 1
What keysize do you want? (2048) 4096
The card will now be re-configured to generate a key of 4096 bits
Внимание! Если у вас Yubikey Neo - вы не можете использовать 4096-битные ключи.
Теперь (наконец-то!) приступим к созданию ключей. Вопрос политики устаревания ключей в целом довольно дискуссионный, и тут я не могу ничего порекомендовать. В данном примере я создам мастер-ключ с бесконечным сроком жизни, а саб-ключи мы потом отредактируем и они будут жить по 5 лет. В процессе создания ключа GPG спросит пароль для шифрования off-card резервной копии. Она вам потребуется, если вы потеряете физический ключ. Off-card экспортируется только subkey для шифрования (capability - E). Остальные sub-ключи и мастер-ключ останутся на карте и вынуть оттуда их нельзя. Процесс генерации ключа зависит от выбранного размера ключа (4096 бит будет генерироваться дольше, чем 2048):
gpg/card> generate
Make off-card backup of encryption key? (Y/n) y
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) 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: Paul Rudnitskiy
Email address: [email protected]
Comment: YBKey
You selected this USER-ID:
"Paul Rudnitskiy (YBKey) <[email protected]>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
[...]
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: Note: backup of card key saved to '/Users/logan/.gnupg/sk_8E0418955A55C1A8.gpg'
gpg: key 9ECF9961A551A45B marked as ultimately trusted
gpg: revocation certificate stored as '/Users/logan/.gnupg/openpgp-revocs.d/707C3210B50A430B555DD6AC9ECF9961A551A45B.rev'
public and secret key created and signed.
Ключ готов. Резервную копию забираем из /Users/logan/.gnupg/sk_8E0418955A55C1A8.gpg
(у вас место будет другим) и прячем в надежное место. Пароль резервной копии тоже прячем в надежное место, но другое. Обязательно удалите резервную копию с той машины, где вы работаете с ключом.
Проверим, что ключ сгенерировался:
gpg/card> list
Reader ...........: Yubico Yubikey 4 OTP U2F CCID
Application ID ...: D2760001240102010006070171690000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 07017169
Name of cardholder: Paul Rudnitskiy
Language prefs ...: en
Sex ..............: male
URL of public key : [not set]
Login data .......: logan
Signature PIN ....: not forced
Key attributes ...: rsa4096 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 4
Signature key ....: 707C 3210 B50A 430B 555D D6AC 9ECF 9961 A551 A45B
created ....: 2018-08-07 07:58:18
Encryption key....: 062A ABF7 6FB0 8EF4 0E97 4B47 8E04 1895 5A55 C1A8
created ....: 2018-08-07 07:58:18
Authentication key: 6A41 D75C 2B56 41FC A7F4 8DBE CC02 AF33 8EE7 E338
created ....: 2018-08-07 07:58:18
General key info..: pub rsa4096/9ECF9961A551A45B 2018-08-07 Paul Rudnitskiy (YBKey) <[email protected]>
sec> rsa4096/9ECF9961A551A45B created: 2018-08-07 expires: never
card-no: 0006 07017169
ssb> rsa4096/CC02AF338EE7E338 created: 2018-08-07 expires: never
card-no: 0006 07017169
ssb> rsa4096/8E0418955A55C1A8 created: 2018-08-07 expires: never
card-no: 0006 07017169
Все в порядке, уходим:
gpg/card> quit
Теперь зададим срок жизни сабключей. Он нужен для того, чтобы если по какой-то причине вы потеряли доступ к копии ключа – им нельзя было пользовать после истечения срока жизни ключа. Для этого надо выйти из режима редактирования карты и отредактировать ключ. Редактивровать мы будем SEC-ключ, в этом примере это 9ECF9961A551A45B:
tungsten> gpg --edit-key 9ECF9961A551A45B
gpg (GnuPG/MacGPG2) 2.2.8; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 5 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 5u
gpg: next trustdb check due at 2024-05-30
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: never usage: A
card-no: 0006 07017169
ssb rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: never usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
Команда key NUM
выберет ключ для редактирования. Чтобы снять выбор - нужно ввести ее повторно:
gpg> key 1
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb* rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: never usage: A
card-no: 0006 07017169
ssb rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: never usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
Меняем срок жизни:
gpg> expire
Changing expiration time for a subkey.
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) 5y
Key expires at Sun Aug 6 11:01:18 2023 MSK
Is this correct? (y/N) y
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb* rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: 2023-08-06 usage: A
card-no: 0006 07017169
ssb rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: never usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
Снимаем выделение первого ключа и меняем второй по аналогии:
gpg> key 1
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: 2023-08-06 usage: A
card-no: 0006 07017169
ssb rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: never usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
gpg> key 2
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: 2023-08-06 usage: A
card-no: 0006 07017169
ssb* rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: never usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
gpg> expire
Changing expiration time for a subkey.
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) 5y
Key expires at Sun Aug 6 11:01:29 2023 MSK
Is this correct? (y/N) y
sec rsa4096/9ECF9961A551A45B
created: 2018-08-07 expires: never usage: SC
card-no: 0006 07017169
trust: ultimate validity: ultimate
ssb rsa4096/CC02AF338EE7E338
created: 2018-08-07 expires: 2023-08-06 usage: A
card-no: 0006 07017169
ssb* rsa4096/8E0418955A55C1A8
created: 2018-08-07 expires: 2023-08-06 usage: E
card-no: 0006 07017169
[ultimate] (1). Paul Rudnitskiy (YBKey) <[email protected]>
gpg> save
Ключ на карте готов к использованию
Перенос существующего ключа на Yubikey
Этот раздел вам нужен, если у вас уже есть gpg-ключ и вы хотите его перенести на карту. Вы не сможете экспортировать приватный ключ с карты yubikey.
После того, как карта сконфигурирована, открываем режим редактирования ключа:
tungsten> gpg --expert --edit-key 21F7B93A71CDF86D649D8D0661BEBC7784A83F16
gpg (GnuPG/MacGPG2) 2.2.8; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
Ключи переносятся командой keytocard
. На Yubikey есть только три слота под три типа (capability) ключа:
- Encryption key
- Authentication key
- Sign key
Если у вас больше ключей - то вы должны решить, какие ключи вы будете переносить. В примере выше - 2 sign ключа, по этому мастер мы переносить не будем - на yubikey уедут только три сабключа. Перед началом переноса ключей рекомендую сделать backup и положить его в безопасное место.
Выберем ключ для переноса:
gpg> key 1
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb* rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
Перенесем его:
gpg> keytocard
Please select where to store the key:
(2) Encryption key
Your selection? 2
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb* rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
После переноса снимем выделение с него:
gpg> key 1
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
По аналогии перенесем 2 и 3 ключи:
gpg> key 2
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb* rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
gpg> keytocard
Please select where to store the key:
(3) Authentication key
Your selection? 3
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb* rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
gpg> key 2
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
gpg> key 3
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb* rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
gpg> keytocard
Please select where to store the key:
(1) Signature key
(3) Authentication key
Your selection? 1
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb* rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[ultimate] (1). Paul Rudnitskiy <[email protected]>
Все перенесено, сохраним и проверим:
gpg> save
tungsten> gpg --card-edit
Reader ...........: Yubico Yubikey 4 OTP U2F CCID
Application ID ...: D2760001240102010006070171690000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 07017169
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: 21F7 B93A 71CD F86D 649D 8D06 61BE BC77 84A8 3F16
created ....: 2018-08-08 14:51:38
Encryption key....: 7A30 6771 BB74 204F 54D5 8A61 1200 D2BB 8DFB 614C
created ....: 2018-08-08 14:51:38
Authentication key: DDB0 62D0 1BB4 4D01 3819 E450 0BC3 AD72 9F05 D736
created ....: 2018-08-08 14:54:07
General key info..: pub rsa2048/61BEBC7784A83F16 2018-08-08 Paul Rudnitskiy <[email protected]>
sec# rsa2048/61BEBC7784A83F16 created: 2018-08-08 expires: 2022-08-08
ssb> rsa2048/1200D2BB8DFB614C created: 2018-08-08 expires: 2022-08-08
card-no: 0006 07017169
ssb> rsa2048/0BC3AD729F05D736 created: 2018-08-08 expires: 2022-08-07
card-no: 0006 07017169
ssb> rsa2048/FAF7641B57B14FF2 created: 2018-08-08 expires: 2022-08-07
card-no: 0006 07017169
Обратите внимание, что мастер-ключ не лежит на карте – он пока еще хранится на компьютере (и внутри бэкапа). Имея доступ к мастер-ключу - можно редактировать срок жизни sub-ключа или отозвать (revoke) его. Очень важно хранить мастер в безопасности. Для этого мы вынесем его в холодное хранилище:
- у вас должна быть резервная копия мастер-ключа
- экспортируем публичный ключ
- удалим все секретные ключи с компьютера
- импортируем обратно публичный ключ, сделав его доверенным
Экспортируем публичный ключ:
gpg --export --armour 61BEBC7784A83F16 > pub.asc
Уберем из компьютера yubikey и удалим приватный ключ:
gpg --edit-key 61BEBC7784A83F16
gpg> delkey
импортируем публичный ключ обратно:
gpg --import < pub.asc
повысим ему уровень доверия
gpg --edit-key 61BEBC7784A83F16
gpg> trust
sec rsa2048/61BEBC7784A83F16
created: 2018-08-08 expires: 2022-08-08 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/1200D2BB8DFB614C
created: 2018-08-08 expires: 2022-08-08 usage: E
ssb rsa2048/0BC3AD729F05D736
created: 2018-08-08 expires: 2022-08-07 usage: A
ssb rsa2048/FAF7641B57B14FF2
created: 2018-08-08 expires: 2022-08-07 usage: S
[none] (1). Paul Rudnitskiy <[email protected]>
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
Теперь проверим, что ключи на карте видны:
tungsten> gpg --card-edit
Reader ...........: Yubico Yubikey 4 OTP U2F CCID
Application ID ...: D2760001240102010006070171690000
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: 07017169
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: 21F7 B93A 71CD F86D 649D 8D06 61BE BC77 84A8 3F16
created ....: 2018-08-08 14:51:38
Encryption key....: 7A30 6771 BB74 204F 54D5 8A61 1200 D2BB 8DFB 614C
created ....: 2018-08-08 14:51:38
Authentication key: DDB0 62D0 1BB4 4D01 3819 E450 0BC3 AD72 9F05 D736
created ....: 2018-08-08 14:54:07
General key info..: pub rsa2048/61BEBC7784A83F16 2018-08-08 Paul Rudnitskiy <[email protected]>
sec# rsa2048/61BEBC7784A83F16 created: 2018-08-08 expires: 2022-08-08
ssb> rsa2048/1200D2BB8DFB614C created: 2018-08-08 expires: 2022-08-08
card-no: 0006 07017169
ssb> rsa2048/0BC3AD729F05D736 created: 2018-08-08 expires: 2022-08-07
card-no: 0006 07017169
ssb> rsa2048/FAF7641B57B14FF2 created: 2018-08-08 expires: 2022-08-07
card-no: 0006 07017169
Отлично, ключи видны, можно пользоваться.
Выводы
Использование gpg-ключа с карты практически ничем не отличается от использования ключа без карты. Для авторизации по ssh с использованием ключа вам потребуется RSA pubkey. Он создается от gpg subkey A (Auth capability). Если вы меняете auth-ключ – ssh-ключ поменяется тоже, имейте ввиду. Чтобы его получить - достаточно набрать команду ssh-add -L
ssh-add -L
ssh-rsa AAAAB***************************** cardno:00007017169
Комментарий cardno подскажет, что ключ был импортирован из yubikey
На каждую попытку использовать ключ yubikey будет требовать ввод User PIN. Yubikey весьма безопасен и надежен, если не делать глупых ошибок в его использовании и применении. И разумеется - нельзя забывать о бэкапах.