Карты OpenPGP smart card v2 – эксперименты


Сегодня приехали ко мне две эти карточки. Начал эксперименты. Сразу появились непонятки.


Выдает нормальную информацию по карте

Однако:


По этой-же причине gpg не может перенести существующие ключи на карту – ругается на демон scdaemon.

Очень смущает что --card-status (и --card-edit тоже) работают нормально, а другие команды что-то не хотят. По идее, нужно как-то настроить scdaemon, но совершенно не понимаю как. Может у кого-то есть ссылки на информацию как это сделать?

Комментарии
— andreyvel (18/10/2011 15:22, исправлен 18/10/2011 15:22)   

Итак, я сам в конце концов нашел часть решения (не уверен что полностью, но gpg2 --card-status теперь работает)...


Нужно сначала посмотреть список ридеров:


Например, у меня выдает вот так:


Далее в файле /.gnupg/scdaemon.conf прописать имя ридера в качестве reader-port. Что интересно – если в этом параметре указывать номер, то оно не работает. У меня получилось вот так:

После этого начало что-то работать.

— unknown (18/10/2011 15:26)   
По названию топика решил, что сообщат что-то интересное о попытках взлома и нахождения уязвимостей.
— andreyvel (18/10/2011 15:53)   
Ну, это тоже буду исследовать. В данный момент проверяю извлекаемость секретных ключей с карты.
— andreyvel (18/10/2011 16:05)   
Может конечно и глупый тест, но на всякий случай проверил...

1. Со вставленной картой сделал backup ключа
2. Вынул карту, стер ключ
3. Восстановил ключ из бэкапа

После этого ключ все-равно работает только с картой.

Изучил подробнее бэкап – видно сразу что в нем размер секретного ключа существенно меньше чем у бэкапа обычного ключа. Т.е. в данном случае, насколько я понял, в бэкап помещается лишь служебная информмация о секретном ключа, а самого его в бэкапе нет.
— unknown (18/10/2011 16:20)   
Изучил подробнее бэкап – видно сразу что в нем размер секретного ключа существенно меньше чем у бэкапа обычного ключа.

Возможно по аналогии с тем, что выдаёт paperkey[link1].
— andreyvel (18/10/2011 16:36)   
Возможно по аналогии с тем, что выдаёт paperkey.

Ну, проверил эти ключи через paperkey. Он для обычных ключей все-равно выдает данные, большие по размеру, чем для ключа с карты.

Какой-бы утилитой посмотреть детальную информацию по ключу?
— sentaus (18/10/2011 16:38)   
Изучил подробнее бэкап – видно сразу что в нем размер секретного ключа существенно меньше

Там ссылки на карту содержится (card stub). Они нужны только чтобы можно было проверять наличие ключа "условно".

Кстати, если удалить закрытый ключ или всю связку, а затем вызвать gpg --card-status, то gpg пересоздаст card stubs.
— unknown (18/10/2011 17:09)   

cat [keyfile] | gpg --list-packets
— andreyvel (18/10/2011 18:35, исправлен 18/10/2011 18:39)   
... то gpg пересоздаст card stubs.

А почему у меня не пересоздает?


Я как раз пытаюсь выяснить самодостаточны-ли ключи на карте. Пока вижу что они имеют смысл только с ключами из базы GPG. Если-бы было как вы пишете, это было-бы отлично, но пока все говорит о противоположном.

— sentaus (18/10/2011 21:38)   
Стабы пересоздаются, если выполнены два условия:
1) на связке открытых ключей есть _открытый_ ключ, соответствующий закрытому ключу на карте
2) на связке закрытых ключей нет уже созданного стаба или самого закрытого ключа.
— andreyvel (18/10/2011 21:57)   
sentaus, спасибо за пояснение. Так сработало.

Т.е. для организации работы с ключем в произвольном месте нужно только что-бы соответствующий публичный ключ был на каком-нибудь сервере ключей и при мне была карта? Очень удобно.
— andreyvel (18/10/2011 22:20)   
Теперь пытаюсь сделать следующую штуку...

Есть у меня рабочий ключ, которым я пользуюсь. Но сразу не хотелось-бы его переносить на карту. Хочу сделать его бэкап на карте. Экспортировал секретный ключ, командой bkuptocard перенес его в качестве ключа подписи, шифрования и авторизации (чувствую что сделал не то, но как надо не совсем понимаю).

Затем удалил секретный ключ из сделал card-status. Первый ключ из пары с тем-же идентификатором что и основной (для подписи и сертифицирования) восстановился нормально. А вот подключ для шифрования не восстановился.

Ладно, попробовал через export-secret-subkeys экпортировать только этот подключ в файл и залить его через bkuptocard в качестве ключа шифрования. Однако, gpg ругается и выдает ошибку:

Смысла этой ошибки я что-то не понял.
— sentaus (18/10/2011 22:36)   

Т.е. для организации работы с ключем в произвольном месте нужно только что-бы соответствующий публичный ключ был на каком-нибудь сервере ключей и при мне была карта?


Да.

перенес его в качестве ключа подписи, шифрования и авторизации (чувствую что сделал не то, но как надо не совсем понимаю).


Ошибка, возможно фатальная. На карте может быть три ключа: ключ подписи, ключ шифрования и ключ аутентификации. Это разные ключи. Главный ключ (или подключ подписи) нужно добавлять на карту как ключ подписи, а подключ шифрования – как ключ шифрования. Тавтология получилась :) В общем, роли надо просто соблюдать. :) Кстати, странно, что вам удалось поместить на карту главный ключ в роли ключа шифрования, gpg обычно простейшие проверки ролей делает. Возможно у него тоже была прописана возможность шифрования.

Ключи аутентификации gnupg не используются, их можно для SSH применить.

А вот подключ для шифрования не восстановился.

Неудивительно. Связку вы удалили, а на карте только три копии главного ключа.

Смысла этой ошибки я что-то не понял.

Отсутствует закрытый подключ, причина описана выше.
— andreyvel (18/10/2011 22:37)   
В общем, получилось вот таким способом (учитывая что локальный вариант ключа у меня в бэкапе):

1. Зашел в --edit-key в свой ключ;
2. toggle для переключения на секретные ключи;
3. key <ID подключа для шифрования>;
4. keytocard

При этом gpg выдал мне только один вариант – "ключ для шифрования".

Вот после этого на карту попал правильный ключ для шифрования. Попробовал удалить секретный ключ и восстановить через card-status – все сработало.

После этого удалили секретный ключ и восстановил файловую версию. Карта будет резервом.
— andreyvel (18/10/2011 22:48)   
Еще фишка... Можно обойтись и без публичного ключа, таскаемого с собой. В карте есть поле "URL of public key", в которое можно прописать сервер ключей, на котором лежит этот публичный ключ (я пробовал hkp сервер, но видел в инете примеры что можно просто ключ в виде asc файла где-то выложить и поставить в url http ссылку). Я так прописал, потом полностью удалил ключ с компа. Затем сделал:

1. Зашел в --card-edit и дал команду "fetch";
2. Вышел из --card-edit и запустил --card-status;

После этого получил полноценный ключ, привязанный к карте.
— sentaus (19/10/2011 01:06)   
По названию топика решил, что сообщат что-то интересное о попытках взлома и нахождения уязвимостей.


Похоже, что не интересуются этими картами пока :(

Ссылки
[link1] http://www.pgpru.com/comment33738