Блокчейн в базе 1С

18.06.20

Разработка - Математика и алгоритмы

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Пример обработки для генерации
.epf 7,87Kb
32
32 Скачать (1 SM) Купить за 1 850 руб.
Пример обработки для контроля
.epf 7,52Kb
31
31 Скачать (1 SM) Купить за 1 850 руб.

В этой статье описывается преимущественно техническая сторона дела. Здесь в тексте много исходного кода на языке 1С. Если вам нужно популярное описание, без программного кода, тогда вам сюда: 

//infostart.ru/public/1114877/

 

Шаг 1. Создадим документ Блокчейн

Цепочку блоков надо где-то хранить. Для простоты я выбрал объект метаданных "Документ". Вобще говоря, хранить цепочку можно и вне базы, хоть в текстовом файле. Также можно использовать справочник или регистр сведений. Я выбрал документ отчасти произвольно, отчасти потому, что в нем есть дата, а она может в дальнейшем пригодиться. Что бы это ни было, нам нужны четыре (всего лишь, впрочем, можно и три) реквизита.

КонтролируемыйДокумент, как можно догадаться - ссылка на документ любого вида. КлючНачальный, ХешДокумента и КлючКонечный - строки неограниченной длины (можно задать длину 64).

Шаг 2. Сделаем обработку генерации цепочки блоков.

Найдем последний элемент цепочки. Я сделал это так:

Функция ПолучитьПоследнийБлок()
	запрос=новый запрос;
	запрос.Текст=
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Блокчейн.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.Блокчейн КАК Блокчейн
	|
	|УПОРЯДОЧИТЬ ПО
	|	Блокчейн.Номер УБЫВ";
	выб=запрос.Выполнить().Выбрать();
	если выб.Следующий() тогда
		возврат выб.ссылка;
	иначе
		возврат неопределено;
	конецесли;
КонецФункции	

Запомним конечный ключ последнего блока, он станет начальным ключом первого созданного нами блока.

	ПоследнийБлок=ПолучитьПоследнийБлок();
	если ПоследнийБлок=неопределено тогда
		КлючНачальный="";
	иначе
		КлючНачальный=ПоследнийБлок.КлючКонечный;
	конецесли;

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

	запрос=новый запрос;
	текстзапроса=
	"ВЫБРАТЬ
	|	Док.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.<вид> КАК Док
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.Блокчейн КАК Блокчейн
	|		ПО Док.Ссылка = Блокчейн.КонтролируемыйДокумент
	|ГДЕ
	|	Док.Проведен
	|	И Блокчейн.Ссылка ЕСТЬ NULL";

Строка <вид> в тексте запроса в дальнейшем заменяется на конкретный вид документа.

Обработаем документы. Я разместил в обработке дерево значений для настройки списка документов, которые мы будем включать в блокчейн, а также списка их реквизитов.

А вот собственно сама генерация цепочки блоков:

	видыдокументов=настройка.ПолучитьЭлементы();
	для каждого вид из видыдокументов цикл
		если вид.пометка тогда
			запрос.Текст=стрзаменить(текстзапроса,"<вид>",вид.имя);
			выб=запрос.Выполнить().Выбрать();
			пока выб.Следующий() цикл
				новблок=документы.Блокчейн.СоздатьДокумент();
				новблок.Дата=текущаядата();
				новблок.КонтролируемыйДокумент=выб.ссылка;
				новблок.ХешДокумента=ПолучитьХешДокумента(выб.ссылка);
				новблок.КлючНачальный=КлючНачальный;
				новблок.КлючКонечный=ПолучитьКонечныйКлюч(КлючНачальный,новблок.ХешДокумента);
				новблок.Записать();
				КлючНачальный=новблок.КлючКонечный;
			конеццикла;
		конецесли;
	конеццикла;

Функция ПолучитьХэшДокумента() - банальна, но я ее приведу.

Функция ПолучитьДокументСтрокой(ссылка)
	рез="";
	видд=ссылка.метаданные().имя;
	нвид=неопределено;
	ветка=настройка.ПолучитьЭлементы();
	для каждого вид из ветка цикл
		если вид.имя=видд тогда
			нвид=вид;
			прервать;
		конецесли;	
	конеццикла;
	если не нвид=неопределено тогда
		реквизиты=нвид.ПолучитьЭлементы();
		для каждого рек из реквизиты цикл
			если рек.пометка тогда
				поз=стрнайти(рек.имя,".");
				если поз=0 тогда
					рез=рез+строка(ссылка[рек.имя]);
				иначе
					имятч=лев(рек.имя,поз-1);
					имярек=сред(рек.имя,поз+1);
					для каждого стр из ссылка[имятч] цикл
						рез=рез+строка(стр[имярек]);
					конеццикла;
				конецесли;
			конецесли;
		конеццикла;
	конецесли;
	возврат рез;                
КонецФункции


Функция ПолучитьХешДокумента(ссылка)
	хд=новый ХешированиеДанных(ХешФункция.SHA256);
	хд.Добавить(ПолучитьДокументСтрокой(ссылка));
	рез=строка(хд.ХешСумма);
	рез=стрзаменить(рез," ","");
	возврат рез;
КонецФункции	

Строковое представление документа следовало бы сделать более изощренным и включить в него ИД ссылок. Если будете делать рабочую версию, доделайте функцию ПолучитьДокументСтрокой(). 

Чуть более интересна функция ПолучитьКонечныйКлюч(). Собственно здесь и кроется сама суть технологии.

Функция HEX(знач знч)
   рез= "";
   Пока знч > 0 Цикл
      рез = Сред("0123456789ABCDEF", знч%16+1,1) + рез;
      знч = Цел(знч/16) ;
   КонецЦикла;
   Возврат рез;
КонецФункции

