4 лабораторные работы по шифрованию и хешированию данных средствами 1С

02.11.20

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

Знакомил студентов с шифрованием (и хешированием) данных штатными средства платформы «1С:Предприятие 8». Материалы превратились в четыре лабораторные работы: Шифрование и расшифровка строковых полей справочников модифицированным методом Виженера; Шифрование и расшифровка строковых полей справочников модифицированным методом Виженера с использованием контрольной (хеш) суммы; Метод симметричного шифрования; Использование хеш-суммы для контроля изменения значений справочника.

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

Наименование Файл Версия Размер
Лабораторные работы №1, №2, №3 и №4
.pdf 982,47Kb
2
.pdf 982,47Kb 2 Скачать
Лабораторная работа №1
.pdf 578,98Kb
0
.pdf 578,98Kb Скачать
Лабораторная работа №2
.pdf 369,91Kb
1
.pdf 369,91Kb 1 Скачать
Лабораторная работа №3
.pdf 338,00Kb
0
.pdf 338,00Kb Скачать
Лабораторная работа №4
.pdf 365,10Kb
0
.pdf 365,10Kb Скачать
База 1С с реализованными примерами
.zip 92,29Kb
4
.zip 92,29Kb 4 Скачать

Приложенные pdf-файлы с лабораторными работами  представляют собой описание последовательности действий (с заданием, программным кодом и скриншотами).

 
Лабораторная работа №1. Шифрование и расшифровка строковых полей справочников модифицированным методом Виженера.

 

 
Лабораторная работа №2. Шифрование и расшифровка строковых полей справочников модифицированным методом Виженера с использованием контрольной (хеш) суммы.

 
Лабораторная работа №3. Метод симметричного шифрования.

 
Лабораторная работа №4. Использование хеш-суммы для контроля изменения значений справочника.

Описание работы
Часто в работе пользователей с данными возникает ситуация, когда пользователь хочет быть уверен, что его данные не изменялись другими пользователями. При этом данных бывает очень много и пользователь не может быстро вручную проверить все данные на предмет отсутствия внесения в них несанкционированных изменений (материалы работы базируются на публикации "Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С").

Порядок работы
Подробно о хешировании рассказывалось во второй лабораторной работе. При необходимости вы можете вернуться к ней и изучить основы хеширования. Поэтому уделим внимание самой задаче.
1-й вариант решения поставленной задачи. Допустим, у нас есть справочник товаров и первый пользователь (П1) внесёт в него название товара «Молоко». При использовании встроенной в платформу «1С:Предприятие 8» возможности хеширования алгоритмом SHA1 получим следующее значение хеш-суммы: BA 59 FA C2 3C 06 81 98 FD 5D 01 69 6D DD 0E 0F C0 B9 8D 30. Назовём это значение хеш-суммы как «Первичная хеш-сумма» (ПХС). Если второй пользователь (П2) исправит название, внесенное П1, на «Сыр», то хеш-сумма измененного названия будет равняться значению: 13 2B AF 5D F8 7B 3C 28 BD 25 4D A1 CA 74 D1 56 B3 5C A8 E5. Назовём это значение хеш-суммы как «Текущая хеш-сумма» (ТХС). В результате простого сравнения ПХС и ТХС первый пользователь сможет понять, что текущее название товара отличается от ранее внесенного им названия. Такой способ позволят довольно быстро проанализировать и показать П1 данные, значения которых отличаются от ранее внесённых им.
2-й вариант решения поставленной задачи. Продолжим рассматривать пример, приведенный в 1-м варианте решения поставленной задачи. П2 решает исправить ранее внесённое им название «Сыр» на изначальное название, внесенное П1, и вместо значения «Сыр» он вносит значение «Молоко». Новое значение ТХС будет равняться значению: BA 59 FA C2 3C 06 81 98 FD 5D 01 69 6D DD 0E 0F C0 B9 8D 30. Это значение полностью идентично ПХС. В таком случае, несмотря на то, что в первичное название товара были внесены исправления и затем значение было возвращено в исходное состояние, П1 не сможет относительно быстро узнать какие данные несанкционированное редактировались П2.
Для решения данной задачи (понимания, что кто-то несанкционированно редактировал первичные данные) необходимо дополнить процедуру расчёта хеш-суммы секретной частью. В большинстве случаев для этого используется пароль, который в нашем случае известен только П1. Допустим, П1 перед вводом названия товара «Молоко» вносит только ему известный пароль в значении «KjuT». В таком случае значение ПХС при использовании ранее описанного алгоритма ее формирования примет значение: 8F EB 83 F0 E7 5B 1C C1 93 10 08 DC C9 4F B0 17 2E 79 EE 4D. Как уже было сказано ранее, П2 меняет название на «Сыр», а потом решает исправить внесённое им название на изначальное название, внесенное П1, и вместо значения «Сыр» он вносит значение «Молоко». Новое значение ТХС будет равняться значению: BA 59 FA C2 3C 06 81 98 FD 5D 01 69 6D DD 0E 0F C0 B9 8D 30. Это значение не равно ПХС. В таком случае, П1 сможет относительно оперативно узнать какие данные несанкционированно редактировались другими пользователями.

