Как стать автором
Обновить

GnuPG на смарт-картах. Как это выглядит…

Время на прочтение4 мин
Количество просмотров8.5K
image
Почти все знают что такое GPG. Многие им пользуются. Некоторые даже в курсе, что есть возможность хранить секретные ключи на внешнем носителе типа смарт-карты. Я-же хочу описать как это все выглядит на практике.

Несколько дней назад ко мне приехала пара «OpenPGP SmartCard v2». Заказаны они были у официального их распространителя — shop.kernelconcepts.de/index.php?language=en. Цена одной карты на данный момент составляет 17.14 евро. Две заказанные карты были отправлены чем-то вроде заказного письма и пересылка обошлась мне в 5 евро, что очень даже неплохо. Еще порадовало что карты без проблем прошли через таможню. Не уверен что так будет с большим количеством, но для личного использования, думаю, можно заказывать достаточно безопасно.

И вот они у меня…
image

Обе упакованы в отдельные пакетики и в каждом памятка о PIN-кодах по умолчанию и о трех попытках ввода.

Чуть ранее для изучения различных смарт-карт я приобрел карт-ридер модели SCR331. OpenPGP карты им читаются не хуже других.

Первым делом для работы (Ubuntu 10.04 LTS) необходимо запустить сервис pcscd. После этого вставляем карту и делаем команду pcsc_scan. Если все нормально, в консоль выводятся технические данные карты.

Далее пробуем посмотреть карту через gpg (здесь на карте уже есть ключи):

$ gpg --card-status
gpg: detected reader `SCM SCR 331 (21121046203464) 00 00'
Application ID ...: D2760001240102000005000010C00000
Version ..........: 2.0
Manufacturer .....: ZeitControl
Serial number ....: 000010C0
Name of cardholder: [не установлено]
Language prefs ...: de
Sex ..............: [не установлено]
URL of public key : [не установлено]
Login data .......: [не установлено]
Private DO 1 .....: [не установлено]
Private DO 2 .....: [не установлено]
Signature PIN ....: форсировано
Key attributes ...: 2048R 1024R 2048R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 6
Signature key ....: 4F3B 52C3 23FF 3931 6774  E694 3D10 7955 72D5 82DB
      created ....: 2011-10-18 11:52:30
Encryption key....: 82CB 2DB7 7DDD 6E56 5CB6  21B9 598A 49D6 B3F3 F028
      created ....: 2011-10-18 11:52:30
Authentication key: F159 6F7E D472 5CD0 7161  F00E 554E 78F8 CABD 115C
      created ....: 2011-10-18 11:52:30
General key info..: pub  2048R/72D582DB 2011-10-18 John Smith <john@smith.org>
sec>  2048R/72D582DB  создан: 2011-10-18  годен до: никогда     
                      номер карты: 0005 000010C0
ssb>  2048R/CABD115C  создан: 2011-10-18  годен до: никогда     
                      номер карты: 0005 000010C0
ssb>  1024R/B3F3F028  создан: 2011-10-18  годен до: никогда     
                      номер карты: 0005 000010C0


С помощью команды «gpg --card-edit» можно изменить персональные данные: имя владельца, предпочитаемый язык, пол и другие. Очень интересное поле «URL of public key», но об этом чуть дальше.

Так-же, с помощью команды «gpg --card-edit» можно сгенерировать ключи на карте. При этой процедуре в базу GPG в файловой системе попадает открытый ключ и псевдо-секретный ключ, в котором сам секретный ключ заменен заглушкой, указывающей на то, что он реально находится на смарт-карте.

Ну и что-же дальше? Дальше мне лично стали интересны два вопроса:
  1. Можно-ли сделать на карте резервную копию своего обычного ключа что-бы пользоваться ею в случае утери обычного?
  2. Самодостаточен-ли ключ на смарт-карте что-бы с ее помощью, например, организовать работу с чужого компьютера?


Резервная копия существующего ключа


На основании своих экспериментов предполагаю, что оптимальный порядок создания резервной копии своего ключа на карте следующий:
  1. Создать бэкап секретного ключа на диске командой «gpg --export-secret-key <id ключа>»;
  2. Зайти в ключ с помощью команды «gpg --edit-key <id ключа>»;
  3. Перейти в часть секретных ключей командой «toggle»;
  4. Командой «keytocard» переносим ключ для подписания. В следующем диалоге выбираем строку «Ключ для подписания»;
  5. Переключаемся на следующий ключ, служащий для шифрования, командой «key 1»;
  6. Командой «keytocard» переносим ключ на карту. В следующем запросе gpg должен выдать один вариант — «Ключ для шифрования». Выбираем его и ждем переноса.
  7. Выходим командой «save»;
  8. Удаляем секретный ключ командой «gpg --delete-secret-key <id ключа>»;
  9. Восстанавливаем секретный ключ из резервной копии командой «gpg --import <имя файла>»;

После этого у вас на карте будут находится резервные копии ваших секретных ключей.

Самодостаточность ключа на смарт-карте


В процессе изучения выяснилось, что для того, что-бы «подгрузить» описание секретных ключей со смарт-карты в базе GPG должен присутствовать открытый ключ, связанный с ключами на карте (обычный открытый ключ данной связки).

Тогда для «синхронизации» базы с картой достаточно выполнить команду «gpg --card-status». После ее выполнения секретные ключи-заглушки создадутся в базе GPG и ключем можно полноценно пользоваться.

Что-бы не таскать везде с собой свой публичный ключ, можно воспользоваться размещением его в интернете (в виде файла, доступного по http, или на одном из серверов ключей) и указанием расположения вашего публичного ключа в параметре карточки «URL of public key». Я проверил работу этого свойства, указав в нем url hkp сервера, на котором присутствует мой публичный ключ.

При наличии корректной записи в параметре карты «URL of public key», подготовка карты к работе на новом месте (естественно, при наличии доступа в интернет) сводится к выполнению двух команд:
  1. gpg --card-edit и последющей командой fetch в оболочке gpg;
  2. gpg --card-status

После этого вы имеете на системе свой полноценный ключ и можете с ним работать.

Использование


Использование GPG совместно со смарт-картой почти ничем не отличается от обычного использования. Кроме того, что вместо ключевой фразы вам нужно вводить пин-код карты. Если карта не вставлена в карт-ридер, при операциях с ключем в консольном режиме выдается сообщение о необходимости вставить карту.

К сожалению, обнаружилось что имеющаяся у меня версия оболочки GPA (0.9.0) не умеет корректно работать с ключами на смарт-карте. Она почему-то не ожидает ввода пин-кода карты, а сразу выдает что операция не может быть завершена. Хотя, где-то в соседнем окошке висит окно запроса пин-кода. Возможно, в других оболочках дело обстоит лучше. Ну, и, конечно, радует что хотя-бы из консоли все нормально работает.

В общем, хранить секретные ключи на смарт-карте, конечно, намного более безопасно чем в базе ключей на компьютере или на флэшке. И, разумеется, существенно более удобно при перемещении и необходимости организации работы с GPG с незнакомых компьютеров.
Теги:
Хабы:
+35
Комментарии34

Публикации

Изменить настройки темы

Истории

Ближайшие события