Функция ПолучитьКонечныйКлюч(КлючНачальный,хеш)
	нули="00000000000000000000000000000000000000000000";
	нули=лев(нули,сложность);
	рез="";
	сч=0;
	пока истина цикл
		хд=новый ХешированиеДанных(ХешФункция.SHA256);
		рез=HEX(сч);
		хд.Добавить(КлючНачальный+хеш+рез);
		стр=стрзаменить(хд.ХешСумма," ","");
		если сложность=0 тогда
			прервать;
		иначеесли лев(стр,сложность)=нули тогда
			прервать;
		конецесли;
		сч=сч+1;
	конеццикла;	
	возврат рез;
КонецФункции	

Я подбираю значение конечного ключа до тех пор, пока ключ начальный, хэш документа и ключ конечный в сумме не дадут некий "красивый" хеш. Красивым считается хеш, который содержит в начале некоторое количество нулей. Количество нулей определяет сложность нахождения красивого хеша.

Полностью процедура генерации цепочки блоков выглядит так:

Процедура ЗапускНаСервере()
	ПоследнийБлок=ПолучитьПоследнийБлок();
	если ПоследнийБлок=неопределено тогда
		КлючНачальный="";
	иначе
		КлючНачальный=ПоследнийБлок.КлючКонечный;
	конецесли;
	
	запрос=новый запрос;
	текстзапроса=
	"ВЫБРАТЬ
	|	Док.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.<вид> КАК Док
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.Блокчейн КАК Блокчейн
	|		ПО Док.Ссылка = Блокчейн.КонтролируемыйДокумент
	|ГДЕ
	|	Док.Проведен
	|	И Блокчейн.Ссылка ЕСТЬ NULL";
	видыдокументов=настройка.ПолучитьЭлементы();
	для каждого вид из видыдокументов цикл
		если вид.пометка тогда
			запрос.Текст=стрзаменить(текстзапроса,"<вид>",вид.имя);
			выб=запрос.Выполнить().Выбрать();
			пока выб.Следующий() цикл
				новблок=документы.Блокчейн.СоздатьДокумент();
				новблок.Дата=текущаядата();
				новблок.КонтролируемыйДокумент=выб.ссылка;
				новблок.ХешДокумента=ПолучитьХешДокумента(выб.ссылка);
				новблок.КлючНачальный=КлючНачальный;
				новблок.КлючКонечный=ПолучитьКонечныйКлюч(КлючНачальный,новблок.ХешДокумента);
				новблок.Записать();
				КлючНачальный=новблок.КлючКонечный;
			конеццикла;
		конецесли;
	конеццикла;
	
КонецПроцедуры

Обработка генерации цепочки блоков готова. Можно позапускать ее в ручном режиме в учебных целях. В рабочем режиме потребуется заставить ее работать постоянно тем или иным способом.

Шаг 3. Сделаем обработку контроля.

С обработкой контроля все еще проще. Я скопировал предыдущую обработку, чтобы иметь тот же интерфейс настройки

и заменил процедуру генерации на процедуру контроля.

Процедура ЗапускНаСервере()
	контрольпройден=истина;
	ключ="";
	выб=документы.Блокчейн.Выбрать();
	пока выб.Следующий() цикл
		если выб.КлючНачальный<>ключ тогда
			сообщить("Блок "+выб.Номер+" нарушена последовательность блоков");
			контрольпройден=ложь;
		иначеесли лев(строка(выб.КонтролируемыйДокумент),1)="<" тогда
			сообщить("Блок "+выб.Номер+" документ удален");
			контрольпройден=ложь;
		иначеесли не выб.КонтролируемыйДокумент.Проведен тогда
			сообщить("Блок "+выб.Номер+" документ распроведен");
			контрольпройден=ложь;
		иначеесли выб.ХешДокумента<>ПолучитьХешДокумента(выб.КонтролируемыйДокумент) тогда
			сообщить("Блок "+выб.Номер+" документ изменен");
			контрольпройден=ложь;
		иначеесли не ЭтоКрасивыйХеш(выб.КлючНачальный,выб.ХешДокумента,выб.КлючКонечный) тогда
			сообщить("Блок "+выб.Номер+" неправильный хеш");
			контрольпройден=ложь;
		конецесли;
		ключ=выб.КлючКонечный;
	конеццикла;
	если контрольпройден тогда
		сообщить("Контроль пройден");
	конецесли;
КонецПроцедуры

Функция ЭтоКрасивыйХеш() - упрощенная вариация того, что мы видели в функции ПолучитьКонечныйКлюч() на предыдущем шаге.

Функция ЭтоКрасивыйХеш(КлючНачальный,хеш,КлючКонечный)
	нули="00000000000000000000000000000000000000000000";
	нули=лев(нули,сложность);
	хд=новый ХешированиеДанных(ХешФункция.SHA256);
	хд.Добавить(КлючНачальный+хеш+КлючКонечный);
	стр=стрзаменить(хд.ХешСумма," ","");
	если сложность=0 тогда
		возврат истина;
	иначе
		возврат лев(стр,сложность)=нули;
	конецесли;
КонецФункции	

 

Что в итоге.

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

Стоит заметить, что возможна также атака путем подмены контролирующей обработки. Но она настолько проста, что ее может визуально контролировать кто угодно. Как вариант можно регулярно скачивать контролирующую обработку (например, с инфостарта ))) ) .

Обработки тестировались на версии 8.3.10.2639.

Update 09.01.2018

Публикация вызвала оживленное и, что еще более важно, плодотворное обсуждение. И я хочу поблагодарить всех, кто принял в нем участие. Ниже я подведу итоги состоявщегося обсуждения и представлю продукт, в котором учтены существенные замечания. 