Ниже приведен программный код, реализованный в данной лабораторной работе:

&НаСервере
Процедура РассчитатьНаСервере(ПарольДляШифрования,ТекущийМетодШифрованияКлиент) Экспорт
	
	//определяем алгоритм шифрования архива
	Если НЕ ТекущийМетодШифрованияКлиент = Неопределено Тогда
		ТекущийМетодШифрования = ХешФункция[ТекущийМетодШифрованияКлиент];
	Иначе
		//по умолчанию такой
		ТекущийМетодШифрования = ХешФункция.SHA1;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Товары.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Товары КАК Товары";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ДанныеДляХешСуммы = ВыборкаДетальныеЗаписи.Ссылка.Наименование;
		
		//записываем в текущий элемент справочника в поле ХешСуммаНаименования с учетом пароля
		ТекОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
		ТекОбъект.ХешСуммаТекущегоНаименования = ЗашифроватьSHA1ШтатнымиСредствами(ДанныеДляХешСуммы,Объект.Пароль,ТекущийМетодШифрования);
		ТекОбъект.Записать();
		
	КонецЦикла;
	
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = "Все элементы справочника были зашифрованы.";
	Сообщение.Сообщить();
	
КонецПроцедуры

&НаКлиенте
Процедура Рассчитать(Команда)
	//проверка на равенство пароля подтверждению
	Если (Объект.Пароль = Объект.Подтверждение) Тогда
		
		//определяем алгоритм шифрования архива
		Если ЗначениеЗаполнено(ТипХешФункции) Тогда
			ТекущийМетодШифрованияКлиент = ТипХешФункции;
		Иначе
			//по умолчанию такой
			ТекущийМетодШифрованияКлиент = Неопределено;
		КонецЕсли;
		
		РассчитатьНаСервере(Объект.Пароль, ТекущийМетодШифрованияКлиент);
	Иначе
		Сообщить("Пароль и подтверждение не совпадают или они пустые!" + Символы.ПС + "Шифрование не выполнено.");
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПроверитьНаСервере(ПарольДляРасшифровки,ТекущийМетодШифрованияКлиент)
	
	//определяем алгоритм шифрования архива
	Если НЕ ТекущийМетодШифрованияКлиент = Неопределено Тогда
		ТекущийМетодШифрования = ХешФункция[ТекущийМетодШифрованияКлиент];
	Иначе
		//по умолчанию такой
		ТекущийМетодШифрования = ХешФункция.SHA1;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Товары.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Товары КАК Товары";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ДанныеДляХешСуммы = ВыборкаДетальныеЗаписи.Ссылка.Наименование;
		ХешСуммаТекущегоНаименования = ЗашифроватьSHA1ШтатнымиСредствами(ДанныеДляХешСуммы,Объект.Пароль,ТекущийМетодШифрования);			
		
		Если ХешСуммаТекущегоНаименования = ВыборкаДетальныеЗаписи.Ссылка.ХешСуммаТекущегоНаименования Тогда
			//значит оба наименования идентичны
		Иначе
			Сообщить("Наименование " + СокрЛП(ВыборкаДетальныеЗаписи.Ссылка) + " отличается от ранее указанного");
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура Проверить(Команда)
	
	//определяем алгоритм шифрования архива
	Если ЗначениеЗаполнено(ТипХешФункции) Тогда
		ТекущийМетодШифрованияКлиент = ТипХешФункции;
	Иначе
		//по умолчанию такой
		ТекущийМетодШифрованияКлиент = Неопределено;
	КонецЕсли;
	
	ПроверитьНаСервере(Объект.Пароль,ТекущийМетодШифрованияКлиент);
