[Из песочницы] ЭЦП видеопотока

geek.png

Хочу рассказать о том, как я придумал электронную цифровую подпись (ЭЦП) видеопотока.

Идея у меня возникла после фразы Чурова про «кино, снятое на квартирах». Несколько лет назад была представлена идея видеонаблюдения за выборами. Дескать, если понаставить видеокамер на избирательных участках, то выборы сразу станут честными и прозрачными… В реальности же получилось строго по-черномырдински — «хотели, как лучше, а получилось, как всегда». Люди смотрели, как сотрудники УИКов бросали в урны для голосования пачки бюллетеней, возмущались, а потом оказалось, что «онлайн к делу не пришьёшь», запросы в хранилище, где якобы должны были храниться официальные видеозаписи того, что происходило на избирательных участках, оказывались напрасными, поскольку «внезапно» оказалось, что эти записи получить невозможно из-за технических сбоев, а «неофициальные» копии отказались признавать.
На грядущих выборах 18 февраля ситуация дополнительно усложняется тем, что срок хранения видеозаписей официально сокращён с года до 3 месяцев. Моё мнение заключается в том, что это сделано специально, чтобы сделать выборы неоспоримыми — результаты выборов невозможно будет оспорить даже при наличии вопиющих нарушений, допущенных на выборах. Пока будет рассматриваться заявление в избиркоме, в прокуратуре, в суде первой инстанции и т.д., три месяца пролетят быстро и незаметно, а через 3 месяца после выборов, первичные документы (избирательные бюллетени, собранные с участков в ТИКах) уничтожаются безвозвратно, после чего ничего уже ни доказать, ни опровергнуть нельзя. Я знаю, о чём говорю — я сам участвовал в выборах в качестве наблюдателя на участке и в качестве доверенного лица кандидата в депутаты.

Что же делать? Я долго искал решение и наконец нашёл — электронная цифровая подпись видеопотока! Ни в одной книжке или статье по прикладной криптографии я даже такой постановки вопроса ещё не встречал, хотя прочитал их много. Проблема в том, что обычно электронной цифровой подписью защищается документ определённого размера.

Для тех, кто не в курсе, что такое ЭЦП, небольшое объяснение. Есть такая тема — криптография с открытым ключом. В отличие от симметричной криптографии, где для зашифровывания и расшифровывания информации применяется один и тот же ключ, тут используется два ключа, образующих пару — публичный и секретный. То, что зашифровано на секретном ключе, может быть расшифровано, используя публичный ключ, и, наоборот, то, что зашифровано на публичном ключе, может быть расшифровано при помощи парного к нему секретного ключа. Например, один человек хочет послать другому сообщение. Он шифрует его, используя публичный ключ адресата, и уверен в том, что никто, кроме адресата, имеющего соответствующий секретный ключ, не сможет его расшифровать и прочитать. А вот для того, чтобы убедить адресата, что именно отправитель является автором сообщения, он может взять сообщение, зашифровать его своим секретным ключом, и результат передать вместе с письмом. Адресат может взять публичный ключ отправителя, расшифровать им приложение, сравнить с письмом и убедиться одновременно в двух вещах — во-первых, что письмо не было модифицировано и дошло до адресата в неизменном виде, во-вторых, что оно было отправлено именно отправителем, у которого был соответствующий секретный ключ. Это и есть электронная цифровая подпись. Это я упрощённо излагаю, на самом деле там есть куча нюансов. Например, шифруется на секретном ключе не само сообщение, а значение криптографической хэш-функции от сообщения.

Хэш-функция вычисляется от документа любого размера, но определённого, а у нас видеопоток в общем случае неопределённой длины. Соответственно, можно подписать каждый отдельный кадр, но тогда у нас от модификации будет защищён каждый конкретный кадр, но последовательность кадров не защищена — можно будет видеозапись отредактировать — что-то вырезать или переставить последовательность кадров или заменить одни кадры другими… Можно нарезать видеопоток на фрагменты определённого размера, скажем, по 15 минут — тогда в этом фрагменте не только все кадры будут защищены от модификации, но и последовательность кадров, но что если интересующее событие попало на границу двух фрагментов? Можно подписать сразу все 24 часа трансляции —, но получившийся видеофайл будет огромным, с ним неудобно будет работать.

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

Очевидно, это решение допускает расширение применения — в расчёт ЭЦП можно включить аудиотрек или данные с приёмника ГНСС (глобальной навигационной спутниковой системы) о дате, времени и месте съёмки. Также очевидно, что это решение подходит не только для наблюдения за выборами, но и во всех других случаях, где осуществляется видеозапись — в видеорегистраторах, при осуществлении процессуальных действий или оперативных мероприятий. Причём, по моему мнению, такая видеозапись, снабжённая ЭЦП и геоданными, полученными с приёмника ГНСС, становится более доказательной, чем нотариально заверенное свидетельство.

Я не захотел патентовать эту идею, поэтому я её описал в виде статьи, выкладываю в общий доступ и, как автор идеи, передаю её в public domain для неограниченного использования.

© Geektimes