1. Что это такое?
Блокчейн обычно связывают с криптовалютами. Данная технология не имеет отношения к майнингу криптовалют. Идея состоит в том, чтобы использовать особым образом связанную цепочку блоков (блокчейн) для контроля неизменности документов в информационной базе 1С.

2. Чем это лучше, того что есть сейчас?
В докомпьютерной бухгалтерии существовала (впрочем, она и сейчас существует, только не применяется на практике, по крайней мере в 1С) следующая концепция безопасности. Невозможно предотвратить неправомерные действия, но можно сделать так, что любое такое действие будет быстро выявлено. Современные информационные базы защищены системой прав доступа, паролями и т.д. Но. Когда злоумышленник преодолевает эту защиту, его дествия практически невозможно выявить. Например. Некто меняет в свою пользу в приходном документе количество и цену местами. Условно говоря, вместо 10 пачеки сахара по 1 рублю, ставит 1 по 10. После чего он может спокойно забрать 9 пачек себе. Скорее всего, об этом никто и никогда не узнает. Данная система позволяет создать абсолютную защиту, в том смысле, что любое изменение(удаление) контролируемого документа будет моментально обнаружено. Способов обмануть систему, в том числе путем подмены цепочки, нет. Подробнее см. п.4. 

3. Это - дополнительная нагрузка на информационную базу? Документы будут медленнее проводиться?
Система защиты работает автономно, в процесс проведения документов никак не вмешивается. При построении цепочки происходит однократное чтение нового документа. При контроле чтение каждого документа из цепочки.

4. Зачем нужен "майнинг"?
Майнинг конечно же в кавычках. Дело в том, что в настоящем майнинге основным моментом является поиск т.н. красивого хеша. Такого, который содержит в начале определенное количество нулей. В приведенном выше решении я тоже использовал этот прием. Ищется красивый хеш с количеством нулей, соответствующем заданной пользователем сложности. Моя идея заключалась в том, что злоумышленник всегда будет вынужден догонять. Тогда можно будет подобрать такую сложность, что затраты на подмену цепочки сделают атаку бессмысленной. Тут я несколько увлекся и упустил из виду, что злоумышленник может принять решение о подмене документа и сразу же начать строить альтернативную цепочку. Таким образом, атакующий и система находятся в равном положении. CSiER  обратил внимание на это и предложил отказаться от "майнинга" и дать пользователю возможность визуального контроля цепочки на предмет подмены. Пользователь записывает куда-нибудь ключ последнего на сегодня(или вчера) блока, а на следующий день сверяет свою запись с состоянием цепочки. В таком виде система действительно дает абсолютную защиту и в коммерческом решении я использую этот метод. Но я все равно оставил "майнинг". Дело в том, что если отказаться от него совсем (задать сложность 0), тогда ключ для контроля будет слишком длинным (64 символа). А если задать сложность 2 или 3, тогда ключ будет длиной 2-4 символа, что гораздо удобнее.

Коммерческое решение представляет собой две исходные обработки соединенные в одну и доработанные с учетом п.4. Интерфейс найстройки принципиально не изменился. Добавилась страница состояния, откуда можно переписывать ключи для контроля цепочки.

При выявлении того или иного нарушения, система выдает соответствующее сообщение.

Принципиальным отличием является то, что для хранения цепочки используется не документ информационной базы, а внешний файл XBase. Это дает возможность организовать негласную проверку базы, такую которая будет незаметна в том числе и для ИТ. Более подробное описание можно найти в руководстве пользователя.

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

Update 22.01.2018

Платная версия, которую я представил в прошлый раз, подразумевала не совсем 1С-овский стиль работы. Документ попавший в цепочку блоков уже нельзя было менять совсем. При обнаружении изменения, нужно было вернуть документ в первоначальный вид. Я оставил эту платную версию под новым именем "Докчейн строгий". И в дополнении к ней предлагаю основную версию под названием "Докчейн. Защищенный журнал". В этой версии документы могут изменяться и удаляться. Все такие действия заносятся в ту же цепочку блоков и получается журнал, защищенный от изменений. Чтобы не загромождать данную публикацию, я создал новую:

//infostart.ru/public/728995/

 

 

блокчейн

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3589    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    8127    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3524    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    11264    8    SpaceOfMyHead    19    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4772    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3926    gzharkoj    14    

25

Информационная безопасность Системный администратор Программист Бесплатно (free)

Безопасность данных – обширная тема со множеством задач. О том, как избежать подмены данных и с помощью технологии блокчейн контролировать изменения в системе, на митапе «Безопасность в 1С» рассказал Михаил Калимулин.

13.05.2022    2727    mkalimulin    19    

14

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9117    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 19 18.12.17 11:44 Сейчас в теме
Интересно. Надо будет по ближе посмотреть.

У вас этот "блокчейн" для какой то практической цели используется?

выб=запрос.Выполнить().Выбрать();
если выб.Следующий() тогда

Результат запроса на пустоту правильно определять
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
КонецЕсли;

