Здравствуйте, эта статья более представляет собой наброски для размышления, нежели полноценную статью и её цель — обсудить одну интересную и неактуальную тему.
Постановка задачи
Передать сообщение собеседнику, быстро проверить доставку, гарантировать возможность чтения не ранее, чем через заданное время, причём гарантировать только саму возможность чтения, а не непосредственно чтение.
Сфера применения
Примеры:
- Завещание для праправнуков? – неверная постановка задачи, если они ещё не родились, потому что не гарантируется доставка.
- Святые копирайтеры, заботящиеся о зрителях снимают фильм и одновременно запускают его а) в кинотеатры, б) официально в торрент. В торрент выкладывается видео в отличном качестве, но с возможностью открытия через N месяцев.
- Дядя Вася написал книгу, разоблачающую секретные материалы и не уверен, что после такого ему удастся выжить, но хочет потянуть время и раскрутить её. Он может выкладывать по одной главе своей книги в неделю, а вместе с первой главой выложить в открытый доступ всю книгу целиком, но с отложенным на пару месяцев чтением, в итоге неслучайная гибель автора является импульсом к ещё большей раскрутке информации, которую уже невозможно локализовать и перехватить.
- Флэшмоб. Всевидящий генерал планирует атаку на виртуальное государство в виртуальном мире [/me подмигивает]. Отправляет инструкции с отложенным чтением всем своим виртуальным подчинённым и издаёт приказ прочитать инструкцию как можно раньше, например, это каждому удастся через 5 дней.
- Борьба со спамом. Мистер Х не против получать письма от незнакомцев, но хочет помучить спамеров, тогда он ставит на свой ящик ассиметричный замок и по первому запросу на вход отдаёт открытый ключ с отложенным чтением минут на 10. В этом случае предполагается, что речь идет о перегрузке спамеров вычислительной задачей, а не о простом ожидании, т.е. это частный случай реализации.
Методы реализации
- Криптографический. Отложим чтение описания этого метода на время прочтения последующих десяти методов, если вы всё ещё не полюбили goto.
- Астрономический. Использование глобальных часов, например выход планеты из-за солнца. Будет возможен и полезен в те близкие времена, когда любой человек сможет обнаруживать гарантированно неизвестные ранее планеты, т.е. примерно тогда, когда количество необнаруженных планет, доступных к обнаружению, будет чуть меньше, чем количество всех возможных 128-битных UID’ов 21го века. Предполагается, что необходимая для вскрытия пакетика с данными информация будет сниматься с самой планеты.
- Логистический. Почтальоны с задержкой, банковские ячейки. В этом страшно устаревшем методе страдает своевременный контроль доставки.
- Логистический 2. Отправляем сообщение на Луну, оно отражается и возвращается на Землю через секунду. Красиво, но не подходит – плохо, что мы опять не можем проверить доставку заранее.
- Биологический. Если нам надо передать только пару бит, мы можем выдать получателю пачку семян цветов, а он должен будет их выращивать до середины лета, когда узнает цвет лепестков – и это будет решающий момент. Сканеры ДНК могут загубить этот перспективный первобытный метод.
- Биологический 2. Передаём свой ген через зачатие и таким образом идентифицируем именно себя — можно считать, что это и было сообщением.
- Аппаратное решение с будильником, отдающим сообщение в заданное время.
- Технологический. Отдаём сообщение в неочевидной форме, например, на непроявленной фотоплёнке и тогда получатель вынужден гарантированно потратить какое-то время на то, чтобы сходить в фотолабораторию.
- Сетевой. Шифрованное послание отдаем сразу, а пароль отдадут cron'ы с 10-ти каких-то предусмотренных серверов. Будет более красиво, если про эти сервера знает только целевой получатель нашего месседжа, а лучше чтобы и он их не знал, а лишь был готов получить от кого-то email.
- Корпоратократический. (Идея для евробизнеса). В объективном реале должна существовать как минимум одна межгалактическая защищённая инопланетянами незаинтересованная контора, которая выложит триллион открытых ключей для шифрования на ближайший миллион лет, а закрытые ключи для расшифровки будет публиковать в открытый доступ по одному в секунду в течение этого миллиона лет. На детском уровне реализуемо как два пальца, но почему-то я о таких лабораторках никогда прежде не слышал.
- Композитный. Ну да, куда же инженеру без такого очевидного продвинутого предложения…
Дополнительно. Если надо защитится от инквизиционного брутфорса, надо предусмотреть способ подмены сообщения, например, если речь идет о сокрытии дешифровочного ключа на пару-тройку месяцев, то было бы не плохо, чтобы, открывая сообщение поддельным ключом, при расшифровке получалось что-нибудь удобоваримое – похожее на правду.
А теперь к первому методу (см. метод 1) – криптографические методы. Суть: шифруем так, что быстро расшифровать никому не получится. Здесь речь пойдёт об алгоритмах, которые невозможно распараллелить. Я хочу дать почву для размышлений о выработке таких методов. Вот примеры последовательных нераспараллеливающихся (надеюсь) дешифровальных функций:
- Наподобие как ряд Фибонначи, только назад (обратнофибонначевский-мой метод).
- Вычисление обратной функции для f(f(f(...f(message)..)))
Ряд Фибонначи
Он определен как xn = xn-1+ xn-2, соответственно, мы можем вычислять xn-2 = xn — xn-1 до того конца, где x0 = x2 — x1.
Тогда при проведении вычислений нам нужно постоянно хранить всего два операнда. Конечно речь не об арифметической сумме, но об обратимом бинарном операторе.
Обратная функция к f(f(...f(message)...))
Алгоритм шифрования:
- Берём исходное сообщение любой длины или просто пароль.
- Генерируем ключ для, например, симметричного шифрования.
- Шифруем сообщение(пароль) ключом и добавляем ключ к зашифрованному сообщению (конкатенация).
- (1-3) Генерируем новый аналогичный ключ, шифруем и конкатенируем. Повторяем это многократно.
Алгоритм расшифровки очевиден – на каждой итерации расшифровки мы видим следующий нужный ключ.
Я предполагаю, что переход к частичной расшифровке промежуточных значений не даст прочитать начало сообщения, а, вообще, для стойкости можно применить подходящий необходимый режим шифрования. Также, ради юмора, можно изначально удлинить исходное сообщение мусором. Для симметричного шифрования время шифрования будет соизмеримо со временем расшифровки, что меня, например, пока что не смущает, если я обладатель современного процессора, быстрее которого найти сложно.
Погрешность криптографического метода.
Из объяснений видно, что время восстановления зависит от архитектуры процессора и его тактовой частоты. Чтобы этого избежать, можно объективно штамповать быстрые процессоры для вычисления этой единственной одной функции, тогда каждый человек будет иметь самый быстрый процессор за ничтожную цену. Конечно, для стратегических целей такой ширпотреб может не подойти, но тогда можно немножко подумать и использовать композитный метод (см. метод 11).
См. также метод 10. Тема криптографических сервисов, если о них подумать, даёт ряд бизнес-идей и сетевых протоколов, коих ещё свет не видывал. Пока что, реализованная на практике, мне известна только сертификация, но, наверняка, я просто очень мало знаю; а хранение радужных таблиц – это, по-моему, не очень здоровая тема, хотя и современная.
Автор: worldaround