Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 10:28
Оценка:
Вчера занимался перевыпуском ЭЦП от ФНС
Автор: Евгений Музыченко
Дата: 07.09.23
. Кривизна и ненадежность процедуры навели на мысли о том, что неплохо бы сделать резервную копию секретного ключа. Судя по тому, что 5110 аппаратно не поддерживает алгоритмы ГОСТ, а SafeNet Authentication Client Tools по-прежнему не видит на ключе никаких контейнеров/сертификатов, КриптоПро до сих пор держит закрытые ключи в файловой системе eToken в собственном формате, извлекая их оттуда при вычислении подписи.

В сети полно инструкций по извлечению секретного ключа с разных моделей РуТокен с помощью утилит Tokens и CertFix от Контура, но eToken 5110 и 72k эти утилиты не видят. Они принципиально не умеют с ними работать, или им нужны какие-то особые драйверы/службы для РуТокен?

Кто имел дело с файловыми системами ключей — посоветуйте, как проще это сделать. Может, есть какой хак для КриптоПро?
Re: Извлечение секретного ключа с eToken 5110
От: BlackEric http://black-eric.lj.ru
Дата: 08.09.23 10:39
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Вчера занимался перевыпуском ЭЦП от ФНС
Автор: Евгений Музыченко
Дата: 07.09.23
. Кривизна и ненадежность процедуры навели на мысли о том, что неплохо бы сделать резервную копию секретного ключа. Судя по тому, что 5110 аппаратно не поддерживает алгоритмы ГОСТ, а SafeNet Authentication Client Tools по-прежнему не видит на ключе никаких контейнеров/сертификатов, КриптоПро до сих пор держит закрытые ключи в файловой системе eToken в собственном формате, извлекая их оттуда при вычислении подписи.


ЕМ>В сети полно инструкций по извлечению секретного ключа с разных моделей РуТокен с помощью утилит Tokens и CertFix от Контура, но eToken 5110 и 72k эти утилиты не видят. Они принципиально не умеют с ними работать, или им нужны какие-то особые драйверы/службы для РуТокен?


ЕМ>Кто имел дело с файловыми системами ключей — посоветуйте, как проще это сделать. Может, есть какой хак для КриптоПро?


https://coderanch.com/t/646136/java/Extract-private-Key-Etoken

Расскажете потом получилось ли. По нормальному на новых токенах ключ должен быть не извлекаем.
https://github.com/BlackEric001
Re: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 11:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Судя по тому, что 5110 аппаратно не поддерживает алгоритмы ГОСТ, а SafeNet Authentication Client Tools по-прежнему не видит на ключе никаких контейнеров/сертификатов, КриптоПро до сих пор держит закрытые ключи в файловой системе eToken в собственном формате, извлекая их оттуда при вычислении подписи.

Вообще-то он умеет java и элептические кривые поддерживает, так что может быть и не извлекаемый. Тогда просто еще пару ключей создайте. (Не отзывая старых конечно же )

ЕМ>Кто имел дело с файловыми системами ключей — посоветуйте, как проще это сделать. Может, есть какой хак для КриптоПро?

Вообще криптопро если ключ извлекаемый умеет делать копию и потом бэкап на флешку и оттуда уже можно вынуть.

Еще тут посмотрите: https://habr.com/ru/articles/276057/

ps:

C 2022 года в РФ были отменены все сертификаты ФСТЭК, выданные на иностранное оборудование. По этой причине eToken 5110 пока не может быть сертифицирован ФСТЭК.

Re[2]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 11:37
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>https://coderanch.com/t/646136/java/Extract-private-Key-Etoken


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

BE>По нормальному на новых токенах ключ должен быть не извлекаем.


5110 как раз достаточно старый — я его покупал еще в 2017-м. В прошлом году мне на него записали сертификат в отделении ФНС, а вчера я туда же записал новый сертификат, полученный через браузер. Пока не могу понять, в каком формате там лежит секретный ключ.
Re[2]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 11:39
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Вообще криптопро если ключ извлекаемый умеет делать копию и потом бэкап на флешку


Когда делал (до прошлого года), тогда и проблем не было.

_>Еще тут посмотрите: https://habr.com/ru/articles/276057/


Спасибо, видел. Если не найду более готового решения, то придется и так.

_>ps:

C 2022 года в РФ были отменены все сертификаты ФСТЭК, выданные на иностранное оборудование. По этой причине eToken 5110 пока не может быть сертифицирован ФСТЭК.


