- Dcpcrypt — lazarus
- Gost-crypto-gui
- Инструкция по установке криптопро 4.0
- Ключевые носители и сертификаты
- Лицензия ключ криптопро 4
- Лицензия ключ криптопро 5
- Перенос контейнера с flash-носителя в локальное хранилище пк
- Подпись документов в libreoffice
- Полезные ссылки
- Проверка лицензии
- Просмотр сертификатов
- Работа с криптоконтейнерами
- Удаление сертификатов
- Установка корневых сертификатов
- Установка личных сертификатов
- Установка программного обеспечения для работы с сертификатами
- Установка сертификатов pfx
- Хроники быдлокодера: простейший способ создания ключей для лицензионного по в freepascal & lazarus
Dcpcrypt — lazarus
Я дико извиняюсь, но не могли бы вы мне помочь разобраться с DCPCrypt?
Не могу никак понять, каким образом нужно обращаться с компонентом. Т.е. как прописать ключ, шифровать и расшифровывать. Более 2 часов ломаю голову, не могу понять.
Вроде как прописывать ключ надо через .Init, но получается полная дичь. Например, зашифровал и расшифровал строку, итоговые данные получились разные. Далее сравнивал мою зашифрованную строку с тем, что получил на разных сайтах. Строки различаются.
Пробовал так же сделать через этот код без использования компонента выше. Получаю ошибку identifier not found "Encoder.EncodeBytes". Далее пытался вместо этих двух процедур, где возникала ошибка, вставить другие процедуры и функции. Один раз получилось, но радости это мало принесло: при шифровании строки 123 я получал шифр, но расшифровав, у меня получилась строка 1. Т.е. шифровался только первый символ из строки.
Да, документацию читал к компоненту, не понял ни слова.
Gost-crypto-gui
Формат подписи может настраиваться в графической утилите gostcryptogui, которую мы рассмотрим далее.
Запуск утилиты производится из «Главного меню» — «Администрирование» — «Подпись и шифрование файлов».
Окно программы выглядит следующим образом:
Доступны следующие опции:
- Криптопровайдер;
- Кодировка файлов;
- Авт. проверка подписи;
- Отсоединённая подпись.
Для примера зашифруйте файл, но с использованием другого сертификата, размещённого на ключевом носителе Rutoken.
Выберите необходимый файл:
Затем укажите ваш сертификат:
Зашифрованный файл формируется с тем же именем и расширением .enc.
После этого попробуйте его расшифровать.
Нажмите «Расшифровать файл(ы)», выберите зашифрованный файл, затем сертификат, которым был зашифрован наш файл.
Инструкция по установке криптопро 4.0
Запустите установочный файл CSPSetup_4.0.xxxx.exe
В первом появившемся окне нажмите кнопку «Запустить».
Далее нам сообщают, что мы принимаем условия лицензионного соглашения и устанавливаем программу с временной лицензией на 3 месяца. Нажимаем «Дополнительные опции».
В дополнительных опциях можно выбрать язык (русский, английский) и конфигурацию уровня безопасности (КС1, КС2, КС3). По умолчанию язык — русский, уровень безопасности — КС1 (такие настройки рекомендуется оставить!). В нашем случае необходимо установить КС2, поэтому настройки изменяем.
Нажимаем «Далее».
Принимаем условия лицензионного соглашения, нажимаем «Далее».
Вводим имя пользователя и название организации. Если есть лицензия, то набираем лицензионный ключ. Если лицензии нет, то программа будет работать 3 месяца без лицензионного ключа. Нажимаем «Далее».
Выбираем обычную установку. Нажимаем «Далее».
Выбираем «Зарегистрировать считыватель «Реестр». (Это позволяет хранить закрытый ключ в реестре, необходимость во флешке или рутокене отпадает).
Нажимаем «Установить».
Ждем пока программа установится.
Дальше остается нажать «Готово». КриптоПро установлено.
Ключевые носители и сертификаты
Для работы с ключевыми носителями и сертификатами используется утилита «Ключевые носители и сертификаты», которую мы установили ранее. Найти его можно в «Главном меню» — «Администрирование» — «Ключевые носители и сертификаты».
Окно программы выглядит следующим образом:
В меню «Операции» можно выполнить:
- Ввод лицензии КриптоПро CSP;
- Просмотр лицензии;
- Установка корневых сертификатов;
- Установка списка отозванных сертификатов;
- Просмотр корневых сертификатов;
- Просмотр списков отозванных сертификатов;
- Скопировать контейнер с токена;
- Скопировать контейнер с usb-flash накопителя;
- Скопировать токен из HDIMAGE на токен.
Рассмотрим более подробно копирование контейнера с usb-flash накопителя.
1. Необходимо с RuToken скопировать закрытую часть электронной подписи (ЭП) на usb-flash накопитель, выполнить это необходимо на КриптоПро в ОС Windows.
Инструкция для Windows находится по ссылке.
2. Вставьте usb-flash накопитель в компьютер и запустите утилиту Ключевые носители и сертификаты.
3. Перейдите в меню «Операции» и выберите «Скопировать контейнер с usb-flash накопителя».
4. Появится окно с выбором контейнера. Выберите необходимый контейнер, отметив чекбокс в поле «Выбранный».
5. Задайте имя контейнеру.
6. Выберите контейнер, в который требуется скопировать.
7. Далее потребуется ввести PIN-код контейнеров.
8. Появится окно с успешной привязкой контейнера с сертификата. Сертификат отобразится в «Личном хранилище сертификатов».
Работа по копированию контейнеров с токена или из HDIMAGE имеет схожую логику.
1. Для выбора необходимого контейнера требуется выбрать галочкой необходимый.
2. Следующим этапом необходимо выбрать пункт назначения копирования.
Пользователю предоставляется возможность задать новое имя копируемого контейнера (настоятельно рекомендуем использовать латиницу).
3. Далее выбирается токен или HDIMAGE.
4. После ввода PIN-кодов, в случае успеха, вы увидите сообщение:
В последних версиях token-manager была добавлена возможность консольного запуска утилиты с использованием ряда ключей:
token-manager.py --help
Подсказки по использованию ключей в token-manager: В данной реализации token-manager поддерживает явное указание архитектуры КриптоПро, вместо автоматического.
--amd64 вызов 64-битной версии КриптоПро;
--ia32 вызов 32-битной версии КриптоПро;
--aarch64 вызов aarch64 версии КриптоПро;
--e2k64 вызов e2k64 версии КриптоПро;
--version вывод номера версии token-manager;
--debug-output пробный вызов основных функций утилиты;
--debug-output --amd64 пробный вызов основных функций утилиты для архитектуры amd64;
--debug-output --ia32 пробный вызов основных функций утилиты для архитектуры ia32;
--debug-output --aarch64 пробный вызов основных функций утилиты для архитектуры aarch64;
--debug-output --e2k64 пробный вызов основных функций утилиты для архитектуры e2k64;
Пример вывода версии утилиты:
token-manager.py --version
token-manager версия 2.0
Лицензия ключ криптопро 4
4040A-Q000K-9KAC2-9A6QR-6FCZN
4040Y-Q0000-02Q6T-NFYX9-24Z86
40400-00000-11111-101EB-G2EM0
40400-00000-11111-00NHL-372FM
40400-00000-UKAC8-00PRU-B8HE6
40400-00000-UKAC2-00QP8-MT29G
Лицензия ключ криптопро 5
50500-00120-0Z178-0055H-AMWN1
Перенос контейнера с flash-носителя в локальное хранилище пк
1. Активируем хранилище HDIMAGE:
cpconfig -hardware reader -add HDIMAGE store
Adding new reader:
Nick name: HDIMAGE
Succeeded, code:0x02. Посмотрим, какие контейнеры доступны на флешке:
csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9019 KC1 Release Ver:4.0.9963 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 32114099
\.FLASHbob
OK.
Total: SYS: 0,020 sec USR: 0,080 sec UTC: 0,190 sec
[ErrorCode: 0x00000000]Подпись документов в libreoffice
Для активации подписания документов потребуется установить плагин:
dnf install LibreOffice-plugin-altcsp
Для активации подписи требуется нажать кнопку «Файл». Если меню «Файл» недоступно, нажмите предварительно кнопку, выделенную на скриншоте:
Нажмите кнопку «Электронная подпись»:
Для подписи вам будет предложен выбор сертификата:
Также не забудьте проверить, что для выбранного сертификата у вас установлены все необходимые корневые и отозванные сертификаты. Пример необходимых сертификатов можно проверить командой:
Полезные ссылки
Установка браузера «Спутник»
Установка Сhromium с протоколом TLS
Проверка лицензии
Вывод серийного номера лицензии:
/opt/cprocsp/sbin/amd64/cpconfig -license -view
Ввод номера лицензии:
/opt/cprocsp/sbin/amd64/cpconfig -license -set <серийный_номер>
Просмотр сертификатов
1. Просмотр установленных сертификатов:
certmgr -list
2. Просмотр установленных сертификатов в локальном хранилище uMy:
certmgr -list -store uMy
3. Просмотр сертификатов в хранилище ПК (обычно сюда устанавливаются корневых сертификаты):
$ certmgr -list -store uRoot
4. Просмотр сертификатов в контейнере:
certmgr -list -container '\.Aladdin R.D. JaCarta 00 008df47e71-18ae-49c1-8738-9b4b0944dcd4'
5. Просмотр промежуточных сертификатов:
certmgr -list -store uca
Работа с криптоконтейнерами
1. Проверить наличие доступных контейнеров:
csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
CSP (Type:80) v4.0.9019 KC1 Release Ver:4.0.9963 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 16778675
\.Aladdin R.D. JaCarta 00 008df47e71-18ae-49c1-8738-9b4b0944dcd4
\.FLASHbob
\.HDIMAGEbob
OK.
Total: SYS: 0,010 sec USR: 0,110 sec UTC: 6,240 sec
[ErrorCode: 0x00000000]Имена контейнеров используются для установки личных сертификатов.
- Считыватель HDIMAGE размещается в /var/opt/cprocsp/keys/<имя пользователя>/ т.е в данном случае используется жесткий диск для хранения ключей.
- Считыватель FLASH означает, что используется флешка для хранения приватных ключей.
- Также считывателем может выступать токен.
2. Имена контейнеров могут содержать символы на кириллице, поэтому чтобы корректно отобразить контейнеры используйте следующую команду:
csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
Для дальнейшего использования имен контейнеров содержащих кодировку cp1251, выведем список контейнеров с уникальными именами:
csptest -keyset -enum_cont -fqcn -verifyc -uniq
CSP (Type:80) v4.0.9019 KC1 Release Ver:4.0.9963 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 23397811
\.Aladdin R.D. JaCarta 00 008df47e71-18ae-49c1-8738-9b4b0944dcd4 | \.Aladdin R.D. JaCarta 00 00SCARDJACARTA_6082028344937676CC00E412
OK.
Total: SYS: 0,000 sec USR: 0,110 sec UTC: 6,230 sec
[ErrorCode: 0x00000000]3. Просмотр подробной информации о контейнере:
csptest -keyset -container '\.HDIMAGEbob' -info
4. Перечисление контейнеров пользователя:
csptest -keyset -enum_cont -verifycontext -fqcn
5. Перечисление контейнеров компьютера:
csptest -keyset -enum_cont -verifycontext -fqcn -machinekeys
6. Открыть(проверить) контейнер пользователя:
csptest -keyset -check -cont '\.имя считывателяимя контейнера'
7. Открыть(проверить) контейнер компьютера:
csptest -keyset -check -cont '\.имя считывателяимя контейнера' -machinekeyset
Удаление сертификатов
1. Удалить сертификат из личного хранилища сертификатов
Просмотрите установленные сертификаты:
certmgr -list
Изучите список всех установленных сертификатов (в общем списке отображаются абсолютно все сертификаты).
Для удаления следует выполнить команду в Терминале:
certmgr -delete -store uMy
Если установлено более одного сертификата, то будет предложено указать номер удаляемого сертификата.
2. Удалить сертификаты, установленные в хранилище КриптоПро:
certmgr -delete -store uRoot
Если установлено более одного сертификата, то будет предложено указать номер удаляемого сертификата.
3. Удалить все сертификаты, установленные в хранилище КриптоПро:
certmgr -delete -all -store uRoot
4. Удалить все сертификаты, установленные в хранилище ПК:
certmgr -delete -store mRoot
Установка корневых сертификатов
При установке корневых сертификатов достаточно указать хранилище uRoot. При указании mRoot (при наличии прав администратора) корневой сертификат будет доступен всем пользователям системы.
1. Установка в хранилище КриптоПро:
certmgr -inst -store uRoot -file <название-файла>.cer
2. Установка в хранилище ПК:
certmgr -inst -store mRoot -file <название-файла>cer
3. Установка списка отозванных сертификатов crl:
certmgr -inst -crl -file <название-файла>.crl
Установка личных сертификатов
1. Установка сертификата без привязки к ключам:
certmgr -inst -file cert_bob.cer
2. Установка личного сертификата cert_bob.cer, сертификат при этом попадает в пользовательское хранилище uMy. Приватный ключ находится на флешке.
certmgr -inst -file cert_bob.cer -store uMy -cont '\.FLASHbob'
в команде указывается сертификат cert_bob.cer, который ассоциируется с приватным контейнером \.FLASHbob’
3. Установка сертификата с токена (в конце команды указывается контейнер)
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\.Aladdin R.D. JaCarta 00 008df47e71-18ae-49c1-8738-9b4b0944dcd4'
Установка программного обеспечения для работы с сертификатами
1. Установка средства управления сертификатами token-manager:
yum install token-manager
dnf install token-manager
2. Установка программного обеспечения для подписи файлов gostcrypto.
2.1 Для рабочего стола Mate:
yum install gostcryptogui caja-gostcryptogui
dnf install gostcryptogui caja-gostcryptogui
2.2 Для рабочего стола Cinnamon:
yum install nemo-gostcryptogui.noarch
dnf install nemo-gostcryptogui.noarch
Установка сертификатов pfx
1. Необходимо установить пакет cprocsp-rsa, который находится в составе дистрибутива КриптоПро (linux-amd64).
2. Выполним команду от локального (доменного) пользователя:
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -pfx -pin <пинкод> -file 'путь до pfx'
Цепочка сертификатов будет отображаться в утилите «Ключевые носители и сертификаты» в «Личное хранилище сертификатов».
Хроники быдлокодера: простейший способ создания ключей для лицензионного по в freepascal & lazarus
При создании специфического ПО, которым не будут пользоваться продвинутые хакеры и маньяки-декомпиляторщики, а будут всякие там бухгалтеры, финансисты и прочий планктон, вопрос защиты от нелегального использования в разы упрощается, стоит лишь применить какой-нибудь простейший алгоритм шифрования кодов, ключей и паролей.
Lazarus и свободный компилятор FreePascal имеет встроенные средства для этого, так что программисту не нужно изобретать велосипеды. В самых запущенных случаях можно воспользоваться модулем blowfish, который использует
одноименный алгоритм криптографии
. Но мы пока остановимся на самых простейших средствах.
Итак, как защитить уникальную копию программы?
Необходимо во-первых определить уникальность копий, например, выдавать каждому экземпляру программы уникальный номер, можно привязать к MAC-адресу или ещё куда-нибудь, на ваше усмотрение (чаще всего, программа сама генерирует уникальный номер, по которому затем выдаётся лицензионный код). Во-вторых, нужен ключ, который будет использоваться для шифровки и дешифровки.
Считаю, что ключем может быть e-mail пользователя, который нижайше исправшивает Вашей лицензии.
Включенный в FPC модуль strutils имеет две готовые функции:
function XorEncode(const Key, Source: string): string;
XorDecode(const Key, Source:
string
):
string
;
Названия функций и параметров говорят сами за себя. Внутри они кодируют/декодируют символы из получаемой строки с помощью ключа и создают строку из байтовых значений, полученных в итоге. Всё легко, но для получения нужного кода нужно догадаться о применённом алгоритме (вот сейчас забудьте все, о чем написано выше) и знать ключ шифрования.
Работает это примерно так:
В первом поле — гипотетический уникальный номер программы. Во втором — ключ шифрования, коим мы договорились использовать e-mail (а вы, конечно, выберете любимую цитату из Бродского, но вот беда — она будет записана в коде программы, и любопытный юзер посмотрит, увидит, обо всем догадается и вах!!!, придется шифровать сам код, делать runtume-изменения его и т.д. и т.п.).
Можно использовать сетевой MAC-адрес, правда, он не может служить 146% гарантией неизменности, к тому же пользователь, купив вашу программку, вправе рассчитывать на то, что его экземпляр будет работать в любом месте. Такой способ больше подходит для корпоративных программ, для них как раз привязка к физическому сетевому адресу будет полезной:
Теперь нажимаем «Кодировать» и получаем окончательный код:
Если в ключе изменить всего один символ, при декодировании результат в раскодированной строке будет отличаться от «существенно» до «незаметно», в зависимости от положения измененного симовла в ключе (чем ближе к началу, тем приятнее результат). Правда, для компутера без разницы, это уже будут разные строки, поэтому предлагаемый алгоритм можно успешно использовать в рядовых случаях.