Что бы не создавать объект Выборка из пустого результата запроса.
for_sale; jif; rpgshnik; +3 Ответить
3. mkalimulin 1235 18.12.17 11:59 Сейчас в теме
(1) Спасибо за замечание!
gigabyte_artur; +1 Ответить
118. azhilichev 214 19.12.17 09:53 Сейчас в теме
(1) Если в любом случае используете выборку из результата запроса Выборка.Выбрать() , то не нужно проверять результат запроса на пустоту (https://its.1c.ru/db/v8std/content/-2145783209/hdoc).
119. TODD22 19 19.12.17 09:56 Сейчас в теме
(118)Так у автора вроде в том запросе про который я писал как раз и имеется проверка на пустоту. Значит запрос может быть пустым. Что не так?
121. azhilichev 214 19.12.17 10:30 Сейчас в теме
(119)
Что бы не создавать объект Выборка из пустого результата запроса.


Если в коде используете Выборка.Следующий() с последующей обработкой результатов выборки (как у автора), то перед этим Результат.Пустая() не обязательно делать. Вместо этого Выборка.Следующий() вернет Ложь, что и будет означать пустой результат.
122. TODD22 19 19.12.17 10:32 Сейчас в теме
(121)
Что бы не создавать объект Выборка из пустого результата запроса.
123. TODD22 19 19.12.17 10:34 Сейчас в теме
(121)
Там написано что проверять результат на пустоту надо с помощью "Пустой()". Что бы не создавать объект выборка из пустого запроса только для того что бы убедится что он пустой.

А если вы уверены что в результате вашего запроса всегда будет результат то тогда проверка "Пустой()" лишняя.

З.Ы. Хотя да... можно трактовать по разному. Если потом есть обработка то можно делать выборку. Но если результат может быть пустым то наверное всё же лучше через оператор Пустой.

З.Ы.Ы. Это я где то в каком то курсе по программированию видел(на спеца вроде). Там объяснялось что результат запроса надо проверять на пустоту, а не делать выборку из пустого результат, если результат может быть пустым. Если результат есть всегда то проверку на пустоту делать не нужно.

Хотя и в типовых очень часто проверку на пустоту делают Выборка.Следующий(). Или Выборка.Количество().
2. mkalimulin 1235 18.12.17 11:58 Сейчас в теме
Пока еще нигде не использовал. Просто решил продемонстрировать саму идею. Проверял на тестовой базе.
4. TODD22 19 18.12.17 11:59 Сейчас в теме
(2)Понятно. Да я вот то же почитал про технологию. Но вот практического применения пока не придумал :)
5. mkalimulin 1235 18.12.17 12:01 Сейчас в теме
Практическое применение в данной публикации. Вы делаете документы практически не изменяемыми.
6. TODD22 19 18.12.17 12:07 Сейчас в теме
(5)
практически не изменяемыми

"практически" или "не изменяемыми" ?

Дело в том что я и так могу в своей базе сделать что то "практически не изменяемым" программными средствами. То есть, обойтись без "блокчейна".
Вопрос в том какие задачи можно решать эффективно с помощью блокчейна и это будет лучше чем другими средствами. А так получается "блокчейн" ради "блокчейна".

На одном из инфостарт эвентов вроде кто то делал доклад про блокчейн в 1С и видимо как то они его используют. Но давно было... наверное уже не найду.
for_sale; 7OH; spenser123; awk; sCHTASS; Morkhe; gradi; +7 Ответить
8. mkalimulin 1235 18.12.17 12:22 Сейчас в теме
(6) "Счастье не в деньгах, а в их количестве".
Вы сделаете. И стоимость успешной атаки на вашу защиту - 1 час работы начинающего.
Стоимость атаки на мою защиту зависит от выбранной сложности и может быть сколь угодно большой.
SunShinne; +1 Ответить
9. TODD22 19 18.12.17 12:23 Сейчас в теме
(8)Если в контексте "атаки" то может так оно и есть. Надо над этим подумать.
Просто я у себя такие риски не рассматриваю. По этому возможно чего то не понимаю...
10. mkalimulin 1235 18.12.17 12:27 Сейчас в теме
(9) Это только кажется паранойей. Я лично наблюдал ситуации. Некто деревня-деревней. Но вот как-то находит способ поменять 10 шт. за 1 руб. на 1 шт. за 10 руб. Откуда только что берется!
11. TODD22 19 18.12.17 12:34 Сейчас в теме
(10)
Я не с критикой :) Я когда сам думал как можно применять вот ничего в голову не приходило. Всё что пришло в голову решалось без блокчейна точно так же или даже проще.
12. mkalimulin 1235 18.12.17 12:37 Сейчас в теме
(11) Так вроде бы это на поверхности. Если первым словом звучит "блокчейн", то вторым "неизменяемость" (ну или "биткоин", для жадных)
7. mkalimulin 1235 18.12.17 12:13 Сейчас в теме
Вот я и делаю программными средствами. И мой способ надежнее всех прочих. Как вы программными средствами исключите атаку со стороны человека с паролем админа?
13. Fragster 1151 18.12.17 12:48 Сейчас в теме
Зачем тут поиск "красивого" хэша? В биткоине понятно - чтобы были "майнеры", а вот тут зачем? Чтобы электричество пожечь?
14. mkalimulin 1235 18.12.17 12:50 Сейчас в теме
(13) Чтобы получить защиту от изменения документов.
15. Fragster 1151 18.12.17 12:57 Сейчас в теме
(14) механизм цепочек эцп хешей + предыдущих подписей вполне с этим справится и без этого
16. mkalimulin 1235 18.12.17 13:00 Сейчас в теме
(15) Здесь нет ЭЦП. Просто база 1С. Самая обычная. Документ проводится, затем попадает в цепочку. И все - с ним уже ничего сделать нельзя. Никаким способом. Даже с паролем админа. Даже если влезть в базу напрямую. Никак. Только за большие деньги.
17. Fragster 1151 18.12.17 13:07 Сейчас в теме
(16) Советую все же почитать, что такое ЭЦП. В данном случае в качестве подписи используется конечный ключ.

>Даже если влезть в базу напрямую. Никак. Только за большие деньги.
в данном случае это заблуждение.
18. mkalimulin 1235 18.12.17 13:11 Сейчас в теме
(17) Смотрите. Вы удаляете что-то из середины цепочки, а потом быстро перестраиваете остаток цепочки. И все в порядке. Процедура контроля ничего не обнаружит. Красивый хеш нужен для того, чтобы исключить быстрое восстановление цепочки.
sulfur17; +1 Ответить
21. vadim1011985 101 18.12.17 13:19 Сейчас в теме
(18) а как тут красивый хэш поможет ?
23. mkalimulin 1235 18.12.17 13:20 Сейчас в теме
(21) Чтобы его найти, требуется время. Или дорогостоящее оборудование... и все равно время.
26. TODD22 19 18.12.17 13:35 Сейчас в теме
(23)
Чтобы его найти, требуется время. Или дорогостоящее оборудование... и все равно время.