То есть, можно считать, что ключ просто лежит в контейнере, формально помеченном, как неизвлекаемый?
Re[2]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 11:41
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>еще пару ключей создайте. (Не отзывая старых конечно же )


Я ж писал в теме по перевыпуску, что их дебильный алгоритм не позволяет скачать новый ключ, не отозвав старого.
Re[3]: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 11:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>То есть, можно считать, что ключ просто лежит в контейнере, формально помеченном, как неизвлекаемый?

Нет. Если бы вы генерировали ключ в браузере и сохранили его в контейнере на компьютере. Он бы лёг в реест. И тогда он элементарно извлекается даже если помечен как не извлекаемый.
Но если вы генерировали секретный ключ токеном, то он не покидал токена и он его низачто не отдаст ни при каких обстоятельствах. Только аппаратно, снимать компаунд, кислотой травить слой за слоем и коротить дорожки под микроскопом (и обычно даже там есть мины, чтоб так не делали). (При условии что это действительно токен, а не флешка).
Отредактировано 08.09.2023 11:49 kov_serg . Предыдущая версия . Еще …
Отредактировано 08.09.2023 11:47 kov_serg . Предыдущая версия .
Отредактировано 08.09.2023 11:47 kov_serg . Предыдущая версия .
Re[3]: Извлечение секретного ключа с eToken 5110
От: BlackEric http://black-eric.lj.ru
Дата: 08.09.23 11:48
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, BlackEric, Вы писали:


BE>>https://coderanch.com/t/646136/java/Extract-private-Key-Etoken


ЕМ>Спасибо, находил уже это в поиске. Но я с Java знаком только на уровне запуска полных готовых программ, а делать что-то свое на основе коротких примеров, боюсь, будет слишком геморройно.


Там принцип показан, так то можно на любом языке сделать. Все зависит от библиотеки токена и как был сгенерирован ключ.
https://github.com/BlackEric001
Re[4]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 11:52
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Если бы вы генерировали ключ в браузереизвлекаемый.

_>Но если вы генерировали секретный ключ токеном

Так весь вопрос в том, как именно генерировался ключ на нижнем уровне. На верхнем-то всегда браузер.
Re[5]: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 12:02
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, kov_serg, Вы писали:


_>>Если бы вы генерировали ключ в браузере извлекаемый.

_>>Но если вы генерировали секретный ключ токеном

ЕМ>Так весь вопрос в том, как именно генерировался ключ на нижнем уровне. На верхнем-то всегда браузер.

Как обычно это происходит.
1. генерируется секретный ключ (точка на эллиптической кривой)
2. генерируется публичный ключ и запрос на сертификат.
3. этот запрос уходит на сторону, которая подписывает сертификат своим ключом и возвращает сертификат
4. в сертификате только открытый ключ, но он подписан удостоверяющим центром и там еще добавляют доп поля, типа назначения адреса явки инн и т.п.
5. вот этот сертификат тоже кладётся в токен. его он отдаёт без вопросом. но секретный ключ от него никогда (если специально не указано обратное).
Отредактировано 08.09.2023 12:29 kov_serg . Предыдущая версия . Еще …
Отредактировано 08.09.2023 12:05 kov_serg . Предыдущая версия .
Re[6]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 12:09
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Как обычно это происходит.


Точнее, "как это должно происходить". А я хочу узнать, как это происходило в конкретно моем случае.
Re[7]: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 12:32
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

_>>Как обычно это происходит.


ЕМ>Точнее, "как это должно происходить". А я хочу узнать, как это происходило в конкретно моем случае.

Отзовите и сгенерируйте в криптопрошный контейнер новый. И потом делайте резервные копии на флекшу ( на диск и в сеть он не хочет, только флешки )
Re[8]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 13:14
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Отзовите и сгенерируйте в криптопрошный контейнер новый.


Так он всегда кладет в новый контейнер. Старый контейнер остается.

_>И потом делайте резервные копии на флекшу ( на диск и в сеть он не хочет, только флешки )


Ничего не понял. Если он сейчас не делает резервных копий, отчего вдруг станет их делать на следующий раз?
Re[4]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 13:33
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>можно на любом языке сделать. Все зависит от библиотеки токена


Ну вот экспорты C_OpenSession, C_FindObjects я в экспортах их DLL вижу. А где брать определения констант (Token.SessionType.SERIAL_SESSION, Token.SessionReadWriteBehavior.RW_SESSION и прочих)? В приведенных примерах их импортируют из каких-то известных библиотек. Если это SDK производителя, то где его брать? Просто так они его не дают.
Re[5]: Извлечение секретного ключа с eToken 5110
От: BlackEric http://black-eric.lj.ru
Дата: 08.09.23 13:45
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, BlackEric, Вы писали:


