"Набор юного строителя" для реализации внутреннего шифрования и ЭЦП

09.06.17

Разработка - Защита ПО и шифрование

Набор процедур и функций для организации внутрикорпоративного документооборота и согласования.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
"Набор юного строителя" для реализации внутреннего шифрования и ЭЦП.:
.epf 320,81Kb
54
54 Скачать (1 SM) Купить за 1 850 руб.

Как-то я  уже размещал генератор сертификатов для использования со встроенным в 1С Менеджером криптографии. Тема не теряет популярности в среде пользователей и заказчиков и задачи, как правило, не всегда стандартные. Представляю набор процедур и функций на которых можно организовать механизмы ЭЦП и шифрования с использованием строковых RSA ключей. 

Сразу стоит пояснить почему именно RSA. Главное преимущество метода в том, что ключи не привязаны к рабочей станции или серверу, то есть к профилю пользователя опрационной системы. Вторым огромным плюсом является использование всех возможностей СОМ-объектов, где возможности вашего решения ограничиваются исключительно пределами вашей фантазии или извращеной мысли. На этой обработке я тестировал все понравившиеся мне механизмы, которые можно использовать в системе внутрикорпоративного документооборота и согласования.

Что можно встроить из  тест набора:

1. Систему генерации RSA ключей с автоматической записью в базу данных и на носитель.

2. Привязку ключа к носителю.

3. ЭЦП для объектов метаданных и фоновую проверку.

4 . Шифрование данных.

Для последнего пункта достаточно использовать конструкции 

//шифровка
ОбъектШифрования = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider");
ОбъектШифрования.FromXmlString(<открытыйКлюч>);
//преобразование строки для шифрования в двоичный вид
ИсхТекстДвоичный = СтрокаВМассив(<ВходящийТекст>);
ЗашифрованныйТекстДвоичный = ОбъектШифрования.Encrypt(ИсхТекстДвоичный, False);
ЗашифрованныйТекст = ДвоичныеДанныеВBase64(ЗашифрованныйТекстДвоичный);


// расшифровка
ОбъектШифрования = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider");
ОбъектШифрования.FromXmlString(<секретныйКлюч>);

ЗашифрованныйТекстДвоичный = Base64ВДвоичныеДанные(<ВходящийЗашифрованныйТекст>);
РасшифрованныйТекстДвоичный = ОбъектШифрования.Decrypt(ЗашифрованныйТекстДвоичный, False);
//преобразование расшифрованных данных в строку
ВскрытыйТекст = МассивВСтроку(РасшифрованныйТекстДвоичный);

(Функции "СтрокаВМассив" и "МассивВСтроку" используются для подготовки ЭЦП и расположены в модуле обработки). 

А теперь самое интересное, какую можно постороить архитектуру решения:

В базе данных создадим регистр сведений или справочник, где сопоставляем открытые ключи и пользователей, можно установить временные рамки действия ключей и привязки к носителю(н-р серийному номеру). Процедуру генерации ключей отдадим отдельной внешней обработке, которая запишет закрытый ключ на флешку, а все остальные параметры в базу данных. Создаем элементы где будет храниться сигнатура ЭЦП и/или зашифрованные данные и в общем то всё. Остается прописать логику действий и вы обладатель достаточно стойкой криптосистемы. 

Важное замечание: не стоит применять эту и подобные схемы в коммерческих решениях, поскольку использование криптографии регулируется законами РФ.

P.S.: Кстати, в макете обработки лежит Native-компонента StringNative. если хочется поэкспериментировать с синхронным шифрованием, извлекайте и используйте простой код:

//////////////Подключаем//////////////////
КодВозврата=ПодключитьВнешнююКомпоненту(ПутьDLL,"StringsNative",AddInType.Native);
Если КодВозврата Тогда
	СтрокиШифровки = Новый("AddIn.StringsNative.V8Strings");
	СтрокиШифровки.ПодключитьКонтрольНавигационныхСсылок();
Иначе
	//Не удалось подключить ВК StringsNative.dll
КонецЕсли;