В этом и проблема блокчейна. Палить килловаты энергии ради красивого хэша. Наверное должны быть другие менее ресурсозатратные инструменты.
27. mkalimulin 1235 18.12.17 13:41 Сейчас в теме
(26) "Что ничего не стоит, то ничего не стоит". Это - мудрая пословица.
Безопасность не может быть бесплатной. Мое решение хорошо тем, что уровень затрат на безопасность можно гибко подстраивать под конкретную ситуацию. Он может быть как скромным (но вполне достаточным, для того, чтобы у вас со склада не воровали, например, сахар), так и внушительным, таким, где стоимость атаки начинается от миллионов долларов.
29. TODD22 19 18.12.17 13:54 Сейчас в теме
(27)
Безопасность не может быть бесплатной.

Я не столько про "бесплатность" сколько про то что как бы не очень разумно тратить такие энергоресурсы. Хотелось бы более простой(дешёвый) способ генерации не изменяемых блоков.
32. mkalimulin 1235 18.12.17 14:03 Сейчас в теме
(29) Ну какие такие? Представьте - у вас 10 компов работают с 10 часов до 20 часов. Ну добавили вы к ним еще один, который работает круглосуточно. Какие ресурсы? Для большинства случаев - этого будет достаточно.
А если вы хотите действительно серьезной защиты - купите ASIC. Он будет половину времени работать на вашу безопасность, а половину времени майнить. В этом случае, как ни странно, затраты вообще выходят в ноль.
33. mkalimulin 1235 18.12.17 14:06 Сейчас в теме
(29) Я уж не говорю про тот случай, когда вы запустили процедуры в фоновом задании на сервере. И просто дозагрузили ваш сервер, который скорее всего загружен процентов на 10, а энергию потребляет.
127. Steelvan 306 19.12.17 12:07 Сейчас в теме
(27) "... от миллиона рублей".
60. tailer2 18.12.17 15:23 Сейчас в теме
(26) никто не заставляет
нерентабельный майнер отвалился - требование к красоте уменьшилось

сгорят китайские фермы - люди будут майнить на нотбуках
39. Fragster 1151 18.12.17 14:23 Сейчас в теме
(18) ну а так "медленно" перестраиваете остаток цепочки... для "невозможности" подмены вашего способа также недостаточно. Достаточно разделения ответственности механизма подписи (ну, или контроля целостности, блокчеина или как вам будет удобно) (со временем подписи и, возможно, порядковым номером одноразового пароля) и собственно информационной системы.
+ дополнительным плюсом можно сделать "онлайн" подпись, с абсолютной невозможностью изменений задним числом, не дожидаясь попадания данных в "блокчеин"
20. mkalimulin 1235 18.12.17 13:12 Сейчас в теме
(17) Вы не просто так говорите. Вы атаку предложите. За маленькие деньги.
45. Fragster 1151 18.12.17 14:29 Сейчас в теме
(20) учитывая, что весь механизм находится в той же информационной системе - это пшик. Да и сам алгоритм... можно сделать ВК, которая будет считать мд5 хэши на видеокарте в тысячу раз быстрее, чем код в 1с. Стоимость разработки такой компоненты (по алгоритму из статьи) в пределах 5000 рублей.
OnicaIOn; +1 Ответить
47. mkalimulin 1235 18.12.17 14:32 Сейчас в теме
(45) Эту самую ВК вы и подключите в функцию ПолучитьКонечныйКлюч(), если захотите усилить свою защиту.
49. Fragster 1151 18.12.17 14:36 Сейчас в теме
(47) я сейчас совсем про другое говорю... при физическом доступе к ИС мы хоть заранее можем все хэши посчитать, изменить сам алгоритм хэшэй, снизив сложность и пересчитав хэши, сделать так, чтобы отчет показывал всегда "ок" (или наобоброт).
Так что безопасность "дутая".
192. Kosstikk 87 20.12.17 09:22 Сейчас в теме
(16) Сделать можно ) просто цепочка документов после будет считаться не валидной. Т.е. я такой "атакер", захожу в базу и меняю самый первый доукмент.. просто.. дальше система становится сбойной, т.к. вся цепочка - нарушена.. вы восстанавливаете систему, кстати как? )

Т.е. поменять я могу - подменить данные - сложнее, но видимо тоже можно, ну в вашей процедуре даже проверка хэшастрокой в документе соответствия хэшу реальному - не выполняется, т.е. я могу их нагенерить без расчета с учетом сложности.. тип вставить ложные хэши.

