Криптографические хэш-функции в помощь IT-юристу

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

Поскольку зачастую экземпляры результатов интеллектуальной деятельности (далее — РИД) весьма объёмны в цифровой форме, то классический вариант идентификации в виде, например, распечатывания, не всегда удобен: затруднительно и трудозатратно распечатывать 500 фотографических произведений в высоком качестве, ещё сложнее «распечатать» аудиовизуальное или музыкальное произведение. Про объёмные и сложные программы для ЭВМ и говорить не приходится — у комплексных проектов объём исходного кода зачастую измеряется миллионами строк кода. Например, браузер Google Chromium (на базе которого подготовлен всем известный Chrome) уже в 2015 году содержал более 15 миллионов строк кода.

 

С учётом таких сложностей, творческая мысль более прогрессивных участников гражданских отношений дошла до возможности приложения одноразовых финализированных компакт-дисков в качестве приложения, при этом указывались «реквизиты» компакт-диска. Однако, такой способ тоже не слишком удобен:

  • компакт-диски хрупки и ненадёжны;
  • компакт-диски ограничены в объёме;
  • компакт-диск имеет физическую форму, его нельзя мгновенно передать в другой город или страну;
  • компакт-диски теряют в популярности, и вероятно, скоро разделят судьбу 3.5"-дискет — на многих ПК считыватель таких дисков уже скорее атавизм из разряда «на всякий случай», чем реальная необходимость.

Ещё более прогрессивные участники договорных отношений стали пользоваться всеми возможностями, которые им предоставляет информационно-телекоммуникационная сеть общего пользования «Интернет» — договариваться через VoIP, заключать договоры по электронной почте, обмениваться экземплярами РИД через файлообменные сервисы.

Уже никого не удивляет ситуация, когда контрагенты и их представители друг друга вообще никогда не видели вживую.

Возникает вопрос — чем заменить традиционные «механизмы» по идентификации в соответствии с современными реалиями?

Можно указать ссылку и размер файла, содержащего экземпляр РИД, но ссылка может перестать быть активной. Кроме того, имеющий доступ участник может иметь возможность подменить файл по ссылке на другой с идентичным размером. Да и в случае, если речь идёт о «продаже сайта» с контентом (а не только лишь праве администрирования доменного имени), одной лишь ссылки на доменное имя будет явно недостаточно.

Как обойти эти ограничения и избежать подобных рисков?

Автор этого материала нашёл для себя ответ несколько лет назад — криптографические хэш-функции[1].

Хэширование произвольной фразы md5, sha1, sha256, sha512

Понятие хэш-функции

Максимально упростим имеющиеся определения для понимания: хэш-функция — это алгоритм, создающий цифровой «отпечаток» какого-либо исходного сообщения. Под исходным сообщением может пониматься как одна фраза, так и файл в десятки гигабайт. Длина «отпечатка» или хэш-суммы зависит от вида хэш-функции. Хэш-функции очень давно используются программистами для самых разных задач, в числе которых и криптография, и идентификация паролей, файлов, проверка целостности файлов и многое другое.

Например, рассмотрим работу хэш-функции на примере достаточно древнего по компьютерным меркам алгоритма MD5[2].

1.1 Создадим текстовый файл file.txt, содержащий текст ст. 1226 ГК РФ в командной оболочке bash.

ivan@pc ~ $ echo 'На результаты интеллектуальной деятельности и приравненные к ним средства индивидуализации (результаты интеллектуальной деятельности и средства индивидуализации) признаются интеллектуальные права, которые включают исключительное право, являющееся имущественным право м, а в случаях, предусмотренных настоящим Кодексом, также личные неимущественные права и иные права (право следования, право доступа и другие).' > file.txt

1.2 Теперь получим MD5-хэш получившегося файла с помощью команды md5sum.

ivan@pc ~ $ md5sum file.txt   f9f3b31589779e2b5cfb41bb77cc42d5  file.txt