////////////////////////////Шифрование/////////////////////
ШифрованнаяСтрока = СтрокиШифровки.ШифроватьСтроку(<ПереданнаяСтрока>,<ПарольСессии>);
////////////////////////////Расшифровка////////////////////
ИсходнаяСтрока = СтрокиШифровки.ДешифроватьСтроку(<ШифрованнаяСтрока>,<ПарольСессии>)
///////////////////////////////////////////////////////////

ЭЦП шифрование

См. также

Документооборот и делопроизводство (СЭД) Типовые Бухгалтер Пользователь Руководитель проекта Платформа 1С v8.3 Управленческий учет Платные (руб)

Организуйте правильный оборот документов на вашем предприятии в 1С. Ведение учета и хранения документов. Управление потоками документации между подразделениями. Работа с договорами в компании. Автоматизация процессов подготовки, согласования и подписания документов. Сократите время и объем ошибок с 1С:ДО!

48500 руб.

19.02.2016    108280    115    5    

93

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    29731    36    49    

69

SALE! 30%

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Бухгалтер Пользователь Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    105817    2463    173    

322

Документооборот и делопроизводство (СЭД) Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Продукт "Апрель Софт: Бухгалтерия позаказного производства, ред. 3.0" предназначен для удобного и оперативного управления процессами производства, отгрузок и снабжения в производственных компаниях. Программный продукт открывает новые функциональные возможности для ведения документооборота.

11400 руб.

18.02.2016    22861    1    1    

4

Перенос данных 1C Документооборот и делопроизводство (СЭД) Учет документов Системный администратор Программист Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Бесшовная интеграция с 1С:Документооборот (КОРП или ПРОФ) - вот что обеспечит Вам и Вашим сотрудникам оперативный доступ и продуктивную работу с документами в учётной системе 1С на базе "1С:Бухгалтерия предприятия 3.0 ПРОФ". Бесшовный обмен и связь позволяют экономить до 60% времени на поиск и согласование первичной документации (актов, счетов-фактур, накладных), не говоря уже о других полезных функциональных возможностях: создании и запуске бизнес-процессов, работе с электронной почтой, штрихкодировании документов и многом другом.

30000 руб.

23.05.2017    55680    35    67    

42

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    45435    65    57    

78

Документооборот и делопроизводство (СЭД) Роли и права Системный администратор Платформа 1С v8.3 1С:Документооборот Управленческий учет Платные (руб)

Внешняя обработка позволит быстро добавить участников в любое количество документов, заменить целиком набор участников или удалить лишь некоторых из них для одного объекта или группы документов.

3000 руб.

23.10.2015    63369    113    25    

127
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. oleg_km 14.06.17 09:55 Сейчас в теме
Про вот это только не забываем:

https://msdn.microsoft.com/ru-ru/library/f17a0e2k(v=vs.110).aspx


Максимальная длина значения параметра RGB:

Размер модуля -2-2 * hLen, где hLen — размер хэша.
2. eskor 98 14.06.17 11:02 Сейчас в теме
(1) Так это же асинхронное шифрование, оно по определению большие объемы не шифрует. А вот шифрануть ключ для синхронного шифрования - самое то.
3. oleg_km 14.06.17 14:16 Сейчас в теме
только: симметричное и асимметричное.
4. eskor 98 14.06.17 16:24 Сейчас в теме
(3) может руки дойдут, соберу в одну обработку пример. У меня работает такая схема уже года три.
Смысл в том, что генерируется случайный набор символов(н-р GUID), он шифрует объект синхронным шифром, затем сам шифруется асинхронно и вклеивается в определенное место объекта. Соответственно, при расшифровке, массив символов разделяется на шифр и кодированный объект, шифр раскодируется закрытым ключом, объект полученным синхронным ключом.
В реальных условиях ключи генерируются на каждый блок, обрезаются спецсимволы, и т.д. и т.п., короче заморочки составляющие коммерческую тайну.
5. Tlrd 03.06.20 13:45 Сейчас в теме
Подскажите, где можно посмотреть пример осуществления подписи с носителя?
6. eskor 98 03.06.20 18:29 Сейчас в теме
(5) Где-то лежит в архиве готовая обработка, но выдать не смогу. Продана под обещание нигде и никому не светить.
Основа та же, что и в публикации. Публичная значительно упрощена.
С другой стороны, степень защиты заключается в комбинации методов конкретным разработчиком.
10. пользователь 21.10.20 08:23
Сообщение было скрыто модератором.
...
7. Tlrd 04.06.20 10:26 Сейчас в теме
Понял.Получилось.
Требовалась незначительная доработка.
Спасибо.
8. ksely 113 10.08.20 13:43 Сейчас в теме
У меня СОМ объект "System.Security.Cryptography.RSACryptoServiceProvider" прекрасно работает в файловом варианте. А при вызове через IIS выдает "Error calling context method (SignHash)". Эксперименты показали, что методы класса RSA работают, а RSACryptoServiceProvider - нет. Похоже, что пользователю, под которым работает радочий процесс IIS, не хватает каких-то прав... Никто не сталкивался?
9. eskor 98 01.10.20 15:25 Сейчас в теме
Насколько я помню, еще и сами библиотеки должны устанавливаться отдельным пакетом на сервер.
Возможно какой-то из NetFramework.
Сам давно не занимался настройкой, есть специально обученные сисадмины :)
11. user1462848 21.10.20 08:27 Сейчас в теме
Доброго времени суток! Уважаемые коллеги, стоит задача по реализации Подписывать документ ЭЦП ФизЛица, кто нибудь сталкивался с подобной задачой? Очень нуждаюсь в совете. Максимум до чего дошел, то это открыл диалог и выбрал ЭЦП дальше темнота, не знаю как достать ФИО субьекта и дату срока действительности. Очень буду благодарен за любую помощь. Как душевно так и материально.
12. antonovintervolga 25 11.12.20 00:21 Сейчас в теме
Для подписи нужно использовать SHA256 вместо SHA1.
Замена ОбъектHash = Новый COMОбъект("System.Security.Cryptography.SHA1CryptoServiceProvider") на ОбъектHash = Новый COMОбъект("System.Security.Cryptography.SHA256CryptoServiceProvider") дает ошибку

"{ВнешняяОбработка.ТестПлатформа.МодульОбъекта(17)}: Ошибка при вызове конструктора (COMОбъект)
ОбъектHash = Новый COMОбъект("System.Security.Cryptography.SHA256CryptoServiceProvider");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса "

Подскажите почему?
13. uno-c 238 09.02.21 23:23 Сейчас в теме
(12) Мимо проходил. У меня так срабатывало:
КрПровайдер = Новый COMОбъект("System.Security.Cryptography.RSACryptoServiceProvider");
КрПровайдер.FromXmlString(ХМЛТекстЗакрытогоКлюча);
SafeArrayBinХешДляПодписи = SafeИзДвоичных(Хеш);
SafeArrayBinПодписьДвоичная = КрПровайдер.SignHash(SafeArrayBinХешДляПодписи, "SHA256");
14. Rustik666 14.09.21 18:21 Сейчас в теме
Добрый день!
Подскажите, есть пример на Python...нужно это сделать в 1с. Можно это сделать с помощью вашей обработки?...

Использование ЭЦП:
• ЭЦП сообщения формируется по телу HTTP-запроса;
• При формировании ЭЦП используется алгоритм RSA/SHA256;
• Информационные сообщения, подписанные электронной цифровой подписью, должны
иметь дополнительный параметр "x-sign" в заголовке HTTP запроса, содержащий ЭЦП
сообщения;

x-sign - это Заголовок запроса, в котором передается подпись запроса,
вычисленная по телу POST-запроса с использованием
приватного ключа мерчанта

Вот пример на Python
data = json.dumps(params)
secret_key='12345'
key = RSA.importKey(open('private_key.pem').read())
h = SHA256.new("{}{}".format(data,secret_key).encode('utf8')) signer =
PKCS1_v1_5.new(key)
signature = signer.sign(h)
x_sign = base64.b64encode(signature)
15. RustikMsc 15.09.21 09:29 Сейчас в теме
Скачал обработку.
Она загружает ключи с расширением urk?
У меня ключи в файлах с расширением pem .... Она с ними не работает?
Оставьте свое сообщение