Карты OpenPGP smart card v2 – эксперименты
Сегодня приехали ко мне две эти карточки. Начал эксперименты. Сразу появились непонятки.
Выдает нормальную информацию по карте
Однако:
По этой-же причине gpg не может перенести существующие ключи на карту – ругается на демон scdaemon.
Очень смущает что --card-status (и --card-edit тоже) работают нормально, а другие команды что-то не хотят. По идее, нужно как-то настроить scdaemon, но совершенно не понимаю как. Может у кого-то есть ссылки на информацию как это сделать?
Ссылки
[link1] http://www.pgpru.com/comment33738
Итак, я сам в конце концов нашел часть решения (не уверен что полностью, но gpg2 --card-status теперь работает)...
Нужно сначала посмотреть список ридеров:
Например, у меня выдает вот так:
Далее в файле /.gnupg/scdaemon.conf прописать имя ридера в качестве reader-port. Что интересно – если в этом параметре указывать номер, то оно не работает. У меня получилось вот так:
После этого начало что-то работать.
По названию топика решил, что сообщат что-то интересное о попытках взлома и нахождения уязвимостей.
Ну, это тоже буду исследовать. В данный момент проверяю извлекаемость секретных ключей с карты.
Может конечно и глупый тест, но на всякий случай проверил...
1. Со вставленной картой сделал backup ключа
2. Вынул карту, стер ключ
3. Восстановил ключ из бэкапа
После этого ключ все-равно работает только с картой.
Изучил подробнее бэкап – видно сразу что в нем размер секретного ключа существенно меньше чем у бэкапа обычного ключа. Т.е. в данном случае, насколько я понял, в бэкап помещается лишь служебная информмация о секретном ключа, а самого его в бэкапе нет.
Возможно по аналогии с тем, что выдаёт paperkey[link1].
Ну, проверил эти ключи через paperkey. Он для обычных ключей все-равно выдает данные, большие по размеру, чем для ключа с карты.
Какой-бы утилитой посмотреть детальную информацию по ключу?
Там ссылки на карту содержится (card stub). Они нужны только чтобы можно было проверять наличие ключа "условно".
Кстати, если удалить закрытый ключ или всю связку, а затем вызвать gpg --card-status, то gpg пересоздаст card stubs.
cat [keyfile] | gpg --list-packets
А почему у меня не пересоздает?
Я как раз пытаюсь выяснить самодостаточны-ли ключи на карте. Пока вижу что они имеют смысл только с ключами из базы GPG. Если-бы было как вы пишете, это было-бы отлично, но пока все говорит о противоположном.
Стабы пересоздаются, если выполнены два условия:
1) на связке открытых ключей есть _открытый_ ключ, соответствующий закрытому ключу на карте
2) на связке закрытых ключей нет уже созданного стаба или самого закрытого ключа.
sentaus, спасибо за пояснение. Так сработало.
Т.е. для организации работы с ключем в произвольном месте нужно только что-бы соответствующий публичный ключ был на каком-нибудь сервере ключей и при мне была карта? Очень удобно.
Теперь пытаюсь сделать следующую штуку...
Есть у меня рабочий ключ, которым я пользуюсь. Но сразу не хотелось-бы его переносить на карту. Хочу сделать его бэкап на карте. Экспортировал секретный ключ, командой bkuptocard перенес его в качестве ключа подписи, шифрования и авторизации (чувствую что сделал не то, но как надо не совсем понимаю).
Затем удалил секретный ключ из сделал card-status. Первый ключ из пары с тем-же идентификатором что и основной (для подписи и сертифицирования) восстановился нормально. А вот подключ для шифрования не восстановился.
Ладно, попробовал через export-secret-subkeys экпортировать только этот подключ в файл и залить его через bkuptocard в качестве ключа шифрования. Однако, gpg ругается и выдает ошибку:
Смысла этой ошибки я что-то не понял.
Да.
Ошибка, возможно фатальная. На карте может быть три ключа: ключ подписи, ключ шифрования и ключ аутентификации. Это разные ключи. Главный ключ (или подключ подписи) нужно добавлять на карту как ключ подписи, а подключ шифрования – как ключ шифрования. Тавтология получилась :) В общем, роли надо просто соблюдать. :) Кстати, странно, что вам удалось поместить на карту главный ключ в роли ключа шифрования, gpg обычно простейшие проверки ролей делает. Возможно у него тоже была прописана возможность шифрования.
Ключи аутентификации gnupg не используются, их можно для SSH применить.
Неудивительно. Связку вы удалили, а на карте только три копии главного ключа.
Отсутствует закрытый подключ, причина описана выше.
В общем, получилось вот таким способом (учитывая что локальный вариант ключа у меня в бэкапе):
1. Зашел в --edit-key в свой ключ;
2. toggle для переключения на секретные ключи;
3. key <ID подключа для шифрования>;
4. keytocard
При этом gpg выдал мне только один вариант – "ключ для шифрования".
Вот после этого на карту попал правильный ключ для шифрования. Попробовал удалить секретный ключ и восстановить через card-status – все сработало.
После этого удалили секретный ключ и восстановил файловую версию. Карта будет резервом.
Еще фишка... Можно обойтись и без публичного ключа, таскаемого с собой. В карте есть поле "URL of public key", в которое можно прописать сервер ключей, на котором лежит этот публичный ключ (я пробовал hkp сервер, но видел в инете примеры что можно просто ключ в виде asc файла где-то выложить и поставить в url http ссылку). Я так прописал, потом полностью удалил ключ с компа. Затем сделал:
1. Зашел в --card-edit и дал команду "fetch";
2. Вышел из --card-edit и запустил --card-status;
После этого получил полноценный ключ, привязанный к карте.
Похоже, что не интересуются этими картами пока :(