Как все начиналось
В самом начале периода самоизоляции мне на почту пришло письмо:
Первая реакция была естественной: это надо либо ехать за токенами, либо их должны привезти, а с понедельника уже все сидим по домам, ограничения по передвижению, да и чем черт не шутит. Поэтому ответ был вполне естеcственным:
И как мы все знаем, с понедельника 1 апреля наступил период достаточно жесткой самоизоляции. Мы тоже все перешли на удаленку и нам тоже потребовался VPN. Наш VPN построен на базе OpenVPN, но доработанный с целью поддержки российской криптографии и возможностью работы с токенами PKCS#11 и контейнерами PKCS#12. Естественно, тут выяснилось, что мы и сами не совсем были готовы к работе через VPN: у многих просто не было сертификатов, а у кого-то они были просрочены.
Как шел процесс
И вот здесь на помощь пришла утилита cryptoarmpkcs и приложение CAFL63 (удостоверяющий центр).
Утилита cryptoarmpkcs позволила сотрудникам, находящимся на самоизоляции и имеющим у себя на домашних компьютерах токены, сформировать запросы на сертификаты:
Сохраненные запросы сотрудники отправляли по электронной почте мне. Кто-то может спросить:- А как же персональные данные, но, если внимательно посмотреть, то их в запросе нету. А сам запрос защищен своей подписью.
По получении запрос на сертификат импортируется в БД УЦ CAFL63:
После чего запрос должен быть либо отклонен, либо утвержден. Для рассмотрения запроса необходимо его выделить, нажать правую кнопку мыши и выбрать в выпадающем меню пункт «Принять решение»:
Сама процедура принятия решения абсолютно прозрачная:
Аналогичным образом выпускается и сертификат, только пункт меню называется «Выпустить сертификат»:
Для просмотра выпущенного сертификата можно воспользоваться контекстным меню или просто щелкнуть два раза по соответствующей строке:
Теперь содержимое можно просмотреть как посредством openssl (Вкладка «Текст от OpenSSL»), так и встроенным просмотрщиком приложения CAFL63 (вкладка «Текст сертификата»). В последнем случае можно воспользоваться контекстным меню для копирования сертификата в текстовом виде сначала в буфер обмена, а затем и в файл.
Здесь надо отметить, что же изменилось в CAFL63 по сравнению с первой версией? Что касается просмотра сертификатов, то мы уже это отметили. Стало возможным также выделять группу объектов (сертификаты, запросы, CRL) и просматривать их в режиме листания (кнопка «Просмотр выделенных ...»).
Наверное, самое главное то, что проект выложен в свободном доступе на гитхабе. Помимо дистрибутивов для linux, подготовлены дистрибутивы для Windows и OS X. Дистрибутив для Android будет выложен чуть позже.
По сравнению с предыдущей версией приложения CAFL63 изменился не только сам интерфейс, но и, как уже было отмечено, добавились новые возможности. Так, например, переработана страница с описанием приложения, в нее добавлены прямые ссылки на скачивание дистрибутивов:
Многие спрашивали и сейчас спрашивают, где взять ГОСТ-овый openssl. Традиционно я даю ссылку, любезно предоставленную garex. Как использовать этот openssl, написано здесь.
Но сейчас в состав дистрибутивов включена тестовая версия openssl с российской криптографией.
Поэтому, когда будет проводиться настройка УЦ, то в качестве используемого openssl, можно будет указать либо /tmp/lirssl_static для linux, либо $::env(TEMP)/lirssl_static.exe для Windows:
При этом необходимо будет создать пустой файл lirssl.cnf и указать в переменной среды окружения LIRSSL_CONF путь к этому файлу:
Вкладка «Extensions» в настройках сертификатов дополнена полем «Authority Info Access», где можно задать точки доступа к корневому сертификату УЦ и к OCSP-серверу:
Часто приходится слышать, что УЦ не принимают от заявителей сгенерированные ими запросы (PKCS#10) или, еще хуже, навязывают формирование у себя запросов с генерацией ключевой пары на носителе через некое CSP. И отказываются от генерации запросов на токенах с неизвлекаемым ключом (на том же РуТокен ЭЦП-2.0) через интерфейс PKCS#11. Поэтому было решено добавить в функционал приложения CAFL63 генерацию запросов с использованием криптографических механизмов токенов PKCS#11. Для поключения механизмов токена был иcпользован пакет TclPKCS11. При создании запроса на УЦ (страница «Запросы на сертификаты», функция «Создать запрос/CSR») теперь можно выбирать как будет сгенерирована ключевая пара (средствами openssl или на токене) и подписан сам запрос:
Библиотека, необходимая для работы с токеном, прописывается в настройках для сертификата:
Но мы отклонились в сторону от основной задачи, связанной с обеспечением сотрудников сертификатами для работы в корпоратиной сети VPN в режиме самоизоляции. Оказалась, что часть сотрудников не имеет токенов. Было принято решение обеспечить их защищенными контейнерами PKCS#12, благо приложение CAFL63 это позволяет. Сначала для таких сотрудников делаем запросы PKCS#10 с указанием типа СКЗИ «OpenSSL», затем выпускаем сертификат и упаковываем его в PKCS12. Для этого на странице «Сертификаты» выбираем нужный сертификат, нажимаем правую кнопку мыши и выбираем пункт «Экспорт в PKCS#12»:
Для того, чтобы убедиться, что с контейнером все в порядке, воспользуемся утилитой cryptoarmpkcs:
Теперь можно отправлять сотрудникам выпущенные сертификаты. Кому-то отправляются просто файлы с сертификатами (это владельцы токенов, те, кто присылал запросы), либо контейнеры PKCS#12. Во втором случае каждому сотруднику по телефону сообщается пароль к контейнеру. Этим сотрудникам достаточно поправить конфигурационный файл VPN, правильно прописав путь к контейнеру.
Что касается владельцев токена, то им необходимо было еще импортировать сертификат на свой токен. Для этого они использовали все ту же утилиту cryptoarmpkcs:
Теперь минимальные правки конфига VPN (могла измениться метка сертификата на токене) и все, корпоративная сеть VPN в рабочем состоянии.
Счастливый конец
И тут до меня дошло, а зачем людям привозить токены мне или мне посылать гонца за ними. И я отправляю письмо следующего содержания:
Ответ приходит на следующий день:
Я тут же отправляю ссылку на утилиту cryptoarmpkcs:
Перед созданием запросов на сертификаты я им рекомендовал почистить токены:
Затем по электронной почте были присланы запросы на сертификаты в формате PKCS#10 и я выпустил сертификаты, которые отправил в адрес:
И тут наступил приятный момент:
А было еще и такое письмо:
И вот после этого родилась эта статья.
Дистрибутивы приложения CAFL63 для платформ Linux и MS Windows можно найти
Дистрибутивы утилиты cryptoarmpkcs, включая платформу Android, находятся
TheGodfather
Да знаете, мне как-то пофиг на персональные данные, но куда более интересный вопрос — зачем все это вообще? Ну т.е. я как сотрудник по идее вообще не должен заботиться о том, какие там у кого токены. Единственное исключение, возможно — если ваша политика разрешает подключаться к рабочему VPN с персонального устройства, да и то сомнительно. У каждого сотрудника и так должен быть свой рабочий логин\пароль (ну там LDAP какой-нибудь же у вас развернут, правда?) и это — единственное, что вы должны требовать для подключения к рабочей сети. Например, как это у нас организовано (очень крупная американская компания, но не FAANG) — доступ к VPN только с рабочих ноутбуков, на каждом ноуте предостановлена утилита от Cisco, из дома запускаешь утилиту, вводишь свой логин-пароль — и она подключает тебя к VPN. Все. Сертификаты, ручные активности, емейлы, прости госсподи — зачем это все?
saipr Автор
Надо спросить мировое сообщество зачем вообще придумали PKI (Public Key Infrastructure), сертификаты, электронную подпись, когда оказывается есть "логин-пароль".
Поэтому и придумали, что с логин-паролем могут быть проблемы.
Я не думаю, что это именно так. Если что-то случится неприятное (не дай бог, конечно), то вы будете говорить совсем другое: я не давал права публиковать или использовать мои персональные данные, это не я ставил электронную подпись под договором дарения и т.д. Почитайте материалы на Хабре.
TheGodfather
Запилите статью, как вы без паролей живете? И логин в учетную запись операционной системы без пароля, и почта без пароля, и логин в веб-интерфейс системы контроля версий (не путать с git push) без пароля, логин в любую другую софтину Х без пароля? Ключи хороши там, где они работают, но «мировое сообщество» еще очень далеко от отказа от паролей в принципе. И если у вас получилось (в чем я очень сомневаюсь) настроить работу в отдельно взятой компании целиком на ключах, это будет на порядок интереснее почитать, чем про ручную пересылку ключей по емейлу.
saipr Автор
Легко, имею токен PKCS#11 с сертификатом и без всякого пароля хожу на сайт ГОСУСЛУГ, например. Так что многие и многие живут без пароля, хотя пока он преобладает сегодня. А для входа в ОС есть двухфакторная авторизация: первый рубеж защиты, да, пароль, но второй и надежный предъявление сертификата на токене.
А вообще-то статья про другое, но, если настаиваете, то напишу.
BugM
Без паролей живем хорошо. SSO и отпечаток пальца на ноуте для логина в ОС. Весь корпоративный софт должен SSO понимать. Да-да весь не понимающий пора уже заменять на нормальный.
Пароль не вводил наверно никогда. А не вру. С мокрыми руками вводить пришлось разок. Отпечаток никак не читался.
TheGodfather
SSO что принимает? Нигде и никогда повторного подтверждения не требует? Вот у нас на работе SSO как бы есть, но на доброй половине корпоративных ресурсов все равно логин-пароль требуется (равно как если заходишь в на страничку в инкогнито-режиме). А десктопных приложений, работающих с SSO так я вообще не видел.
Как вы логинились самый первый раз на ПК, чтобы отпечаток установить?
saipr Автор
Все что потребовалось от нас это закомментировать строку с родной аутентификаций и добавить строку модулем pam_p11_gost.
KodyWiremane
Кстати, отсутствие https на сайте «Лисси» как-то объясняется?
saipr Автор
Никак. А надо?
KodyWiremane
Ну, с моей точки зрения, распространено мнение, что использование HTTPS является желательным (при работе с чувствительной информацией — обязательным), т. к. позволяет в определённой мере гарантировать идентичность веб-сервера, радикально снижая возможность проведения атак типа «человек посередине».
Вот на lissi.ru я вижу некую форму авторизации, данные из которой теоретически могут быть перехвачены. В распространённом случае использования человеком одних данных для входа на многие сайты проблема невольно может выйти за пределы lissi.ru.
Или скачивание драйверов по http. Даже если используются цифровые подписи, подписанный исполняемый файл может просто не дойти до пользователя, подменённый неподписанным зловредом. Дальнейшее развитие событий зависит от подготовленности и внимательности пользователя.
Ну и если используются подписи, то цепочка доверия должна опираться на сущность (скажем, сертификат), полученную по доверенному каналу (физически либо https, допустим).
С этой позиции, использование компанией, предлагающей криптографические решения, незащищённого соединения выглядит странно. Вот мне и интересно, как ситуацию видят те, кто считает её нормальной. Я экспертом ИБ не являюсь, в статьях про HTTPS обычно просто упоминают «защищает от MitM», без статистики. Так что пример «Лисси» для меня любопытен. Не скажу, что пример уникальный, но на Хабре представлен не каждый.
saipr Автор
Что тут скажешь? Естественно вы правы. Но есть другой интересны вопрос:- Какой https поднимать? ГОСТ-ый? Но далеко не у всех, а вернее у абсолютного большинства нет поддержки ГОСТ-ого TLS. Тогда не ГОСТ-ый, но мы же в России живем, а еже сами разрабатываем криптосредства. Дилемма, философская, но не техническая, конечно.
KodyWiremane
На мой взгляд, в идеале веб-сервер должен поддерживать международные криптоалгоритмы и ГОСТ, с предпочтением ГОСТ. Т. о. массовый потребитель получит как минимум защиту на общемировом уровне, а патриотичное ПО сможет обеспечить ещё и идеологически верное шифрование. Я не в курсе, как регистрируются алгоритмы для применения в TLS, но, очевидно, такая регистрация должна быть произведена, и должно быть разработано соответствующее клиентское ПО (браузеры), умеющее в ГОСТ, +опции «предпочитать ГОСТ», «блокировать если не ГОСТ» и т. п. Такое ПО может стать или не стать массовым, но как минимум гос. нишу оно может занять.
У меня не получилось.В то же время, по-моему, не стоит отказываться от «международного» HTTPS, если не получается ограничить всё ГОСТ-ом. Сколько проектов было загублено подходом «если не идеально, то никак».
Кстати, по ссылке написано:
saipr Автор
Я 20 лет за это ратую, но воз и ныне там.
Я уж не помню почему отключили, но после самоизоляции восстановим
KodyWiremane
А, ну, если это временное явление, то, в общем-то, вопрос мой снимается.
Тут могу только пожелать удачи. Состязание идей выявляет лучшую.Dr_Sigmund
Значит, он у вас там не настроен. Автоматическая аутентификация в веб-интерфейсах на основе Kerberos или NTLM — вещь весьма популярная.
1С пойдёт? Она умеет использовать интегрированную аутентификацию Windows. И куча другого софта умеет.
Например, при помощи Kerberos с PKINIT и носителя ключа.
saipr Автор
Что и требовалось доказать
Dr_Sigmund
Справедливости ради, иногда организовать SSO довольно трудно. Например, у нас в конторе недавно внедрили такую штуку, как Thingworx, и встала задача настройки на нём SSO. Лучше всего было бы использовать Kerberos, Thingworx является серверным приложением под Tomcat, а Tomcat сам умеет поддерживать Kerberos, но Thingworx не использует подсистему аутентификации Tomcat, у него всё своё, и единственный доступный метод SSO — это SAML. У нас есть свой SAML-провайдер, но документация у Thingworx настолько мутная и недостаточная, что чтобы настроить SAML, мне пришлось возиться с декомпиляцией Java-классов Thingworx и неделю ковыряться отладчиком на специально развёрнутом тестовом сервере. Разобрался, работает.
saipr Автор
А никто и не говорил, что будет легко.
Dr_Sigmund
Ну иногда-то легко. Настройка SSO на новом веб-сервере в условиях развёрнутой AD часто сводится к прописыванию его SPN, что делается одной командой.
BugM
Пользователя залогиненного на ноуте.
Нигде и никогда не требует.
Вам пора вкладываться в обновление инфраструктуры. Декстоп и SSO прямо созданы друг для друга. Да и веб сейчас не очень сложно делается.
Проблемы только с телефонами сейчас есть. Решаемые, но сложнее чем во всем остальном.
Первый раз с паролем от хелпдекса. Но то один раз. Нет цели сделать 0 раз вообще. Есть цель 0 вводов паролей за типичный рабочий день.
SpiritOfVox
Пароль у вас можно украсть и заходить откуда угодно в любое время. Пароль от токена тоже можно украсть, но сам токен удалённо не украсть (если админ не совсем плох) и поэтому доступ возможен только когда вы вставили ключ. Помимо этого с плохим паролем вы через всю сеть тащите плохо зашифрованное соединение, а с токеном плохой пароль только на нём. Само соединение с хорошим ключом из токена. Ну и всё в таком духе. Понятное дело использовать для доступа в корпоративную сеть государственные ключи это идиотизм и те кто так делают будут когда нибудь наказаны.
Dr_Sigmund
Многие виды токенов являются только носителями ключей, криптоалгоритмы выполняются основным процессором компьютера, поэтому теоретически можно украсть и ключ с токена. Есть небольшое количество токенов, которые выполняют криптоалгоритмы самостоятельно, и ключи на них могут быть действительно неизвлекаемыми — ключ генерируется внутри токена и никогда его не покидает.
В принципе, почему бы нет? Самое плохое, что может устроить выдавший их УЦ — это внезапно отозвать сертификат.
saipr Автор
Если говорить о российских криптоалгоритмах, то часто так и происходит. Берется токен и его фактически используют как обычную флэшку с PIN-кодом (например, ruTokenLight). Эти злоупотребляют, как правило, CSP на Windows. При чем, когда такой "ключик" выдается заявителю, то ему об этом не говорят. И порой они искренне считают, что у неизвлекаемый ключ на токене PKCS#11. Да и те, кто генерирует ключевую пару через CSP, порой этого не знают.
Другая проблема токенов, это подная реализация механизмов в соответствии с PKCS v.2.40, ее в полном объеме тяжело найти на токенах:
Список механизмов, поддерживаемых токеном LS11SW2016
Mechanism #0
Mechanism: CKM_GOSTR3410_KEY_PAIR_GEN (0x1200)
Key Size: 256-256
Flags: 0x10000 ( CKF_GENERATE_KEY_PAIR )
Mechanism #1
Mechanism: CKM_GOSTR3410_512_KEY_PAIR_GEN (0xD4321005)
Key Size: 512-512
Flags: 0x10000 ( CKF_GENERATE_KEY_PAIR )
Mechanism #2
Mechanism: CKM_GOSTR3410 (0x1201)
Key Size: 256-256
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #3
Mechanism: CKM_GOSTR3410_512 (0xD4321006)
Key Size: 512-512
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #4
Mechanism: CKM_GOSTR3410_WITH_GOSTR3411 (0x1202)
Key Size: 256-256
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #5
Mechanism: CKM_GOSTR3410_WITH_GOSTR3411_12_256 (0xD4321008)
Key Size: 256-256
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #6
Mechanism: CKM_GOSTR3410_WITH_GOSTR3411_12_512 (0xD4321009)
Key Size: 512-512
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #7
Mechanism: CKM_GOSTR3410_DERIVE (0x1204)
Key Size: 256-256
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #8
Mechanism: CKM_GOSTR3410_12_DERIVE (0xD4321007)
Key Size: 512-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #9
Mechanism: 0xD4321045
Key Size: 256-256
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #10
Mechanism: 0xD4321046
Key Size: 512-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #11
Mechanism: CKM_KDF_4357 (0xD4321025)
Key Size: 256-256
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #12
Mechanism: CKM_KDF_GOSTR3411_2012_256 (0xD4321026)
Key Size: 256-256
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #13
Mechanism: CKM_KDF_TREE_GOSTR3411_2012_256 (0xD4321044)
Key Size: 256-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #14
Mechanism: CKM_GOSTR3410_KEY_WRAP (0x1203)
Key Size: 256-256
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #15
Mechanism: CKM_GOSTR3410_PUBLIC_KEY_DERIVE (0xD432100A)
Key Size: 256-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #16
Mechanism: CKM_LISSI_GOSTR3410_PUBLIC_KEY_DERIVE (0xD4321037)
Key Size: 256-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #17
Mechanism: CKM_GOST_GENERIC_SECRET_KEY_GEN (0xD4321049)
Key Size: 32-256
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #18
Mechanism: CKM_GOST_CIPHER_KEY_GEN (0xD4321048)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #19
Mechanism: CKM_GOST_CIPHER_ECB (0xD4321050)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #20
Mechanism: CKM_GOST_CIPHER_CBC (0xD4321051)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #21
Mechanism: CKM_GOST_CIPHER_CTR (0xD4321052)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #22
Mechanism: CKM_GOST_CIPHER_OFB (0xD4321053)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #23
Mechanism: CKM_GOST_CIPHER_CFB (0xD4321054)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #24
Mechanism: CKM_GOST_CIPHER_OMAC (0xD4321055)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #25
Mechanism: CKM_GOST_CIPHER_KEY_WRAP (0xD4321059)
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #26
Mechanism: CKM_GOST_CIPHER_ACPKM_CTR (0xD4321057)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #27
Mechanism: 0xD4321058
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #28
Mechanism: CKM_GOST28147_KEY_GEN (0x1220)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #29
Mechanism: CKM_GOST28147 (0x1222)
Key Size: 32-32
Flags: 0x60300 ( CKF_ENCRYPT|CKF_DECRYPT|CKF_WRAP|CKF_UNWRAP )
Mechanism #30
Mechanism: CKM_GOST28147_KEY_WRAP (0x1224)
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #31
Mechanism: CKM_GOST28147_PKCS8_KEY_WRAP (0xD4321036)
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #32
Mechanism: 0xD432105A
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #33
Mechanism: CKM_GOST28147_ECB (0x1221)
Key Size: 32-32
Flags: 0x60300 ( CKF_ENCRYPT|CKF_DECRYPT|CKF_WRAP|CKF_UNWRAP )
Mechanism #34
Mechanism: CKM_GOST28147_CNT (0xD4321825)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #35
Mechanism: CKM_GOST28147_MAC (0x1223)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #36
Mechanism: CKM_KUZNYECHIK_KEY_GEN (0xD4321019)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #37
Mechanism: CKM_KUZNYECHIK_ECB (0xD432101A)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #38
Mechanism: CKM_KUZNYECHIK_CBC (0xD432101E)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #39
Mechanism: CKM_KUZNYECHIK_CTR (0xD432101B)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #40
Mechanism: CKM_KUZNYECHIK_OFB (0xD432101D)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #41
Mechanism: CKM_KUZNYECHIK_CFB (0xD432101C)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #42
Mechanism: CKM_KUZNYECHIK_OMAC (0xD432101F)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #43
Mechanism: CKM_KUZNYECHIK_KEY_WRAP (0xD4321028)
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #44
Mechanism: CKM_KUZNYECHIK_ACPKM_CTR (0xD4321042)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #45
Mechanism: 0xD4321043
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #46
Mechanism: CKM_MAGMA_KEY_GEN (0xD432102A)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #47
Mechanism: CKM_MAGMA_ECB (0xD4321018)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #48
Mechanism: CKM_MAGMA_CBC (0xD4321023)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #49
Mechanism: CKM_MAGMA_CTR (0xD4321020)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #50
Mechanism: CKM_MAGMA_OFB (0xD4321022)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #51
Mechanism: CKM_MAGMA_CFB (0xD4321021)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #52
Mechanism: CKM_MAGMA_OMAC (0xD4321024)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #53
Mechanism: CKM_MAGMA_KEY_WRAP (0xD4321029)
Key Size: 32-32
Flags: 0x60000 ( CKF_WRAP|CKF_UNWRAP )
Mechanism #54
Mechanism: CKM_MAGMA_ACPKM_CTR (0xD4321040)
Key Size: 32-32
Flags: 0x300 ( CKF_ENCRYPT|CKF_DECRYPT )
Mechanism #55
Mechanism: 0xD4321041
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #56
Mechanism: CKM_GOSTR3411 (0x1210)
Key Size: 0-0
Flags: 0x400 ( CKF_DIGEST )
Mechanism #57
Mechanism: CKM_GOSTR3411_12_256 (0xD4321012)
Key Size: 0-0
Flags: 0x400 ( CKF_DIGEST )
Mechanism #58
Mechanism: CKM_GOSTR3411_12_512 (0xD4321013)
Key Size: 0-0
Flags: 0x400 ( CKF_DIGEST )
Mechanism #59
Mechanism: CKM_GOSTR3411_HMAC (0x1211)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #60
Mechanism: CKM_GOSTR3411_12_256_HMAC (0xD4321014)
Key Size: 32-32
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #61
Mechanism: CKM_GOSTR3411_12_512_HMAC (0xD4321015)
Key Size: 64-64
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #62
Mechanism: CKM_PKCS5_PBKD2 (0x3B0)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #63
Mechanism: CKM_PBA_GOSTR3411_WITH_GOSTR3411_HMAC (0xD4321035)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #64
Mechanism: CKM_TLS_GOST_KEY_AND_MAC_DERIVE (0xD4321033)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #65
Mechanism: CKM_TLS_GOST_PRE_MASTER_KEY_GEN (0xD4321031)
Key Size: 32-32
Flags: 0x8000 ( CKF_GENERATE )
Mechanism #66
Mechanism: CKM_TLS_GOST_MASTER_KEY_DERIVE (0xD4321032)
Key Size: 48-48
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #67
Mechanism: CKM_TLS_GOST_PRF (0xD4321030)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #68
Mechanism: CKM_TLS_GOST_PRF_2012_256 (0xD4321016)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #69
Mechanism: CKM_TLS_GOST_PRF_2012_512 (0xD4321017)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #70
Mechanism: CKM_TLS12_MASTER_KEY_DERIVE (0x3E0)
Key Size: 48-48
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #71
Mechanism: CKM_TLS12_KEY_AND_MAC_DERIVE (0x3E1)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #72
Mechanism: CKM_TLS_MAC (0x3E4)
Key Size: 12-48
Flags: 0x2800 ( CKF_SIGN|CKF_VERIFY )
Mechanism #73
Mechanism: CKM_TLS_KDF (0x3E5)
Key Size: 32-48
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #74
Mechanism: CKM_TLS_TREE_GOSTR3411_2012_256 (0xD4321047)
Key Size: 32-32
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #75
Mechanism: CKM_EXTRACT_KEY_FROM_KEY (0x365)
Key Size: 256-512
Flags: 0x80000 ( CKF_DERIVE )
Mechanism #76
Mechanism: CKM_SHA_1 (0x220)
Key Size: 0-0
Flags: 0x400 ( CKF_DIGEST )
Mechanism #77
Mechanism: CKM_MD5 (0x210)
Key Size: 0-0
Flags: 0x400 ( CKF_DIGEST )
Dr_Sigmund
См. колонку для Рутокен ЭЦП. Основное всё вроде есть.
Именно.
saipr Автор
Для работы с электронной подписью все есть.
Над остальным еще предстоит поработать
SpiritOfVox
BugM
Флешка-токен это хуже не придумаешь. Извращается сама идея токена. Лучше уж честно делать файл на ФС. Тогда всем все понятно будет. И безопасность такая же.
Сертификаты для внутренних целей через внешние УЦ тоже абсолютное зло. Зачем кому-то знать что тут у нас внутри? Как выдавать сертификаты по клику на все эти сотни контейнеров? А на одноразовые контейнеры как выдавать? Куча вопросов и везде получается что эффективнее самим делать.
saipr Автор
Все же не такая же. При хранении ключа в ФС компьютера злоумышленник может получить к нему доступ как только получит доступ к компьютеру. А если ключ на флэшке, то еще надо чтобы ее подключили к этому компьютеру.
А второе флэшка-токен всеже делается для того, чтобы ее использовать и на других компьютерах .
Сертификаты выдаются на УЦ и публикуются. Пользователи, по-хорошему, сами должны ставить на свои токены. На УЦ спокойно выдают сертификаты и на сотни и на тысячи токенов
BugM
Будем реалистами. Они подключены примерно всегда. Файл можно использовать на любом числе компьютеров. Даже одновременно.
Пользователь это CI разворачивающая контейнер. Ей бы в апи сходить и получить свой сертификат.
Dr_Sigmund
Справедливости ради, даже файловый контейнер может быть зашифрован, тогда надо ещё пароль контейнера знать.
saipr Автор
Конечно лучше. Именно по этому принципу и строятся программно-аппаратные токены LS11USB2016.
А зачем сертификат крать? Это вещь публичная и доступная всем. Сертификат присутствует в электронной подписи, в подписанном письме и т.д. Получить его нет проблем. Крадут закрытые ключи! А как известно неприступных крепостей не бывает. Вопрос времени. Именно поэтому ограничивают срок действия и самого сертификата и ключей.
Если вы сертификат используете в корпоративных целях, то наверняка вы ничего не платите и вам его выдают. Если вы используете в личныз целях с друзьями, то как-то договариваетесь и используете, например, предложенные приложения в статье для выпуска сертификатов в своих нуждах. Но, если вы пользуетесь государственными ресурсами (ФСС, ФНС, ГОСУЛУГИ и т.д. ), то вам придется заплатить за новый сертификат через год. Сертификат это тот же паспорт, а за получение паспорта мы платим.
Кстати, продление сертификата — это плохая идея, ЗАКРЫТЫЙ КЛЮЧ МОЖЕТ БЫТЬ СКОИПРОМЕТИРОВАН. Надежнее и спокойнее получить новый сертификат с новым ключом, как в истории с паспортом с новой фотографией.
SpiritOfVox
Подавляющее большинство не использует паспорт для прохода через проходную. Работникам выдают удостоверения, карточки, ещё каким-то способом опознают работника. Если для этого постоянно использовать паспорт, то кто-то может не пройти на работу если он у него закончится по сроку, а человек забыл продлить.
saipr Автор
А где в статье написано как строить VPN? В статье речь идет о том как получить сертификат, который мржет использоваться, в частности, в VPN. А все посвящено как создается запрос на сертификат и как по нему выпускается сертификат.
Конечно не используют. Они используют пропуск, который получен на основании паспорта.
Не нужен государственный сертификат для VPN, об этом ни разу в статье не говорилось. И именно для этого, чтобы не ходить, как вы говорите, за государственным сертификатом, и предлагается использовать приложение CAFL63. Но сертификат все равно имеет срок действия!
Dr_Sigmund
Как вам уже правильно заметили, охотиться надо не за сертификатом, а за закрытым ключом. Сертификат — вещь по определению публичная. Более того, на носителе ключей сертификата может и не быть.
Зависит от токена. Есть много токенов (на самом деле, большинство), которые в принципе не умеют самостоятельно выполнять криптоалгоритмы, и для операций, задействующих закрытый ключ, он всегда считывается с токена на компьютер, где в принципе может быть стырен враждебным ПО. Можете посмотреть на сайте КриптоПро, например, какие токены что могут: http://crypto-pro.ru/products/cryptopro-csp
Я не говорю, что это приоритетный подход, или что с этого надо начинать. Но если вдруг у пользователей уже есть выданные внешним УЦ сертификаты, то можно их использовать (конечно, если они подходят по алгоритмам, длине ключей, назначению применения и т.д.).
SpiritOfVox
Для любых нужд имеет смысл покупать только максимально защищённые токены. И использовать токены тоже надо правильно, не превращая хорошее устройство в флешку.
IMHO чужими сертификатами имеет смысл пользоваться только если очень сильно надо. Допустим когда удалённый сотрудник неожиданно оказался в карантине, но у него есть государственный ключ, то это, наверно, приемлемо. Если подготовка шла штатно, то ключики лучше выпускать свои.
Возможен вариант когда вы боитесь не удержать корневые ключи и тогда государственная структура может быть надёжней.
saipr Автор
Золотые слова!
Не надо превращать Токены PKCS#11 во флэшки аля CSP-Микросфт с поддержкой российской криптографии.
Это не тот случай, чтобы было поздно.
amarao
Т.е. вся эта простыня свелась к "openssl". И чем это отличается от self-hosted CA с сертификатами для openvpn? Заодно можно и не гост делать, а более стандартное шифрование.
saipr Автор
Можете рассматривать и так, как GUI к части функционала openssl (в части выпуска сертификатов).
Вообще-то про шифрование здесь никакой речи не идет, даже слово не употреблялось!
Может вы имеете в виду, можно ли создавать сертификаты не только на ГОСТ-ключах? Да, можете попробовать на
![image]()
Dr_Sigmund
За Линукс не скажу, а на Windows для генерации CSR есть стандартная утилита certreq.exe. И через PowerShell наверняка можно сделать, возможно, за исключением криптопровайдеров CNG.
saipr Автор
А на Linux есть NSS. Именно для генерации запросов (CSR или PKCS#10). Но как только речь заходит о генерации на базе российской криптографии, то стандартное становится не стандартным. А если говорить о сертификатах то не всегда их можно выпускать на своем компьютере. Ели мы говорим, например. о ГОСУСЛУГах, то надо обращаться в аккредитованный УЦ.
Dr_Sigmund
Опять же, на Виндах с использованием certreq.exe это сводится к указанию криптопровайдера в .inf-файле описания запроса.
Нет, ну отправка CSR в УЦ и последующее получение и установка сертификатов — это обязательная часть любой нормальной работы с PKI. Этот процесс может быть более или менее удобен и автоматизирован, но избежать его нельзя. Выпуск сертификатов на том же компьютере, где создан запрос — это вырожденный случай для самоподписанных сертификатов.
saipr Автор
Не убавить ни прибавить. Спасибо.