Итак, блокчейн - это инструмент для неподменности данных в первую очередь. Но! Для этого требуется децентрализация.
81. SerVer1C 817 18.12.17 17:02 Сейчас в теме
(14) Чтобы получить защиту от изменения документов, давно придумали цифровую подпись. (Только это не защита, а контроль целостности).
84. mkalimulin 1235 18.12.17 17:09 Сейчас в теме
(81) Подпись - это совсем другое. Здесь нет подписей людей. Они не нужны. Да они и не защищают. Люди сговорились и поставили подписи под старым документом. Моя система исключает изменение "задним числом" в принципе.
SunShinne; +1 Ответить
19. пользователь 18.12.17 13:12
Сообщение было скрыто модератором.
...
22. mkalimulin 1235 18.12.17 13:20 Сейчас в теме
Чтобы его найти, требуется время. Или дорогостоящее оборудование.
24. kolya_tlt 88 18.12.17 13:26 Сейчас в теме
решение кажется не законченным, так как простой человек не видит результата, от слова совсем.
25. mkalimulin 1235 18.12.17 13:30 Сейчас в теме
(24) Простой человек может скачать обработки и позапускать их в любой базе. Единственное предупреждение - если в базе много проведенных документов цепочка будет строится очень долго. Либо распроведите большинство документов, либо подправьте запрос в обработке генерации.
28. Dzenn 894 18.12.17 13:51 Сейчас в теме
Если я правильно понял, суть любого блокчейна в том, чтобы отвергать любые изменения блока в цепочке. То есть, для эффективной реализации при помещения документа в блокчейн нужно где-то сохранять копию его состояния. И если по какой-либо причине состояние документа изменилось (удалили, изменили, распровели), восстанавливать его из копии.
30. mkalimulin 1235 18.12.17 13:57 Сейчас в теме
(28) Я реализовал только контроль. Восстановление документов делается обычным способом.
Кто-то хитрый взял и поменял местами количество и цену в старом документе. Контроль это обнаружил и выдал ссылку на документ. Бухгалтерия достала первичку и восстановила документ. Из "бумажного" бэкапа, так сказать.
SunShinne; +1 Ответить
31. TODD22 19 18.12.17 13:58 Сейчас в теме
(30)
Кто-то хитрый взял и поменял местами количество и цену в старом документе.

Так вроде "установка даты запрета редактирования" и ЖР должен решить эту проблему.
34. mkalimulin 1235 18.12.17 14:08 Сейчас в теме
(31) Я зайду в базу напрямую. Мимо всех этих ваших дат и ЖР. Здесь работы даже не на час, а еще меньше.
72. comptr 35 18.12.17 16:27 Сейчас в теме
(34) а как Ваше решение отследит изменение, произведенное напрямую в базе? Путём пересчета всех хешей?
Т.е. КлючКонечный <> Хеш(КлючНачальный + ХешДокумента + Соль) для каждого документа.
При этом ХешДокумента - строка из значений всех реквизитов документа.
И проверять нужно будет с самого начала.
И как быстро оно будет работать, при активном документообороте, скажем, через месяц? 6 месяцев? 2 года?

В итоге появится "Дата запрета редактирования данных".
А когда она появится - мы не узнаем об изменении в документах старого периода.

А кто поменял? Нужно хранить пользователя, который записал. И дату, когда поменял.

В случае прямой записи в базу (что это за база, в которую любой Вася может писать напрямую? Куда админы смотрят?) всё равно мы только сможем факт изменения (а если будем использовать Дату запрета редактирования, то и это можем не узнать), ничего более.

В итоге, получим упрощенное версионирование.

А идея, в принципе, интересная.
73. mkalimulin 1235 18.12.17 16:34 Сейчас в теме
(72) Зачем такие сложности? Если есть изменения в базе, тогда ХешДокумента(в блоке)<>ХешДокумента(рассчитаный для контроля). Хеш документа - строка длиной 64 символа. Можно хранить двоичные данные, тогда это будет 32.
Если же внесли изменения в базу и одновременно заменили ХешДокумента, тогда КлючНачальный+ХешДокумента+КлючКонечный не дадут "красивый" хеш. Посмотрите код, он совсем короткий.
110. comptr 35 19.12.17 07:01 Сейчас в теме
(73) чтобы узнать, что ХешДокумента изменился, нужно проверить всю цепочку блоков, начиная с первого.
124. mkalimulin 1235 19.12.17 11:32 Сейчас в теме
(110) Не обязательно. Можно проверять с любого места. Обрезали основную базу. Отправили часть в архив. То же самое делаете с цепочкой блоков.
126. comptr 35 19.12.17 12:01 Сейчас в теме
(124)
Можно проверять с любого места.
А нужно - с начала цепочки, ибо изменения могли быть где угодно, мы же напрямую в базу лезем.

Обрезали основную базу
Каждые полгода обрезать?

То же самое делаете с цепочкой блоков
А если изменят те документы, цепочка которых в архиве?
Alex_YAM; +1 Ответить
35. mkalimulin 1235 18.12.17 14:10 Сейчас в теме
(31) Стоимость успешной атаки на вашу схему - около 2000 руб.
37. vadim1011985 101 18.12.17 14:20 Сейчас в теме
(35) Так и у вас решение не защищает, Измените цену - это покажите и ваше предупреждение и ЖР а что конкретно изменили -ни ЖР ни блокчейн не покажет .
41. mkalimulin 1235 18.12.17 14:24 Сейчас в теме
(37) Я изменил документ мимо ЖР. Мое решение это отследит. Ваше - нет.
SunShinne; +1 Ответить
42. vadim1011985 101 18.12.17 14:25 Сейчас в теме
(41) я удалил последний документ из блокчейна - теперь и ваше решение не отследит
46. mkalimulin 1235 18.12.17 14:29 Сейчас в теме
(42) Удалили последний документ и последний блок. Чудьненько. Пришла бухгалтерия спросила. Вы почему не работаете? Почему до сих пор документы за этот день не ввели?
200. Dementor 1036 20.12.17 20:22 Сейчас в теме
(46)
Почему до сих пор документы за этот день не ввели?

Почему не ввел? Очень даже ввел, распечатал, отдал другу на склад, кладовщик сверился с данными в системе и разрешил отгрузку лишнего мешка сахара, после чего вор-манагер поменял количество на меньшее, перепечатал документы для доставки, и лишь затем ваша обработка добавила измененный документ в блокчейн. Красота!

Технологию блокчейна теоретически можно применить в нашей работе, но не в указанном вами случае! Зачем вообще нужно проверять всю историю документов в базе, если махинации на практике проводят в текущем оперативном диапазон (до недели), в рамках которого восстановить цепочку будет несложно?

