Недавно слышал я о следующей ситуации. Украинская сторона выпустила некое видеообращение, претендующее на актуальность, а российская сторона утверждала, что оно было записано заранее. И я задумался, а как можно сделать так, чтобы можно было надёжно проверить, когда было создано то или иное видеосообщение.
Конечно, есть очень простой способ, известный очень давно. Покупаешь свежую газету и записываешь своё сообщение, держа в руках и показывая зрителям её передовицу. Таким образом можно быть уверенным, что автор создал своё сообщение не ранее, чем был опубликован этот экземпляр газеты.
Но в случае, если сообщение записывается правительством, как в примере выше, остаются некоторые сомнения. Правительство обладает определённым влиянием на местные газеты и может заставить их печатать нужную статью. Конечно, эта проблема решается достаточно просто. Можно попросить своего сторонника, скажем, в Америке сфотографировать передовицу какой-либо известной американской газеты, переслать её вам и показывать зрителям уже это фото.
Но мне, как программисту, интересно, можно ли решить эту проблему так сказать программным путём. И в процессе это может быть возникнут некоторые идеи о том, как можно повысить доверие к используемым нами программным системам.
Описание программной системы
Давайте пофантазируем, как может выглядеть система, решающая нашу задачу. Вместо передовицы Times автор сообщения показывает экран компьютера, на котором открыт браузер, показывающий определённый сайт (скажем clock.org). На этом сайте показано текущее время в UTC (например, 4 марта 2022 года 16:47) и некая последовательность букв и цифр (например 1G34HF4JH3). Для краткости назовём эту последовательность кодом. И этот код меняется раз в минуту. Теперь перейдём на сторону зрителя. Пусть он смотрит это видео через неделю. Он видит, какое время и какой код присутствуют на записи. Желая убедиться, что видео было сделано именно в это время, он отправляется на другую страницу сайта clock.org, вводит так указанное время и код и сайт выдаёт ему, действительно ли этот код был показан в это время.
В принципе для этой цели можно было бы использовать сайт какого-нибудь новостного агентства. Но во-первых, его содержимое может меняться недостаточно часто для наших целей, а во-вторых, у них обычно нет средств предоставляющих содержимое сайта на определённый момент времени в прошлом. Можно, конечно, попробовать вытащить это содержимое из какого-нибудь кэша Google, но вообще такой кэш не предназначен для нашей задачи. Данного содержимого может не быть или оно может быть удалено, чтобы освободить диск. Да и вообще, в независимость современных новостных агентств верится с трудом. Хотелось бы избежать всего этого.
"Ну а твоему-то сайту можно ли доверять?" - спросите вы. "Может ты вошёл в сговор с автором сообщения и твой сайт показывает то, что нужно ему...". Что ж, пора разобраться с этой задачей.
Доверие программному коду
Мой сайт имеет некоторый исходный код. Если пользователь не знает этого кода, то у него нет оснований доверять ему. Мало ли что там крутится. Может я зашил туда какой-нибудь хитрый алгоритм генерации кодов по времени и сообщил этот алгоритм автору видеосообщения. И теперь он может генерировать эти коды для любого времени.
Но что, если код сайта известен? Предположим, что я выложил его на GitHub. Сложно подозревать GitHub в том, что я подкупил его авторов. Да и не нужно. Любой может скачать код оттуда на свой компьютер. "Ну и что?" - спросите вы. "Как ты докажешь, что на сайте выполняется именно этот код?". А вот как.
Во-первых, мне потребуется компилятор, который компилирует исходный код в исполняемый файл однозначно. Т. е. если вы возьмёте исходный код и 1000 раз выполните компиляцию, то все 1000 раз вы получите абсолютно одинаковые исполняемые файлы. Это значит, никаких меток времени компиляции, никаких внедрённых Guid для соответствия с отладочной информацией, ... Но технически не вижу никаких проблем.
Кроме того, существуют некоторые языки (например, PHP), где и компилировать-то ничего не нужно. Достаточно исходного кода, который будет интерпретироваться на стороне hosting-провайдера.
А теперь давайте перейдём к нему, к hosting-провайдеру. Нам потребуется от него небольшая помощь. Я хочу попросить его посчитать хэш для нескольких моих файлов. Я имею в виду те файлы, которые собственно и выполняют мой сайт на стороне провайдера. Это могут быть скомпилированные сборки или файлы исходного кода. Данный хэш провайдер будет показывать всем, кому это интересно. Выглядит это так. Вы заходите на сайт провайдера (не на clock.org, а на сайт провайдера, который хостит clock.org), вводите там в поле ввода clock.org
и вам показывается указанный хэш, а также полные имена (с путями) всех файлов, по которым этот хэш посчитан. Чуть позже я объясню, зачем это нужно.
Для полноты нам нужен ещё один кусочек. Мой сайт (clock.org) предоставляет также информацию о GitHub-репозитории, из которого он создан и идентификатор commit'а в нём.
Итак, соберём всё вместе. Путь я хочу убедиться, что на сайте clock.org выполняется именно тот код, который заявляет автор. Я отправляюсь на clock.org и получаю там имя репозитория и идентификатор commit'а. Затем я иду на GitHub и скачиваю оттуда именно эту конкретную версию кода. После этого я осуществляю его компиляцию. Теперь я отправляюсь на сайт hosting-провайдера и получаю там хэш и список файлов, по которому построен этот хэш. Теперь на своём компьютере я считаю хэш по тем же файлам. Если хэши совпали, то всё в порядке. Если нет... То и доверия нет.
Как видите, мы перешли от необходимости доверять владельцу сайта к необходимости доверять hosting-провайдеру. Но и это требование можно ослабить. Если мне очень нужно доверие пользователей, я могу разместить версии моего сайта по всему миру у различных провайдеров, находящихся в разных странах под разными юрисдикциями. Предположение о том, что я вошёл в сговор со всеми ними, будет уже немного чересчур.
Ещё пара вопросов. Почему мы должны выбирать те файлы, по которым провайдер считает хэш? Почему бы не считать хэш по всей корневой папке моего сайта, рекурсивно обрабатывая все файлы и подпапки? Просто обычно сайт что-нибудь да пишет туда, хотя бы логи. Любые изменения будут менять и хэш, и система работать не будет. Лучше уж указать несколько неизменяемых файлов, по которым и будет считаться хэш. Конечно, в этот список файлов должно входить всё, что действительно запускается провайдером: index.php, web.config, ... Это может накладывать некоторые ограничения на то, что именно может храниться в этих файлах. Ведь они же должны быть загружены в GitHub и видны всем. Но, думаю, это не такое серьёзное ограничение. Всю конфиденциальную информацию можно передавать через переменные окружения.
Я обещал рассказать, зачем провайдер должен показывать полные пути к тем файлам, по которым он считает хэш. В противном случае я мог бы пойти на такую уловку. Я залью провайдеру совершенно произвольный код. Но кроме того, я создам отдельную папочку, в которую положу скомпилированный код с GitHub, и попрошу провайдера вычислять хэш по файлам из этой папки. Т. е. выполняться будет один код, а хэш считаться по совершенно другому. Знание полных путей защищает от таких проблем.
Теперь у нас по миру разбросано несколько копий моего сайта, установленных у разных провайдеров. Автор видео может открыть несколько из них и продемонстрировать, что все они показывают одно и то же время в UTC и один и тот же код. Зрители же смогут проверить любой из них в зависимости от того, какому провайдеру они больше доверяют.
Стоп! Один и тот же код?!
Система хранения
"Ну вот я тебя и поймал!" - скажете вы. "Совершенно очевидно, что твоему сайту нужна система хранения информации, какая-то база данных, в которой ты хранишь соответствие между временем и кодом. А у кого есть доступ к этой базе? Правильно, у тебя. Т. е. если ты захочешь, то сможешь внести в неё любую информацию, поменять любые значения на что угодно. Ну и как этому доверять?" Да, серьёзный вопрос.
Во-первых скажу, что каждый из экземпляров моего сайта в принципе мог бы содержать своё отдельное независимое хранилище. Например, файл SQLite, лежащий в корневом каталоге. Но в таком случае я не знаю, как решить проблему доверия. Лучше я сниму этот груз с себя и переложу его на кого-нибудь другого. На провайдера БД.
Все мои сайты будут общаться с одной и той же базой данных, доступ к которой через Интернет предоставляет мне провайдер БД. Адрес для доступа к базе данных, её имя, а так же имена всех используемых таблиц/коллекций (а возможно и имя пользователя) будут жёстко зашиты в мой код, так что любой с помощью уже описанной процедуры мог проверить, что я действительно обращаюсь к одной и той же базе данных, к одним и тем же таблицам, что я незаметно ничего не подменил. Через переменную окружения на провайдере устанавливается только пароль.
"Ну и что это тебе дало? Ты по-прежнему способен вносить любые изменения в эту базу данных." - скажете вы. Да. Если только...
Если только сама база данных не ограничивает то, что я могу сделать. Представьте себе базу данных, которая не позволяет вносить изменения в уже записанные данные и не позволяет удалять записи. Я могу только добавлять новые данные. Кроме того, существует запрет на создание нескольких записей с одним и тем же ключом. В данном случае в качестве ключа выступает время UTC с точностью до минуты.
Но и это ещё не всё. Предположим я договорился с автором видео о том, что он хочет сегодня записать сообщение, которое должно выглядеть так, как будто оно записано через неделю. Для этого я вношу в базу данных несколько записей, соответствующих времени через неделю. Это ничему пока не противоречит. Я ничего не меняю и не удаляю, только вношу новые данные. Я не создаю конфликтов ключа. Они могут возникнуть впоследствии, когда мой код попытается внести в базу новые записи за то же время. Но такие конфликты легко обработать программно. Так что моя база данных должна ещё и гарантировать последовательность ключей. В каждый момент времени я могу добавить запись только со следующим ключом (только на следующую минуту за последней, уже внесённой в базу).
Есть ещё один важный вопрос, который следует обсудить. А именно, кто вносит изменения в мою базу данных. Представьте себе, что экземпляры моего сайта содержат программный код, который вносит новые записи в нашу базу данных. Каждый из экземпляров раз в минуту генерирует новый код для следующей минуты и пытается записать его в базу данных. Только одному из них это удаётся (из-за ограничений ключа), остальные же получают сообщения о возникшем конфликте и считывают записанное значение кода из базы, чтобы всем всегда показывать один и тот же код для одного и того же времени. Достаточно ли этого для того, чтобы быть уверенным в том, что наши коды генерируются честно? К сожалению, нет.
У меня дома может иметься некий Excel-файл, в котором все коды расписаны на несколько лет вперёд. Поскольку я обладаю ключом к базе данных, я могу где-нибудь запустить свою программку, которая будет записывать в базу данных значения из этого Excel-файла чуть раньше, чем это успевают делать экземпляры моих сайтов. Таким образом, я буду знать все коды на несколько лет вперёд, и могу воспользоваться этим знанием.
Что же можно сделать, чтобы преодолеть эту проблему? Во-первых, можно на провайдере базы данных ограничить список IP, с которых можно подключаться к нашей базе данных. Конечно, для обеспечения доверия провайдер должен показывать всем желающим этот список, чтобы они могли убедиться, что изменения в базу данных можно вносить только с тех же IP, на которых развёрнуты наши сайты. Однако при этом необходимо как-то гарантировать, что я не сумел рядом с сайтом (т. е. на той же машине с тем же IP) запустить фоновый процесс, который занимается своей записью в базу данных. Мне кажется, что это сделать уже сложнее.
Другой подход заключается в том, что наш сайт может предоставлять пользователям своеобразный журнал, в котором написано, удалось ли ему внести новое значение в базу данных, или он столкнулся с конфликтом и ему пришлось перечитать значение из базы. Тогда люди смогут (по крайней мере теоретически) обойти все экземпляры моего сайта и посмотреть, смог ли один из них записать код для данного времени, или все они столкнулись с конфликтом, что означало бы, что код записал кто-то другой. Но как хранить такой журнал? Если в виде файла на диске, то как удостовериться, что я не внёс в него нужные мне изменения? Ведь постоянно меняющийся журнал не поместить под хэш. Если же хранить его в памяти сервера, мы могли бы быть уверены в его правильности, поскольку доверяем исходному коду программы. Но такое хранилище было бы ограниченным по размеру. Его пришлось бы обрезать со временем. Это значит, что через определённый промежуток времени записи удалялись бы из него, и мы уже не могли бы проверить их. Кроме того, при перезагрузке экземпляра сайта по любой причине, журнал был бы потерян.
Что же делать?
Блокчейн
На самом деле, уже довольно давно существует технология, позволяющая организовать нужное нам хранение. Я говорю о блокчейне. Он предоставляет неизменяемое (только для добавления новых записей) хранилище и валидацию новых блоков всем сообществом участников.
Для наших целей блокчейн может быть организован следующим образом. Во-первых, блок с кодом для следующей минуты может сгенерировать любой участник. Во-вторых, процесс валидации проверяет что:
Блок сгенерирован именно для следующей за последним уже имеющимся блоком минуты, а не на какое-то время в удалённом будущем.
Блок содержит код, который не встречался ранее (или не встречался какое-то продолжительное время).
Блок сгенерирован участником, который не генерировал ни одного из последних N блоков в цепочке. Эта проверка призвана исключить ситуацию, когда один участник сможет сгенерировать несколько последовательных блоков в цепочке.
Конечно, и этот подход не лишён недостатков. Я всё же могу вставить в систему блок с произвольным кодом, который может быть известен мне заранее. Таким образом, я могу использовать его, если моё видеосообщение занимает меньше минуты.
Кроме того, блоки должны генерироваться раз в минуту. При большом числе участников это может приводить к конфликтам, которые вызывают временные форки. Из-за этого наши сайты могут читать данные не из "правильной" ветки цепочки, что сделает систему бесполезной. Можно, конечно, попытаться генерировать блоки заранее, например, за день, в надежде на то, что за это время сообщество уже решит, какую из веток принять за правильную. Но в таком случае автор видеосообщения сможет записать его как бы на этот день вперёд.
И, несомненно, остаётся вопрос о стимуле для генерации новых блоков. С какой стати множество людей бросится генерировать блоки с кодами для нашей системы? Нужен некоторый экономический стимул, как в случае с биткоином, но я его здесь не вижу.
В общем вопросов остаётся ещё много.
Заключение
В своей статье я рассмотрел вопрос создания гипотетической программной системы, результатам работы которой можно было бы доверять, не обладая доверием к её авторам и владельцам. Выводы, которые я сделал для себя, следующие.
Организовать доверие к программному коду сайта можно. Но на самом деле мы заменяем доверие к автору сайта доверием к hosting-провайдеру. Для надёжности можно разместить сайт в нескольких экземплярах у нескольких провайдеров, расположенных в разных странах и относящихся к разным юрисдикциям. Организация такого доверия требует некоторых усилий со стороны провайдеров, но не чрезмерных.
С данными всё намного сложнее. Убедиться в том, что владелец сайта не вносил в них никаких изменений, очень сложно. Даже перенос некоторых проверок на сторону провайдера баз данных не решает проблему полностью. Возможно, что использование систем типа блокчейн и может в некоторых случаях решать проблему с доверием. Но такие системы показывают данные всем желающим, а это не всегда допустимо.
Надеюсь, вы хотя бы развлеклись, путешествуя вместе со мной по миру доверия к программным системам. Если это наведёт вас на полезные мысли по этой теме, буду рад. Удачи вам!
Комментарии (32)
roboter
28.03.2022 16:48Можно просто последний блок биткоина публиковать.
Нужно ещё защиту наоборот, записано сегодня, а утверждается что было записано неделю назад.
Zibx
28.03.2022 16:56+1Тут нужен отдельный блокчейн в который добавляется уникальный id записываемого видео и подписывается текущим блоком того же биткоина. По окончании записи можно добавлять VideoID ended и брать хэш от оригинального видео (которое тоже куда-то надо выкладывать) для возможности последующей валидации.
vesper-bot
28.03.2022 17:01Не выйдет — при наличии истории блокчейна всегда можно притвориться, что ты отстаешь по времени, отображая не последний блок, а блок заданной давности. Защититься от подобного можно только публикацией и наличием кросс-ссылок (хотя бы в том же блокчейне), но эта защита нужна тем, кто не может по собственной воле её обеспечить, то есть опять не выйдет.
Akiyamka
30.03.2022 17:15Не совсем понятно как из этого следует что не получился. Последний блок он и есть последний блок, притворишся что отстаешь по времени - получишь изначально невалидное время а своем видео
vesper-bot
28.03.2022 16:56+1Итого: Нужна некая структура, генерирующая непредсказуемые секреты, и которой доверяют, что она не может выдать заранее известный секрет. Она должна ещё хранить свою историю с привязкой к глобальному времени, и иметь возможность достать, грубо говоря, код по времени из своей истории. От неё можно уже плясать.
Формально, блокчейн от биткоина подходит под подобную штуку — процессинг в нем вполне себе генерирует новые IV для блока, который создает новые монеты, раз в 10 минут плюс-минус, проблем с вознаграждением не предвидится довольно долго, кроме того, IV блоков имеют после нахождения историческое значение, а до — не предсказуемы. То есть, в качестве заведомого позиционирования можно использовать текущую голову блокчейна как маркер "создано не ранее". А вот "создано не позднее", как я понимаю, программистским способом не задать в принципе, так как всегда есть история, на которой можно создавать впечатление того, что запись сделана раньше, чем на самом деле, а секретов "из будущего" нет по определению. Кроме того, даже если бы они были, нужно как-то обеспечить их отображение в контексте записи для решения задачи отображения точного времени, но опять-таки ничто не мешает взять историю секретов и сэмулировать то, что запись более старая, чем на самом деле.EDIT: ninja'd :)
Vladekk
28.03.2022 16:59Хеш видео в блокчейн записывать
vesper-bot
28.03.2022 17:03А кто это будет делать? Тот, кто просмотрел, или кто записал? Тому, кто записал, требуется обратное чаще всего, т.е. сдвинуть видео раньше по времени.
Hardcoin
28.03.2022 17:38Зачем ему это требуется? Что бы обмануть? В таком случае хэш сегодняшним днём подходит, если автор видео хочет доказать, что он не обманывает с датой и видео на самом деле свежее.
aborouhin
28.03.2022 18:04+1Эм... а Time Stamping Authority, которые для ЭЦП используются, чем не угодили? Подписываем хоть документ, хоть видеоролик, - и задача решена. Или нет?
vesper-bot
28.03.2022 18:22Нет гарантии, что время на TSA перед подписью не "перевели вперед". Ну и существует проблема сохранения подписи при перекодировке. Посему требуется какое-то включение данных в само видео, при этом часам в чистом виде доверия нет.
aborouhin
28.03.2022 18:31Ну если это TSA, который ежедневно используется десятками/сотнями тысяч других пользователей для тех же ЭЦП (и который точно не хочет потерять свою репутацию) - то "перевод времени" на нём для отдельной подписи представляется затеей малореальной.
А что касается перекодирования - так оставляем оригинал для тех дотошных, кто захочет проверить, остальные или верят проверившим на слово, или качают оригинал с его подписью сами.
Moskus
28.03.2022 21:05Это решение задачи подтверждения "снято не позднее..." все равно сводится, в общих терминах, к сведению задержки между моментом съемки и моментом публикации к минимуму, просто это чуть более надежный способ засвидетельствовать публикацию (передачу третьему независимому лицу), чем просто публикация для всеобщего доступа, когда полагаться приходится только на множество независимых человеческих личных свидетельств.
А для задачи "снято не ранее" это вообще иррелевантно, потому что там узким местом является отсутствие монтажа (встраивание в ранее записанное видео фрагментов, которые записаны позднее) и через это - доверие к экспертизе отсутствия монтажа.
Moskus
28.03.2022 19:20+5Строго говоря, поскольку это задача аутентификации времени создания содержимого видео (а не файла видео, например), стоит сначала описать конкретное и практическое применение этой задачи. То есть конечно, академический интерес не отменить, но важнее всего - практическая решаемая проблема.
Потому что очень легко может выясниться, что алгоритмически подтвердить время создания видео - можно. Но оно все еще будет подтверждать факт, который не связан с искомым фактом через импликацию. Проблема иррелевантных доказательств - весьма велика, потому что доказательства вообще очень редко являются прямыми и однозначными. Ровно по этой причине стратегия требования доказательств так распространена в разнообразных дебатах - это отнимает кучу времени у оппонента, который не может сформулировать причину, почему такое требование - бесполезно (например, потому что прямое доказательство невозможно, а косвенное все равно можно оспорить).
OlegIva
28.03.2022 20:15Если задача именно доказать, что видео не было снято заранее, то ее далеко не бедные букмекерские компании решают тривиально: в кадре присутствует трансляция некоего стороннего события, идущего в прямом эфире (спорт, например).
Можно и тут предположить, конечно, что правительство условной страны может заранее снять матч условной "Барсы" с условным "Ювентусом", но это уже какой-то запредельный уровень теории заговора.
Moskus
28.03.2022 20:53Во многих случаях, когда требуется подтверждение утверждения "снято не ранее" можно включить в видео демонстрацию трансляции, организованной стороной, которая наименее вероятно может вступить в заговор со стороной, которая пытается подтвердить время съемки. Однако, если речь о стороне, снявшей видео, обладающей большим бюджетом, это все равно будет только косвенным подтверждением, потому что всегда можно заявить, что видео смонтировано. И с этим заявлением все равно ничего не сделать, потому что степень доверия любой экспертизе подлинности - субъективна.
Совершенно другую историю представляет задача подтверждения утверждения "снято не позже", потому что любое дополнительное время между декларируемым моментом съемки и фактическим моментом публикации просто автоматически увеличивает степень возможности того, что видео смонтировано, независимо от доступных стороне-автору видео ресурсов. Только минимальная задержка публикации является действительным "доказательством" этого утверждения.
OlegIva
28.03.2022 21:13Согласен. То есть в общем получается смонтировано не ранее/не позднее, а не снято.
Moskus
28.03.2022 21:29Именно, об этом я писал в комментарии выше. Почему-то люди испытывают проблемы с аналитическим моделированием такой ситуации - декомпозиция идет не достаточно далеко.
OlegIva
29.03.2022 00:03+2Полагаю, аналитическое моделирование для среднего не тренированного на него человека требует заметно больше ресурсов, чем этот самый человек привык выделять. Полагаю также, что и я не исключение :)
DrinkFromTheCup
28.03.2022 20:41+1Я бы пошутил сейчас про плоскоземельщиков... но не буду. Статья слишком приличная, чтобы портить её осточертевшими шуточками.
Блокчейн всё равно недостаточно надёжен, поскольку, как его ни децентрализуй, - "достаточно замотивированный" "большой игрок" всё равно найдёт способ в него вклиниться и подсунуть фальшивку.
Может, мы чистим банан не с того конца?
Если мы не можем однозначно идентифицировать момент времени на видео - то, может быть, мы можем однозначно идентифицировать момент пространства? И этого будет достаточно?
Время - вообще, крайне отвратительная сущность в плане измеримости и измеряемости. А пространство (на наших с вами масштабах и размерностях) - нет, мерять его сравнительно удобно и результат получается довольно точный.
Понимаете, о чём я?
200sx_Pilot
28.03.2022 21:14+2В астрономии подобной проблемы просто не существует.
Взаимное положение Солнца, Земли, других естественных обьектов в космосе постоянно и непрерывно изменяется по определенным и давно известным законам.
Зафиксировав положение небесных тел на момент сьёмки, однозначно получим дату и время события.
Moskus
28.03.2022 21:22+1Именно по этой причине такой способ установления даты годится только для случая, когда исключена возможность намеренной подделки или заявления, что оно подделано (то есть это не ситуация, где существуют стороны с противоположными интересами, а все заинтересованы в том, чтобы знать правду).
Подобное предложение прекрасно иллюстрирует, почему "популяризация науки" без умения верно интерпретировать факты - как минимум, бесполезна.
DrinkFromTheCup
29.03.2022 09:33Я немного не понимаю, почему Вы так считаете.
Подделать расположение небесных тел - или высчитать координаты И валидность получившейся по этим координатам траектории наперёд с целью подделки - всё-таки, немножко сложно. Мягко говоря.
Вопрос в выборе точек отсчёта (sic!) и в формате записи такого "пространственного времени", в первую очередь.
Впрочем, возможно, я несу полную фигню и сейчас первый же мимопроходящий физик и/или астроном и/или спец по космологии из меня кнедлики сделает.
vesper-bot
29.03.2022 12:53Вы не поняли проблему, скорее всего. Пост выше гласит: "Если задать положение небесных тел на момент съемки, получим фиксацию даты съемки". Попытка подделать вычисленные положения (при съемке в студии, например, положение небесных тел можно задать, но нельзя непосредственно наблюдать) вполне возможна, так как оно известно на несколько (тысяч) лет вперед. Что мешает тому, кто хочет подделать дату выпуска видео, вставить в него данные о положении небесных тел на желаемую дату, и после неё обнародовать видео?
DrinkFromTheCup
29.03.2022 13:00Я действительно не понимаю, в чём проблема отделить реальные данные, записанные в реальном времени, от посчитанных алгоритмом и внедрённых в запись заблаговременно в этом случае.
Больше ничего не скажу. Копайте к своему многомиллионному патенту дальше сами. Мне один фиг с него перепадёт ровным счётом ничего.
Кстати, пост, на который Вы ссылаетесь, Вы немного некорректно переформулировали.
vesper-bot
29.03.2022 17:18+1Вы немного не по адресу — патент не мой :) Да, со ссылкой я обошелся некорректно, надо было сослаться на тред, а не на предыдущий пост, my bad. Однако для меня как раз данные, полученные в реальном времени, от просчитанных наперед, но по известным до 15го знака законам и формулам, для даты в будущем в пределах действия формул, ничем не отличаются.
Пример: Я снимаю фейк о чем-то, желаю по этому методу его датировать 02.04.2022. Сегодня 29.03.2022, съемки ведутся внутри некоего здания, т.о. ни Солнца, ни планет, ни даже погоды за окном не наблюдается. Я вычисляю положение всех требуемых для идентификации небесных тел параллельно со съемкой и вписываю в видео именно посчитанные данные. Далее, 02.04.2022 я вбрасываю подготовленное видео в Интернет. Вот как вы докажете, что оно было снято 29.03? Мои доказательства — вот, прямо в видео, но они некорректные, при этом проходят все проверки. Та же ситуация, если я хочу, чтобы видео числилось снятым парой дней раньше, естественно, что опубликовать его я смогу только сегодня после съемок, но датировка будет стоять от прошлого времени.
Moskus
29.03.2022 19:45При чём тут астрономия, если речь о доверии к датировке видео в ситуации, где автор видео пытается доказать, что видео снято в определенный момент, а его оппонент оспаривает это утверждение, при этом он может делать заявления о том, что видео смонтировано? Это, как я уже писал, не вопрос того, что показать в видео. Это вопрос о том, чтобы можно было каким-то образом продемонстрировать, что видео невозможно было подделать. Рассчитать и симулировать картину неба с позициями небесных тел в любой момент - можно.
Al_Pollitruk
29.03.2022 10:53По сути эта все та же проблема организации эффективных оракулов для блокчейна, обеспечения связи реального события и его цифрового оттиска. Никаких "чудесных" решений там пока не найдено, увы.
NFT тоже никак проблему подтверждения подлинности цифрового актива не решил.
pro_co_ru
29.03.2022 06:49Можно ещё составить и утвердить, к примеру, стандартные таблицы жестов, для людей с двумя руками, с какой-либо одной, жесты мимикой (подмигиванием, поворотом головы, киванием и т.д).
Затем, реализовать некоторую функцию, которая будет преобразовывать контрольную сумму (например, crc32, или с плавающей размерностью) некоторого адреса блока из блокчейна в эту последовательность жестов. Т.е. перевести контрольную сумму в систему счисления размером с кол-во жестов в стандартизированной таблице, таким образом каждой цифре такого числа будет соответствовать некоторый жест.
Затем, ведущий репортаж в начале объявляет дату, время (если необходимо), тип таблицы жестов и ещё количество жестов или интервал времени, через который будут эти жесты воспроизводиться.
Ведёт репортаж, ему через определённый интервал времени зажигаются красным цветом подсказка какой жест необходимо изобразить, ведущий изображает, камера тут же распознаёт, если жест валиден, то ведущий видит что подсказка стала зелёной и ведёт репортаж дальше.
Для упрощения автоматической валидации видео материала можно метаинформацию о примерной дате (где искать блок по его контрольной сумме), типе таблицы жестов, интервале, количестве жестов и саму контрольную сумму зашить в qr-код и отобразить на листочке, фоне, либо смонтировать в каком-либо углу видео, или показать этот код перед началом видео.
Далее, видеоплееры или сервисы отображающие у себя этот контент могут автоматически валидировать эту информацию своей распознавалкой и выводить шильдик того, что видео прошло проверку и создано не ранее указанной даты.
karambaso
29.03.2022 09:22+1Зачем так много текста?
Суть проблемы - нужен доверенный удостоверяющий центр. Далее автор предлагает какой-то переусложнённый алгоритм построения доверия к этому центру. И не находит ничего лучшего, кроме удостоверения всех сложных составляющих своего алгоритма при помощи блокчейна.
Что нужно исправить?
Первое - упростить алгоритм. Удостоверяющий центр удостоверяет только время создания хэша от набора байт.
Второе - дать гарантии от подмены хэша или времени.
Из этого следует, что основная проблема состоит в нахождении способа не просто создать кусок кода, подписывающего байты, но создать систему, которая гарантировала бы историю подписаний. А это уже набор аппаратно-программных средств, активно взаимодействующий с социальной системой, которая и является на самом-то деле основным гарантом всего на свете.
Поэтому начинать нужно с социальной системы. Но поскольку автор, очевидно, технарь, социальная система полностью выпала из поля зрения и была заменена техническим решением под названием "блокчейн". Только я здесь вынужден повториться - всё на свете гарантирует только социальная система, а техника всегда была и будет служанкой хозяев социальной системы, что означает гарантированную подмену "доверенной" подписи хозяином системы.
Либо может сработать отсутствие у системы хозяина (что означает хозяина коллективного типа), но тогда нужно дать набор принципов организации такой социальной системы, и принципы должны гарантировать устойчивость системы.
Zibx
О, это та редкая задача когда можно применить блокчейн. Достаточно написать последний найденный в одной из сетей блок. Но таким образом нельзя гарантировать что сегодня кто-то не запишет видео с прошлой недели.
Tatikoma
Можно не весь блокчейн тащить, достаточно сети вычисляющей VDF (Verifiable Delay Function).
Для защиты от записи сегодня на прошлую неделю - источник может опубликовать зашифрованный архив с видео в день записи видео, а пароль предоставить в день публикации.
svr_91
Можно записать видео, подсчитать от него хэш и положить этот хэш в блокчейн