Вопрос или проблема
Я новичок в OpenPGP и смарт-картах, но не могу понять, как выполнить довольно простую задачу.
Я пытаюсь подписать файл с помощью закрытого ключа, хранящегося на устройстве YubiKey.
Вот моя сессия:
$ gpg --card-status
Читатель ...........: Yubico Yubikey 4 OTP U2F CCID 00 00
Идентификатор приложения ...: D2760001240102010006096334120000
Версия ..........: 2.1
Производитель .....: Yubico
Серийный номер ....: 09633412
Имя держателя карты: [не задано]
Предпочтения языка ...: [не задано]
Пол ..............: неопределен
URL открытого ключа : [не задано]
Данные для входа .......: [не заданы]
PIN для подписи ....: не обязательный
Атрибуты ключа ...: rsa2048 rsa2048 rsa2048
Макс. длина PIN .: 127 127 127
Счетчик попыток PIN : 3 0 3
Счетчик подписей : 3
Ключ подписи ....: B692 4360 F06A AB92 1B9A 3E6D 3850 24E1 EE26 F6D9
создан ....: 2019-05-14 14:44:27
Ключ шифрования....: [нет]
Ключ аутентификации: B692 4360 F06A AB92 1B9A 3E6D 3850 24E1 EE26 F6D9
создан ....: 2019-05-14 14:44:27
Общая информация о ключе..: [нет]
$
$ gpg -K
$
$ gpg --list-keys
$
$ gpg --with-subkey-fingerprint -K
$
$ gpg --refresh-keys
$ gpg --list-keys
$
Я посмотрел некоторые записи, такие как эта: Создать резервный Yubikey с идентичными PGP ключами, но все еще не уверен, что я делаю неправильно.
Все, что мне нужно сделать, это как-то использовать ключ подписи для подписи файла через
gpg --sign -u <key-id> somefile.txt
Мне нужно как-то создать указатель в моем локальном хранилище ключей на ключ подписи и выяснить его идентификатор.
Я использую gpg (GnuPG) 2.2.12 и libgcrypt 1.8.4
Есть какие-либо предложения?
Карта должна быть связана с секретным хранилищем ключей. Карта не заменяет ваше хранилище ключей, а просто является более безопасным (в теории) местом для хранения секретных ключей.
Когда вы изначально говорили gnupg создать (суб)ключ на карте или переместить существующий ключ на карту, он будет манипулировать вашим секретным хранилищем ключей на диске, чтобы содержать указатель на карту и слот, где хранится ключ. Вам нужно ваше секретное хранилище ключей из того места, где вы находились, когда изначально настраивали ключ на карте. Это должно позволить gnupg найти ключ в его текущем расположении.
Если у вас есть только субключи на карте, а не основной ключ, то основной ключ все еще будет в этом секретном хранилище ключей, что будет означать, что любой, имеющий доступ к нему и кто может угадать пароль, сможет создать новые субключи, что ставит под сомнение цель карты. Если это так, то храните копию ключа с настоящим секретным ключом где-то в безопасности. Чтобы сделать безопасную версию вашего секретного хранилища ключей (где основной ключ недоступен), вы можете использовать gpg2 –export-secret-subkeys, а затем импортировать файл туда, где вам нужен доступ к секретным субключам (включая те, что на карте).
Ответ или решение
Создание указателей на ключи на SmartCard: детальное руководство
Ваша задача заключается в том, чтобы подписать файл с использованием приватного ключа, хранящегося на устройстве YubiKey. Рассмотрим пошагово, как правильно настроить вашу среду и создать указатели на ключи.
1. Понимание SmartCard и OpenPGP
SmartCard (в данном случае YubiKey) используется для безопасного хранения приватных ключей. OpenPGP предоставляет возможность использования ключей, хранящихся на таких устройствах, для обеспечения безопасности и подтверждения подписи. Когда ключ генерируется или перемещается на карта, GnuPG создает запись в локальном ключевом хранилище, указывающую на местоположение этого ключа на карте.
2. Убедитесь, что SmartCard правильно настроен
На основе вывода команды gpg --card-status
, видно, что ваше устройство YubiKey распозналось, и ключи успешно созданы. Убедитесь, что при генерации ключей вы использовали опцию "на SmartCard" — в противном случае они могут находиться только в локальном хранилище.
3. Проверка локального ключевого хранилища
Чтобы увидеть, есть ли указатели на ключи в вашем локальном ключевом хранилище, выполните следующие команды:
gpg --list-secret-keys
gpg --list-keys
Если это не выдает никаких результатов, возможно, вы использовали другой ключ или не добавили указатели на ваши ключи. То, что вы видите при выполнении gpg -K
, указывает на то, что в локальном хранилище секретных ключей не найдены. Вам нужно убедиться, что у вас есть ключ в локальном хранилище, указывающий на ваш SmartCard.
4. Импорт секретных подключений
Если ваши секретные подкуски были сгенерированы на каком-либо другом устройстве или вы не имеете доступ к оригинальному приватному ключу, вы можете создать безопасную версию вашего ключа, используя следующее:
gpg --export-secret-subkeys > my_subkeys.asc
С помощью этого вы сможете экспортировать свои секретные подкуски и импортировать их в другое место, где необходимо использовать.
gpg --import my_subkeys.asc
5. Указание на ключ во время подписания файла
Теперь, имея указатели на ваши секретные подкуски, вы можете подписать файл:
gpg --sign -u <key-id> somefile.txt
Где <key-id>
— это идентификатор вашего ключа, который может быть найден в результате выполнения команды gpg --list-keys
.
6. Проверка и обновление ключей
Периодически рекомендуется выполнять команду для обновления ваших ключей:
gpg --refresh-keys
Это гарантирует, что ваш ключ обновлен и корректно распознается системой.
Заключение
Настройка использования ключей на SmartCard требует внимательности. Убедитесь, что вы правильно создали указатели и используете правильные идентификаторы. Если вы столкнулись с проблемами, это может означать, что вы работаете с неправильным ключевым хранилищем или что ваши ключи не были сгенерированы корректным образом. Следуя этим шагам, вы сможете безопасно подписывать ваши файлы с использованием YubiKey.