Я не говорю, что мою систему нельзя атаковать. Я говорю, что вы, как пользователь, можете сами установить цену атаки и сделать ее бессмысленной.


В таком случае у меня, как у вашего потенциального взломщика (того самого, который умеет обходить дату запрета редактирования, RLS и все варианты версионирования), есть простой и надежный метод взлома вашей системы. Выборочно беру несколько звеньев и в СУБД напрямую изменяю связанные исходящий и входящий хеши - вам звоночек, что документы кто-то изменил - ищите его бумажную копию в архиве, сверяйте и понимайте что творится какая-то непонятная херня. Вы в панике пытаетесь восстановить какой-то из старых бэкапов для сравнения, но (у меня же по условиям ситуации есть доступ к СУБД), как только я решил ломать систему, я позаботился о том, что бы бэкапы стали "невосстанавливаемыми". И теперь у вас выбор: или плюнуть на весь этот блокчейн и забыть как страшный сон, или заплатить китайским майнерам за восстановление цепи и заметания следов моих преступлений.

Да и запись в блокчейн документа в течении 4-10 минут - это полный бред. Защита имеет смысл в компаниях с большим оборотом, когда каждую минуту вводят несколько документов - ваш централизованный блокчейн на базе Proof-of-Work просто уничтожит бизнес.
vladimirmatancev; +1 Ответить
216. mkalimulin 1235 20.12.17 23:00 Сейчас в теме
(200) Если некто может провести успешную атаку в последней неделе, значит у вас нет нормальной системы учета и контроля. При нормальной системе успешная атака возможна только в достаточно "древнем" периоде, который никто уже точно проверять не будет. Неделя должна быть проверена и перепроверена. Документ введеный в понедельник, должен быть проверен в понедельник и перепроверен в пятницу.
Поломать ключи и вывести из строя саму систему, не трогая при этом документы - интересная мысль. Но к чему такие сложности? Можно ведь просто выбросить сервер в окно. Успешная атака - это когда вы что-то сделали и никто ничего не узнал.
Какая разница - сколько времени пишется документ в блокчейн? Основной системе от этого ни холодно ни жарко.
219. Dementor 1036 21.12.17 00:31 Сейчас в теме
(216) если есть нормальная система учета и контроля, то никакой блокчейн не нужен! Вполне достаточно или версионирования из БСП или платформенной истории изменения объектов, что бы узнать кто и что изменил. Сама же СУБД должна быть защищена и, если есть параноидальное подозрение, что админы могут сливать какому-то хакеру информацию о пароле доступа, то их можно периодически проверять на полиграфе.

Я скачал обработку вот прямо отсюда. Зашел в базу. Выбрал "файл/открыть". Открыл обработку и нажал кнопку "Запуск". Опишите атаку на эту последовательность действий со стороны "программера уровня Бог".


Каждый день наблюдаю за этой процедурой. В какой-то момент отвлекаю внимание и быстро устанавливаю в браузере расширение Tampermonkey или подобное; скрываю видимость иконки на панели; забрасываю на выполнение мой скриптик. Мой скрипт обнаружив, что просматривается сайт Инфостарт заменяет ссылку на обработку другой ссылкой, которая ведет на мой сервер, где лежит моя обработка, которая всегда будет возвращать успешность проверки.

И это я еще не хакер! Был бы хакером, то установил бы на компьютере резидентную программу, которая анализировала запросы к файловой системы. Если обращается процесс со словом designer, то отдавал бы оригинальную обработку - проверяйте сколько хотите, но если обращается на чтение процесс платформы в режиме предприятия, подсовывал бы свою модифицированную обработку.
vladimirmatancev; +1 Ответить
223. mkalimulin 1235 21.12.17 01:50 Сейчас в теме
(219) Никакая система визуального контроля не в состоянии контролировать всю базу постоянно. Для этого и нужен блокчейн. Резидентная программа - это интересно. Надо поизучать вопрос.
44. vadim1011985 101 18.12.17 14:27 Сейчас в теме
(41) я вообще никакого решения не предлагал. Просто присоединился к обсуждению так как тема интересна
36. vadim1011985 101 18.12.17 14:16 Сейчас в теме
(28) не копию -просто каждое изменение фиксируется в цепочке и его можно отследить. Суть блокчейна в том что
информация одновременно открыта для чтения - все могут видеть все НО + информация защищена от изменений из вне. изменять могут только те для кого эта информация предназначена
38. mkalimulin 1235 18.12.17 14:21 Сейчас в теме
(36) То, что попало в блок цепочек изменить не может никто. В случае с биткоином - совсем никто. В моем примере - практически никто. Неизменяемость - главное свойство блокчейна.
40. vadim1011985 101 18.12.17 14:24 Сейчас в теме
(38) что мешает пользователю с правами админа в конфигураторе грохнуть ваш документ ?
43. mkalimulin 1235 18.12.17 14:27 Сейчас в теме
(40) Ничего не мешает. Только всю цепочку, начиная со следующего документа придется перестраивать. Иначе контроль это обнаружит.
48. vadim1011985 101 18.12.17 14:35 Сейчас в теме
(43) мне никто не мешает изменить ваш код что бы получить нужный результат
51. mkalimulin 1235 18.12.17 14:57 Сейчас в теме
(48) Код контрольного модуля 30 строк. Его любой может проверить визуально. Также можно просто время от времени скачивать правильный код из публичного доступа.
104. Inkasor 28 18.12.17 21:37 Сейчас в теме
(51)Можно и через http api на другую, аудиторскую, машину вытащить.
50. ADirks 187 18.12.17 14:43 Сейчас в теме
Что-то мне подсказывает, что контроль наличия изменений, и гарантия неизменности данных - это не одно и то же.
vladimirmatancev; artbear; ixijixi; +3 Ответить
53. mkalimulin 1235 18.12.17 15:02 Сейчас в теме
(50) Мое решение поразумевает, что при обнаружении изменений есть всего три варианта дальнейших действий.

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

