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

Обработки - Универсальные обработки

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

Как-то я  уже размещал генератор сертификатов для использования со встроенным в 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
КонецЕсли;

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

12

Скачать файлы

Наименование Файл Версия Размер
"Набор юного строителя" для реализации внутреннего шифрования и ЭЦП.:
.epf 320,81Kb
14.06.17
15
.epf 0.0.1 320,81Kb 15 Скачать

См. также

Комментарии
Сортировка: Древо
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 82 14.06.17 11:02 Сейчас в теме
(1) Так это же асинхронное шифрование, оно по определению большие объемы не шифрует. А вот шифрануть ключ для синхронного шифрования - самое то.
3. oleg_km 14.06.17 14:16 Сейчас в теме
только: симметричное и асимметричное.
4. eskor 82 14.06.17 16:24 Сейчас в теме
(3) может руки дойдут, соберу в одну обработку пример. У меня работает такая схема уже года три.
Смысл в том, что генерируется случайный набор символов(н-р GUID), он шифрует объект синхронным шифром, затем сам шифруется асинхронно и вклеивается в определенное место объекта. Соответственно, при расшифровке, массив символов разделяется на шифр и кодированный объект, шифр раскодируется закрытым ключом, объект полученным синхронным ключом.
В реальных условиях ключи генерируются на каждый блок, обрезаются спецсимволы, и т.д. и т.п., короче заморочки составляющие коммерческую тайну.
Оставьте свое сообщение