Вот этот набор букв и цифр «f9f3b31589779e2b5cfb41bb77cc42d5» - и есть уникальный цифровой идентификатор файла. При изменении любого символа, мы получим совершенно иной результат.

2.1 Чтобы убедиться в этом, мы проделаем аналогичные действия, но изменим положение запятой после «право следования».

ivan@pc ~ $ echo 'На результаты интеллектуальной деятельности и приравненные к ним средства индивидуализации (результаты интеллектуальной деятельности и средства индивидуализации) признаются интеллектуальные права, которые включают исключительное право, являющееся имущественным право м, а в случаях, предусмотренных настоящим Кодексом, также личные неимущественные права и иные права (право следования ,право доступа и другие).' > file.txt   

2.2 А теперь посмотрим, что нам выдаст MD5:

ivan@pc ~ $ md5sum file.txt   a61365209311862e668c9666a50b7325  file.txt

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

Понятие коллизии

Коллизия — это случай одинакового «результата» работы хэш-функции при разных вводных данных. Несмотря на то, что получившиеся в 1.2 и 2.2 хэши очень сильно отличаются, в безграничном цифровом океане файлов невероятно много (и пока Вы читали это предложение — их стало ещё больше), поэтому коллизии неизбежны. Чем более старый алгоритм, тем менее он надёжен и криптоустойчив.

Для примера — для поиска MD5 коллизии достаточно мощности старого ПК или современного смартфона (от нескольких секунд до нескольких минут). Более современный SHA-1 в 2016 году для взлома требовал непрерывной работы на брутфорс (brute force) 12 миллионов видеокарт. Найденная в феврале 2017 года «уязвимость» от Google с названием SHAttered[3] ("shattered" с англ. - "разбитый") позволяет достичь аналогичных результатов с использованием всего лишь 110 видеокарт.

Что это значит для юристов? Это значит, что для точной и бесспорной идентификации необходимо использовать несколько разных хэш-функций.

Снимем SHA-1 с представленных Google файлов:

ivan@pc ~ $ sha1sum shattered-*

38762cf7f55934b34d179ae6a4c80c

38762cf7f55934b34d179ae6a4c80c

Как видим, хэши SHA-1 одинаковы.

Теперь посмотрим на MD5.

ivan@pc ~ $ md5sum shattered-*

ee4aa52b139d925f8d8884402b0a75

5bd9d8cabc46041579a311230539b8

Так, файлы из примера Google хоть и имеют одинаковые SHA-1 хэши, но в то же время совершенно различные хэши MD5. Кроме того, в статье явно отмечается, что (пока) не существует метода добиваться одновременных коллизий для SHA-1 и MD5.

Поэтому логичный вывод: чем больше различных хэш-функций использовано — тем надёжнее идентификация. Сочетание характеристик точного размера файла, содержащего РИД и нескольких хэш-сумм позволяет однозначно и бесспорно идентифицировать конкретный файл.

При этом указанный файл также может быть и «мета-файлом» - архивом, содержащим любое количество других файлов (например, фотографические произведения или исходный код программы).

Указанный способ представляется более удобным и надёжным по сравнению с остальными:

  • экологичнее распечатки огромных приложений;
  • быстрее и надёжнее, чем запись на диск;
  • проще, как в реализации, так и для понимания, чем использование технологии blockchain.

С учётом того, что программ для калькуляции хэш-сумм огромное количество под любые операционные системы, а в дистрибутивах GNU/Linux они присутствуют в штатной поставке большинства дистрибутивов, единственное препятствие победоносному шествию хэш-функций по приложениям к договорам — желание или нежелание участников гражданского оборота и правоприменителей разбираться в возможностях этих алгоритмов.


  1. Хэш-алгоритмы / Хабр
  2. MD5 — Википедия
  3. Google Online Security Blog: Announcing the first SHA1 collision
Опубликовано