Исходя из этого, я и утверждаю, что мой контроль дает гарантию неизменности.
sulfur17; +1 Ответить
52. karimov_m 18.12.17 15:02 Сейчас в теме
Пока не читал, но сразу напишу что опередил, тоже готовлю статью как реализовать принцип блокчейна средствами 1С ))
54. mkalimulin 1235 18.12.17 15:03 Сейчас в теме
(52) Две статьи лучше, чем одна. Welcome!
55. Йожкин Кот 1008 18.12.17 15:13 Сейчас в теме
Спасибо за пример! Комментирующие, видимо, не совсем понимают суть технологии блокчейна и предлагают использовать ЭЦП, переписать обработку или программно запретить изменение данных базы
SunShinne; support; +2 Ответить
58. mkalimulin 1235 18.12.17 15:19 Сейчас в теме
(55) Спасибо вам за отзыв! Но я также и всем комментаторам благодарен. Они помогают раскрыть суть технологии для всех.
59. acsent 1204 18.12.17 15:20 Сейчас в теме
(58) А можешь написать статью про Proof of Work. было бы интересно
61. mkalimulin 1235 18.12.17 15:25 Сейчас в теме
(59) Ну разве что придумаю, куда его прикрутить в 1С. Чисто теоретические статьи пока не писал.
64. TODD22 19 18.12.17 15:36 Сейчас в теме
(55)
Комментирующие, видимо, не совсем понимают суть технологии блокчейна

Так объясните?
и предлагают использовать ЭЦП, переписать обработку или программно запретить изменение данных базы

предлагают ту же задачу решать другими способами. Вопрос в чём преимущество именно этой технологии для решения конкретной задачи? А не любой другой технологии.
Вопрос в том когда блокчейн для решения задачи это хорошо. Что бы не было "блокчейна" ради "блокчейна".
67. Йожкин Кот 1008 18.12.17 15:50 Сейчас в теме
(64) Не хочу показаться грубым, но Вас в Яндексе/Гугле забанили?
Одно из преимущество в (56) описано
56. acsent 1204 18.12.17 15:14 Сейчас в теме
Смысл блокчейна не неизменности документов, а в возможности рапределенной сети без доверия.
Но так как тут сеть из 1 узла, то смысла в ней конечно нет.
А для контроля неизменности достаточно версионирования, что в 1с уже есть, и даже в платформе.

Ведь если есть полный доступ к базе, то можно удалить все ключи позднее документа и все пересчитать заново
vladimirmatancev; rpgshnik; +2 Ответить
57. mkalimulin 1235 18.12.17 15:17 Сейчас в теме
(56) Неизменность тоже чего-то стоит. Нет?
Я ведь не биткоины майнить предлагаю, а сделать такую систему, чтобы сахар со склада не воровали.
65. TODD22 19 18.12.17 15:38 Сейчас в теме
(57)
чтобы сахар со склада не воровали.

Так блокчейн пока за руку не ловит. То что в программе не изменили, не означает что со склада не унесли.

Значит область сужается до того что система только отслеживает изменения в базе.
vladimirmatancev; rpgshnik; +2 Ответить
66. mkalimulin 1235 18.12.17 15:49 Сейчас в теме
(65) Если унесли, не изменив в базе, это не проблема. Вычли из зарплаты и попросили больше так не делать.
Проблема, когда унесли, изменили в базе и никто не узнал.
63. mkalimulin 1235 18.12.17 15:34 Сейчас в теме
(56) Весь смысл этого решения в том, что "все пересчитать заново" нельзя. Не то чтобы совсем-совсем. За приемлемые деньги нельзя. Некто поменял в старом документе 10 пачек сахара по 1 рублю на 1 пачку по 10 рублей и пошел довольный домой с 9 пачками. На версионирование ему начхать. Он в базу напрямую влез. Это если без моей системы.
А с моей системой за эти несчастные 9 пачек придется потратить ресурсы, которых хватит на один биткоин. 9 пачек ведь не стоят один биткоин?
133. TuneSoft 247 19.12.17 13:01 Сейчас в теме
(63)
если юзер с правами админа к примеру изменил документ, удалил версию документа, удалил все записи "вашей системы" то чем поможет "ваша система" ?
140. mkalimulin 1235 19.12.17 13:29 Сейчас в теме
(133) Процедура генерации блоков начнет строить цепочку сначала. Не сможет это сделать за отведенное ей время и факт раскроется.
153. TuneSoft 247 19.12.17 17:12 Сейчас в теме
(140)
Процедура генерации блоков начнет строить цепочку сначала. Не сможет это сделать за отведенное ей время и факт раскроется.


Раскроется факт что что-то изменили, но в каком объекте будет неизвестно.

"А с моей системой за эти несчастные 9 пачек придется потратить ресурсы"

Не придётся.
62. tailer2 18.12.17 15:32 Сейчас в теме
68. acsent 1204 18.12.17 16:04 Сейчас в теме
А сколько по времени подписывается 1 документ?
70. mkalimulin 1235 18.12.17 16:17 Сейчас в теме
(68) Это зависит от выставленного вами уровня сложности. Конкретно я для тестирования использовал 4-й уровень. На моем core i5 выходило около 10 сек. на документ. Сложность 5 давала около минуты. В данном примере я не использовал побитовые операции, поэтому у меня шаг настройки сложности достаточно большой (4 бита). По хорошему, надо бы сделать побитовые шаги.
74. ixijixi 1925 18.12.17 16:41 Сейчас в теме
(70) Мне кажется, или это неприемлемо много?
Прикрепленные файлы: