Симметричное шифрование в 1С

02.06.15

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

Настоящая статья посвящена реализации в 1С симметричного шифрования встроенными механизмами

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

В данной статье рассматривается шифрование строк. Разбираемые алгоритмы применимы к любым значениям, которые возможно преобразовать в строку и обратно. Например, таблицу значений можно преобразовать в строку методом ЗначениеВСтрокуВнутр и методом ЗначениеИзСтрокиВнутр получить обратно таблицу значений.

В 1С есть два встроенных варианта использования шифрования:

1. Использование электронной подписи (асимметричное шифрование) имеет сложный механизм применения - в настоящей статье не рассматривается.

2. Использование запароленного zip-архива (симметричное шифрование) - рассматривается в настоящей статье.

Для анализа использования алгоритма приведу примеры универсальных функций, выполняющих шифрование и дешифровку данных (функции выполняются на сервере):

Функция ПолучитьЗашифрованныеДанные(ДанныеШифрования,КлючШифрования,ИдентификаторДанных = "0") Экспорт
	
	Попытка
		
		Путь = КаталогВременныхФайлов()+"\"+ИдентификаторДанных;
		ПутьФайла = Путь+".txt";
		ПутьАрхива = Путь+".zip";
		ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла);
		ЗаписьТекста.Записать(ДанныеШифрования);
		ЗаписьТекста.Закрыть();
		ЗаписьАрхива = Новый ЗаписьZipФайла(ПутьАрхива,КлючШифрования,,,,МетодШифрованияZIP.AES256);
		ЗаписьАрхива.Добавить(ПутьФайла);
		ЗаписьАрхива.Записать();
		ДвоичныеДанные = Новый ДвоичныеДанные(ПутьАрхива);
		ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9));
		УдалитьФайлы(ПутьФайла);
		УдалитьФайлы(ПутьАрхива);
		Возврат ХранилищеДанных;
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

КонецФункции

Функция ПолучитьРасшифрованныеДанные(ХранилищеДанных,КлючШифрования,ИдентификаторДанных = "0") Экспорт
	
	Попытка
		КаталогСохранения = КаталогВременныхФайлов();
		Путь = КаталогСохранения+"\"+ИдентификаторДанных;
		ПутьАрхива = Путь+".zip";
		ХранилищеДанных.Получить().Записать(ПутьАрхива);
		ЧтениеАрхива = Новый ЧтениеZipФайла(ПутьАрхива,КлючШифрования);
		ЭлементАрхива = ЧтениеАрхива.Элементы[0];
		ЧтениеАрхива.Извлечь(ЭлементАрхива,КаталогСохранения);
		ЧтениеАрхива.Закрыть();
		ПутьФайла = КаталогСохранения+"\"+ЭлементАрхива.Имя;
		ЧтениеТекста = Новый ЧтениеТекста(ПутьФайла);
		Данные = ЧтениеТекста.Прочитать();
		ЧтениеТекста.Закрыть();
		УдалитьФайлы(ПутьАрхива);
		УдалитьФайлы(ПутьФайла);
		Возврат Данные;
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

КонецФункции
 

Функция ПолучитьЗашифрованныеДанные возвращает хранилище значения с зашифрованными двоичными данными.

Параметры функции:

ДанныеШифрования - Строка для зашифровки;

КлючШифрования - Ключ симметричного шифрования (пароль zip-архива);

ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)

Механизм шифрования заключается в следующей последовательности действий:

  1. Шифруемая строка записывается в текстовый файл
  2. Текстовый файл помещается в архив с паролем (метод шифрования можно выбрать, в данном случае используется AES-256)
  3. Записанный архив в зашифрованном виде переводится в двоичные данные
  4. Двоичные данные помещаются в хранилище значения, которое возвращается функцией (в дальнейшем, хранилище значения можно поместить в реквизит какого-либо объекта или регистра и хранить в СУБД до появления необходимости в расшифровке)
  5. Созданные файлы удаляются