BE>>можно на любом языке сделать. Все зависит от библиотеки токена


ЕМ>Ну вот экспорты C_OpenSession, C_FindObjects я в экспортах их DLL вижу. А где брать определения констант (Token.SessionType.SERIAL_SESSION, Token.SessionReadWriteBehavior.RW_SESSION и прочих)? В приведенных примерах их импортируют из каких-то известных библиотек. Если это SDK производителя, то где его брать? Просто так они его не дают.


https://github.com/fladna9/PKCS11Explorer и далее. SDK выпрашивали в свое время у вендоров.
https://github.com/BlackEric001
Re: Извлечение секретного ключа с eToken 5110
От: vsb Казахстан  
Дата: 08.09.23 13:55
Оценка:
У производителя обычно есть софт для работы с токеном. Если ключ извлекаем, то в этом софте будет такая функция. Если ключ не извлекаем, то его не извлечь, для того аппаратный токен и придумали, в общем-то.

Если там программное ограничение, то это жуткая халтура, я не думаю, что такое может существовать.
Отредактировано 08.09.2023 13:57 vsb . Предыдущая версия .
Re[9]: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 14:06
Оценка: 4 (1) +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Ничего не понял. Если он сейчас не делает резервных копий, отчего вдруг станет их делать на следующий раз?

Если сгенерировать ключ не токеном, а криптопром то он будет физически лежать в реестре винды.
Есть утилита которая позволяет убрать галочку не извлекаемый приватный ключ.
Далее штатным способом просите сделать бэкап приватного ключа и сертификата на флешку.
Далее можете вынуть оттуда приватный ключи и потом openssl-ем подписывать что угодно.
Либо просто использовать как резервную копию распечатав в виде qr-кода base64 от приватного ключа и т.п.

Но если вы сгенерировали приватный ключ токеном, то он его без боя не отдаст.
Re[10]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 19:50
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Если сгенерировать ключ не токеном, а криптопром то он будет физически лежать в реестре винды.


Лежать он будет там, куда его положит сгенерировавший софт (в данном случае КриптоПро). И в том виде, который задаст КриптоПро, и который будет поддерживать токен.

_>Есть утилита которая позволяет убрать галочку не извлекаемый приватный ключ.


Если Вы про Tokens.exe, то она предназначена для РуТокен, а eToken она не видит. Возможно, ее можно как-то научить, но я не нашел.

_>Далее штатным способом просите сделать бэкап приватного ключа и сертификата на флешку.


Угу.

_>Но если вы сгенерировали приватный ключ токеном, то он его без боя не отдаст.


Да знаю я. А толку от этого знания? Сперва надо понять, как именно был сгенерирован ключ. Есть идеи?
Re[2]: Извлечение секретного ключа с eToken 5110
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.09.23 19:51
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Если там программное ограничение, то это жуткая халтура, я не думаю, что такое может существовать.


Дык, сколько лет существовало. Я попервости сам не верил, ибо казалось бредом, а поди ж ты. И сейчас не факт, что полностью изжито.
Re[11]: Извлечение секретного ключа с eToken 5110
От: kov_serg Россия  
Дата: 08.09.23 20:36
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Лежать он будет там, куда его положит сгенерировавший софт (в данном случае КриптоПро). И в том виде, который задаст КриптоПро, и который будет поддерживать токен.

Нет. Если его генерит криптопро то он будет лежать в контейнере криптопро. А если токен то внутри токена.

ЕМ>Если Вы про Tokens.exe, то она предназначена для РуТокен, а eToken она не видит. Возможно, ее можно как-то научить, но я не нашел.

Нет. Я про то что если вы получаете сертификат через интернет, то секретный ключ генерируете вы и потом отправляете запрос на получения сертификата, его подписывают и отдают вам.
У стороны которая подписывает сертификат нет понятия где у вас секретный ключ. На токене или на бумаге или еще где. Секретный ключ это просто случайное число, просто длинное.

_>>Но если вы сгенерировали приватный ключ токеном, то он его без боя не отдаст.

ЕМ>Да знаю я. А толку от этого знания? Сперва надо понять, как именно был сгенерирован ключ. Есть идеи?
Еще раз получите сертификат, генерируйте ключ не токеном, а криптопрой. Его потом можно легко бэкапить и вынуть если хочется.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.