КонецПроцедуры

Функция ЗашифроватьSHA1ШтатнымиСредствами(СтрокаТекст,СтрокаКлюч,ТекущийМетодШифрования) Экспорт
	
	СтрокаНули = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
	СтрокаОПАД = "5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c";
	СтрокаИПАД = "36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636";
	
	К = ПолучитьДвоичныеДанныеИзСтроки(СтрокаКлюч);
		
	К = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(К);
	Нули = ПолучитьБуферДвоичныхДанныхИзHexСтроки(СтрокаНули);      
	Нули.ЗаписатьПобитовоеИли(0,К);             
	Шаг1 = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Нули);
	
	ИПАД = ПолучитьБуферДвоичныхДанныхИзHexСтроки(СтрокаИПАД);
	БуферШаг1 = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Шаг1);
	ИПАД.ЗаписатьПобитовоеИсключительноеИли(0,БуферШаг1);
	Шаг2 = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ипад);
	
	БуферШаг2 = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Шаг2);
	
	БуферТекст = ПолучитьБуферДвоичныхДанныхИзСтроки(СтрокаТекст);
		
	БуферШаг3 = БуферШаг2.Соединить(БуферТекст);
	Шаг3 = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферШаг3);
	
	ХД = Новый ХешированиеДанных(ТекущийМетодШифрования);
	ХД.Добавить(Шаг3);
	Шаг4 = ХД.ХешСумма;
	
	ОПАД = ПолучитьБуферДвоичныхДанныхИзHexСтроки(СтрокаОПАД);
	БуферШаг1 = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Шаг1);
	ОПАД.ЗаписатьПобитовоеИсключительноеИли(0,БуферШаг1);
	Шаг5 = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ОПАД);
	
	БуферШаг4 = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Шаг4);
	БуферШаг5 = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Шаг5);
	БуферШаг6 = БуферШаг5.Соединить(БуферШаг4);
	Шаг6 = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферШаг6);
	
	ХД = Новый ХешированиеДанных(ТекущийМетодШифрования);
	ХД.Добавить(Шаг6);
	Шаг7 = ХД.ХешСумма;
	
	Возврат НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Шаг7));
	
КонецФункции

 

 

К публикации приложена база 1С, в которой реализованы все четыре лабораторные работы. Конфигурация должна работать на любой платформе  более-менее современной платформе «1С:Предприятие 8» (режим совместимости специально установил как «Версия 8.3.10»). Разработка и тестирование осуществлялись на базе учебной платформы «1С:Предприятие 8.3, учебная версия» (8.3.16.1224).

Шифрование хеш-сумма метод Виженера симметричное шифрование

См. также

Запрет глобального поиска в конфигурации

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

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

1 стартмани

09.02.2023    2226    9    aximo    4    

2

Как защитить pdf файл

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

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

2 стартмани

30.01.2023    1662    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

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

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

1 стартмани

04.12.2022    2990    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

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

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

2 стартмани

31.08.2022    3834    7    vit59    2    

6

Обфускатор байт-кода

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

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

10 стартмани

16.06.2022    10317    80    ZhokhovM    12    

40

Как уберечь конструкторскую документацию от воровства конкурентами?

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

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

2 стартмани

09.03.2022    5657    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

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

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

1 стартмани

27.12.2021    4559    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4670 02.11.20 08:10 Сейчас в теме
Никогда не сталкивались с алгоритмом CRC32-CCITT? Весь интернет облазил, нашёл только одно упоминание.
https://qna.habr.com/q/708197

В 1С платформе реализован алгоритм CRC32B, на php он тоже есть. Где министерские из минстроя высосали CRC32-CCITT, ума не приложу.
Кроме того, Требования дополнены нормой, в соответствии с которой в случае представления документов в электронном виде...... документа, а также контрольной суммы файла, вычисленной как хэш-функция по алгоритму расчета контрольной суммы CRC32-CCITT.
2. delta 652 02.11.20 09:53 Сейчас в теме
(1) К сожалению, тоже ничего не слышал про такой алгоритм :-(
Может, это "секретный" алгоритм, который должны знать только приближенные к Минстрою ;-)
Оставьте свое сообщение