Функция ПолучитьРасшифрованныеДанные возвращает расшифрованное строковое значение.

Параметры функции:

ХранилищеДанных -Хранилище значения с зашифрованными данными (значение возвращенное функцией ПолучитьЗашифрованныеДанные);

КлючШифрования - Ключ сииметричного шифрования (пароль zip-архива; такой же, как для функции ПолучитьЗашифрованныеДанные);

ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)

Механизм дешифрования заключается в следующей последовательности действий:

  1. Из зашифрованного хранилища значения извлекаются двоичные данные
  2. Двоичные данные записываются в файл (это должен быть зашифрованный zip-архив)
  3. Из zip-архива извлекается текстовый файл с расшифрованным строковым значением
  4. Из текстового файла считывается расшифрованное строковое значение, которое возвращается данной функцией
  5. Созданные файлы удаляются

Изложил свой опыт работы с симметричным шифрованием в 1С.

Надеюсь, будет кому-нибудь полезен.

Шифрование симметричное шифрование

См. также

Защита ПО и шифрование Программист Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Представляю вам микрорасширение, которое запрещает глобальный поиск по вашей конфигурации.

1 стартмани

09.02.2023    2724    11    aximo    5    

2

Защита ПО и шифрование Программист Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    2142    2    olevlasam    3    

3

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3584    16    keyn5565`    0    

14

Защита ПО и шифрование Программист Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    4470    9    vit59    2    

6

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Работает только в файловом варианте с версии платформы 8.3.22.1368 из-за конструктора ГенераторСлучайныхЧисел, поскольку алгоритм был изменён.

10 стартмани

16.06.2022    12751    106    ZhokhovM    12    

45

Защита ПО и шифрование Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    6144    3    ge_ni    9    

2

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    5105    2    idm80    12    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lex27119 02.06.15 16:02 Сейчас в теме
Нужная статья.
Когда-то мне нужно было сделать шифрование в 1С, голову сломал.
2. karpik666 3856 02.06.15 19:14 Сейчас в теме
3. VaranRX 03.06.15 11:34 Сейчас в теме
Если ключ шифрования в конфе то обходится первым же декомпилятором
4. alex271 368 03.06.15 11:44 Сейчас в теме
(3) VaranRX,
А с чего Вы взяли, что ключ шифрования должен быть в конфигурации или в информационной базе.
Тут есть несколько вариантов реализации:
Например, перед шифрованием (дешифрованием) его можно запросить у пользователя и никуда не сохранять.
А если шифрование (дешифрование) будет происходить в конфигурации постоянно, то ключ можно поместить в параметр сеанса, как вариант.
6. sabretoothed 15.03.19 14:58 Сейчас в теме
5. пользователь 02.04.18 14:54
Сообщение было скрыто модератором.
...
7. sabretoothed 15.03.19 15:34 Сейчас в теме
Если ключ проходит через конфигурацию, то проблем его перехватить и сохранить в базу или в отдельный файл нет.Это защитит от пользователей без административных прав, но от них защитить информацию можно и с помощью ролей.Лучше для таких данных создать отдельную базу с доступом только для определенных лиц, и изолировать её от сети чтобы нельзя было выгрузить из неё данные в общую папку какую-нибудь.Но такое решение может повлечь за собой не возможность сделать какие-то отчеты, и придется задуматься об обмене дополнительных данных, а это может быть не так просто.
8. alex271 368 16.03.19 15:54 Сейчас в теме
(7) Разумеется, конфигурацию можно как угодно переписать. Смысл разработки в том, что ключ появляется в памяти только при вводе пользователем и не хранится, ни в базе, ни в конфигурации. Таким образом, если например, база будет украдена, зашифрованную информацию без отдельного взлома ключа получить не удастся.
Расим; +1 1 Ответить
9. pirnazarov007 15.10.19 11:44 Сейчас в теме
Как сделать чтобы в 1С не Зашифровал уже зашифрованные элементы в симетричном шифрование?
Оставьте свое сообщение