Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
“Принцип Керкгоффса” (Kerckhoffs’s principle) в криптографии гласит, что планируемая стойкость криптосистемы не должна быть связана с тем, что сам используемый алгоритм держится в секрете (секретными должны быть только ключи). Но из этого вовсе не следует, что система с “секретным алгоритмом” заведомо нестойкая, как почему-то можно нередко прочитать – это как раз и есть обобщение, неверно основанное на более широком утверждении. Исходный практический принцип – о другом: если реализация криптосистемы оказалась в руках атакующего, то это не должно приводить к необходимости перехода на другую криптосистему, с другим алгоритмом, поскольку предыдущий оказался скомпрометирован.
Является ли криптосистема с “секретным алгоритмом” более стойкой или менее стойкой, по сравнению с “открытым алгоритмом”? С точки зрения оценки алгоритма, очевидно, сказать ничего нельзя: если “алгоритм секретный”, то его не оценить (но, конечно, “осадок остался”). Улучшается ли безопасность решения, использующего такой подход, в целом? Далеко не факт. Однако точно сказать довольно сложно – зависит от конкретной ситуации: нужно, как минимум, смотреть, в какой модели угроз действуют разработчики (действительно, может, они прежде всего защищаются от конкурирующей компании – кто первый выпустит очередную “умную лампочку”, а набор удачных алгоритмов позволяет экономить на аппаратуре).
Конечно, если вам предлагают некоторое решение, существенным образом основанное на “секретных криптографических алгоритмах, которые мы вам не покажем”, то это веский повод для возникновения самых разнообразных подозрений, в том числе, “криптографических” (да, профильные агентства известны тем, что засекречивают не только себя, но и алгоритмический состав используемой криптографии – это другая история). Вот только с “принципом Керкгоффса” (очень странная русскоязычная запись фамилии, кстати) это не связано. Заметьте, что и заявленное использование открытых алгоритмов ещё ничего не гарантирует – нужно определить, как именно эти алгоритмы используются, что к упомянутому принципу опять не относится.
Предположение о том, что открытая публикация алгоритмов позволяет их исследовать всем желающим, что “повышает стойкость”, так как будут найдены дефекты, тоже неплохо сопровождать нужными оговорками. Дело в том, что в качестве метода обобщения “принципа Керкгоффса” нередко приводят следующее рассуждение (уже упомянутое выше): “секретный алгоритм”, если он используется на практике, всё равно можно легко раскрыть, “дизассемблировав исполняемый код”. Это неоднократно продемонстрировано на практике, кто бы сомневался. Но, собственно, это всего лишь переложение в другую сторону содержания исходного принципа. Поэтому нужно отметить, что если препятствий на пути к исследованию алгоритма его засекречивание всё равно не создаёт, то и приписывание сюда “принципа Керкгоффса” оказывается тавтологическим.
Из написанного выше точно не нужно делать вывод, что есть какая-то криптографическая польза в сокрытии используемых на практике алгоритмов – нет, алгоритмы лучше опубликованные и открытые, чтобы было понятно, о чём там вообще речь, чтобы можно было реализовать самостоятельно, использовать в качестве иллюстрации и так далее, но это всё не есть “принцип Керкгоффса”, который о другом.
А что касается очевидного аспекта “дизассемблирования кода”, то, по сравнению со временами Керкгоффса (конец девятнадцатого века), тут тоже многое поменялось. Сейчас есть целое направление исследований, посвящённое тому, как бы так сделать аппаратный токен (чип), чтобы он работал как “чёрный ящик”, а его внутреннюю логическую структуру вскрыть было бы чрезвычайно сложно, как в чисто вычислительном смысле, так и в вычислительно-техническом – то есть, буквально, считывая непосредственно физическое устройство соответствующей микросхемы.
Комментировать »
Ещё из области распространённых странных формулировок, про квантовую запутанность для “разнесённых в пространстве” частиц: “Если измерить спин одной частицы, то значение спина другой, запутанной, мгновенно окажется противоположным”. Тут совершенно не важно, “спин” или ещё какой-то термин используется – смысл фразы сводится к якобы мгновенному изменению состояния в результате измерения между двумя частицами. Измеривший одну частицу экспериментатор как-то сразу знает, какое теперь состояние у второй. Формулировка весьма непонятная, конечно. Что означает – “знает”? Вторую частицу ещё кто-то должен измерить и проговорить результат. С другой стороны, можно считать, что состояние системы из двух частиц и так было известно, заранее, ну, если работает используемая теория; и это состояние вовсе “не поменялось мгновенно” для второй частицы, а, в лучшем случае, разрушилось. Не требуется наличие мгновенного действия, оно тут, как и пространство, оказывается привнесённым.
Исходный смысл в результате упрощения оказывается заменён на смысл противоположный (“смысл”, а не “спин”). Изначальное рассуждение, исторически, касалось совсем другой ситуации. А именно: если какой-то интегральный показатель известен для системы из пары частиц по происхождению этой системы, а кроме того, принято, что для этого показателя “действуют законы сохранения”, тогда из измерений, выполненных на одной частице, можно простым способом вычислить значение для второй, с нужной степенью точности (и это могут быть вычисления “дополняющих” характеристик, но не важно). Если постулируется, что некоторые показатели могут иметь значение 1/2 и -1/2, а сумма должна быть строго равна нулю, то если у вас результаты измерения для одной частицы дали 1/2, для другой остаётся лишь вариант -1/2, по определению, так сказать. Это совсем простое рассуждение, не требующее никаких “нелокальностей”.
Откуда тогда возникают разные сложные интерпретации и измерения в контексте неравенства Белла? А они возникают из дополнительных свойств, связанных с вероятностью получения того или иного результата при разных конфигурациях экспериментов на разных концах системы запутанных частиц. Грубо говоря, если вероятности получить значения 1/2 и -1/2 (из предыдущего примера) различаются для разных конфигураций измерителя, каким бы он ни был, то можно предложить такую последовательность измерений, ответы для которой не выйдет закодировать в выбранной теории конечным набором некоторых параметров, передаваемых, допустим, вместе с каждой из частиц, а придётся вводить какие-то дополнительные допущения в теорию – например, признать, что всегда используется состояние одной системы из двух частиц, а не двух систем, которые в какой-то момент оказались разделены, потому что так требует конкретное представление о “локальности”. Но, так или иначе, вовсе не “измерением мгновенно поменяли состояние другой частицы – сверхсветовая скорость коммуникации”. Тут, кстати, помимо странного запрета на “сверхсветовую скорость”, ещё непонятно, как определить тот самый момент “разделения”, потому что такое определение требует введения общего времени, а для измеряемой системы времени может и не быть – другая история.
Комментировать »
Среди технологических проблем, с которыми, например, сталкивается Google в разработке квантовых процессоров, называют и довольно простые по формулировке: как подключить множество кабелей-фидеров к небольшому чипу, на котором размещаются схемы, “реализующие кубиты”? “Физические кубиты” обязательно должны быть размещены плотно. То есть, чип Sycamore содержит 53 кубита и подключать приходится многие десятки кабелей, поскольку требуются индивидуальные высокочастотные линии. Соответственно, имеющиеся типы кабелей уже сильно мешают друг другу. Как быть с, потенциально, тысячами кабелей – не ясно.
Это технологический момент, конечно. Однако он тоже связан с тем, как именно могли бы не сработать имеющиеся модели в рамках создания квантовых компьютеров, которые вмещают 2^1000 и больше состояний. То есть, даже если просто попробовать делать кабель тоньше, то в какой-то момент потребуется использовать новые теории и новые модели для практических вычислений. И если, предположим, имеющийся кабель, – как модель, – двумерный, то вынужденный переход к трёхмерному представлению может добавить сложностей, привнеся в геометрию дополнительных “зацеплений”. Насколько хорошо воздействия, задающие квантовые состояния, будут “пролезать” по сверхтонким волокнам? Если правильно двигать масштаб, то на прикладном направлении достаточно быстро начинает просматриваться фундаментальное онтологическое явление – где и каким способом проходит граница, разделяющая микроскопические “квантовые” и “неквантовые” макроскопические объекты?
Впрочем, всё это просто технологические догадки. Насколько большим препятствием может оказаться физика СВЧ-сигналов внутри экзотических кабелей? Не очень понятно. Однако вряд ли стоит ожидать, что именно на этом прикладном направлении проявится принципиально непреодолимый теоретически момент – он должен проявиться где-то ещё.
Комментировать »
Иногда приходится слышать, что “нейросети и машинное обучение работают с действительными (вещественными) числами”. Звучит занимательно, потому что практически никакое действительное число в отдельный компьютер или даже в дата-центр, набитый специализированными “тензорными процессорами”, по записи не уместится. Более того, если бы действительные числа были доступны на этом технологическом направлении, то почему бы тогда не взять десятичную запись π и, вместо “обучения”, не найти там уже готовый набор коэффициентов под нужную задачу?
А процессоры для “машинного обучения”, в лучшем случае, работают с небольшим подмножеством целых чисел, даже когда используется надстройка в виде арифметики с плавающей точкой – что-нибудь из разряда bfloat16, FF32 и т.п. Эта арифметика максимально далека от действительных чисел, в которых, кстати, арифметику вообще очень сложно, если вообще возможно, построить даже теоретически. Свойства привычных “вычислений с погрешностью” уже для целых значений приводят ко всяким дополнительным хитростям, это кроме известных эффектов расщепления одного и того же числа на несколько представлений.
Можно было бы предположить, что использование в вычислениях некоторых математических констант выражается в том, что соответствующие этим константам бесконечные процессы как раз и позволяют системам машинного обучения достигать всё большей и большей точности, но и это не так: в современных многослойных “нейросетях” разрядность имеет совсем другое значение, а лучшая “сходимость” (что бы это ни значило) может достигаться при убывающей точности записи коэффициентов.
Комментировать »
Один из занимательных и продуктивных, с онтологической точки зрения, моментов в “классических” (каламбур) квантово-механических экспериментах связан с интерпретацией результатов двухщелевого опыта: как именно так выходит, что когда отдельный квант регистрируется в конкретной точке экрана, он тут же (мгновенно) не регистрируется в других точках, в которые мог бы попасть, как показывает дальнейший ход эксперимента. Этот момент отмечал ещё Эйнштейн, в 20-х годах прошлого века (или раньше, не важно).
То есть, сам иллюстративный смысл опыта состоит в том, что фотоны, прошедшие через щель (щели), регистрируются в разных точках экрана, а статистическая картина при этом соответствует интерференции (или дифракции, как хотите). Выходит, регистрация фотона в конкретном месте экрана как-то выключает возможность регистрации этого же фотона в других местах этого же экрана; в противном случае – места для квантовой механики не остаётся. Конечно, можно предположить, что фотон всё же регистрируется сразу во всех “доступных” точках, но конкретный экспериментатор в конкретном экземпляре вселенной обнаруживает только одну точку, однако это не очень-то содержательный вариант – так всё что угодно и как угодно можно объяснить.
В других вариантах получается, что либо нужны некоторые дополнительные параметры, заранее кодирующие путь фотона, либо это некоторое поле вероятностей переносит каждый отдельный фотон по случайному набору веток дерева, построенного на пиках “волн вероятности” (концепция, с одной стороны, близкая к современному взгляду на проблему, с другой – до степени смешения сходная с “эфиром”). Интерпретация “мгновенного выключения” других точек на экране-приёмнике в двухщелевом опыте как раз и привела к формулированию неравенства Белла, а также и ко многим технически продвинутым экспериментам, связанным с этим неравенством (неравенствами). Более того, из этих же интерпретаций, из превращения вероятностей, и вырастают квантовые вычисления, но тоже пока как концепция.
Комментировать »
Продолжение темы про “пересекающиеся параллельные прямые” и, конкретно, их популярное “пересечение” “у Лобачевского”. Понятно, что параллельные не пересекаются по определению. Но именно в геометрии Лобачевского параллельные прямые, так сказать, даже больше не пересекаются, чем в евклидовой геометрии. Дело в том, что соответствующий постулат гиперболической геометрии (Лобачевского) имеет следующий смысл: “через точку, не лежащую на данной прямой, в плоскости, которая задаётся этой прямой и точкой, можно провести более одной прямой, не пересекающей данную” (у Евклида – не более одной прямой). То есть, в версии от Лобачевского не только можно бесконечно много построить прямых, проходящих через точку и “параллельных” данной (“параллельных” здесь в кавычках потому, что используется в смысле значения из классической евклидовой системы), но и, в процессе построения, возникают как бы две “параллельности”: то есть, появляются граничные прямые, которые параллельны данной “влево” и параллельны “вправо” (сколь бы странным это ни показалось). Все прочие параллельные формируют пучок, зажатый внутри углов, образуемых двумя граничными прямыми. Собственно, именно эти две граничные прямые, дающие углы параллельности, и определяются как параллельные в этой геометрии. Строгое определение и свойства параллельности в геометрии Лобачевского порождают богатые её интерпретации. Однако даже и просто две прямых, проходящих через точку и не пересекающих данную, это уже существенно больше, чем одна у Евклида.
Комментировать »
IDN – это “многоязычные доменные имена” (Internationalized Domain Names), подразумевающие преобразование кодировок на стороне клиента: Unicode кодируется при помощи Punycode, поскольку в DNS, пока что, Unicode не используется (полезная технология, вообще говоря, полезна лишь там, где действительно нужна и может быть внедрена, но это история для другой записки). Весьма неудобный дополнительный слой, который образуется из-за обработки IDN, постоянно приводит к проблемам. Самая “заковыристая”, а поэтому постоянно вылезающая тут и там, проблема – нормализация unicode-записи. Собственно, не так давно мне пришлось исправлять эту проблему в одном из сервисов, работающих с доменными именами. Но если сейчас посмотреть и потестировать те или иные профильные веб-интерфейсы, преобразующие IDN, то, думаю, данная экзотическая проблема проявится у многих (это особенно близко регистраторам доменных имён). Кстати, если этот текст читают разработчики подобных инструментов, то потестируйте имеющиеся реализации. Строки для тестирования я привожу ниже, вместе с описанием логики проблемы (впрочем, она уже упоминалась в прошлогодней записке про шумерские цифры, которую вряд ли много кто прочитал).
Итак, Unicode устроен весьма продвинутым способом. Настолько продвинутым, что там есть поддержка дорисовывания различных дополнительных значков (диакритических, например) к символам. То есть, имеются “закорючки” со “знакоместом”, на которое знакоместо ставится связанный символ. Это весьма полезно во многих системах письма. Однако некоторые буквы некоторых алфавитов имеют и “основное” представление в качестве отдельного кода, уже включающее в себя “закорючку”. Пример – русская буква “й”. Графически, это буква “и”, но с “чёрточкой” (называется “бреве” или “кратка”). Unicode позволяет закодировать “чёрточку” разными способами, как минимум, двумя – вместе с буквой и отдельно.
Посмотрите на две строки: “биткойн.рф” (1) и “биткойн.рф” (2) – они должны выглядеть одинаково. Эта одинаковость обманчива, потому что в первом случае “й” записано как U+0438 + U+0306 – буква “и” + “знак бреве”, два значения; а во втором случае – это просто буква “й” (U+0439, одно значение), где, так сказать, всё включено.
Графически, строки эквивалентны, что производит неизгладимое впечатление на разработчиков, столкнувшихся с этим явлением впервые (ну и на тех, кто столкнулся в третий или в пятый раз – тоже впечатление производит). Расщепление сущностей тут случается на два уровня выше, чем графическая отрисовка. Промежуточный итог: две разных строки кодов выглядят абсолютно одинаково, чтобы протестировать различие – строки нужно скопировать через совместимый буфер обмена, так как при помощи привычной раскладки кириллической клавиатуры набрать их не получится (в некоторых других раскладках разная “диакритика” и прочие “дополнения” доступны отдельно, но далеко не факт, что результат сохранится именно как пара кодов).
Возвращаемся к IDN. Эта технология требует преобразования кодов Unicode к DNS-записи, алфавит которой допускает (без учёта регистра) для подстрок имён хостов символы [a-z] (от “a” до “z”), [0-9] и “минус” “-” (точки тут не считаем). Для кодирования этими ASCII-символами байтовых значений Unicode используется алгоритм, называемый Punycode. Принцип тут аналогичен тому, как работает, например, Base32 (или “кодирование в рунах”), детали отличаются, но нам это здесь не так важно. Важно, что Punycode ничего не знает про особенности Unicode и просто отображает в подмножество ASCII значения unicode-байтов (и обратно), то есть, разные кодовые записи одной буквы отобразятся в разные punycode-последовательности. Что не так трудно продемонстрировать на нашем примере: “биткойн” == “qsa11dvaajue4a”, а “биткойн” == “90aoddqe0a” (выглядит занятно, да).
Однако с точки зрения DNS “qsa11dvaajue4a” и “90aoddqe0a” – разные значения, поэтому имена, их содержащие, тоже будут разными. Разный способ записи одного и того же графического представления для целей DNS не подходит – в реестрах имён, на серверах имён, первоочередное значение имеет ASCII-представление. Поэтому и используется процесс, называемый нормализацией, который описывает соглашение о том, как разные “чёрточки” так приклеить к буквам, чтобы привести всё к одной последовательности кодов, а уже её использовать, например, в DNS. Естественно, unicode-нормализация важна не только в DNS, но подробное описание принципов остаётся за рамками этой записки – его можно найти в соответствующем документе. Отмечу, что современные библиотеки для работы с IDN, обычно, позволяют прозрачно использовать нормализацию, нужно только не забыть её правильно включить при вызове функций преобразования. И, вообще говоря, алгоритмов нормализации – несколько, что делает ситуацию интереснее. А полагать, что столкнуться с подобным на практике невозможно, будет ошибкой – копирование символов иностранных письменностей в составе имён, которые не удалось ввести с клавиатуры, вполне себе встречается.
Комментировать »
Так как собираюсь свой экспериментальный сервер TLS 1.3 tls13.1d.pw отключить, можно рассказать про сверхтехничную “пасхалку”, которая на этом сервере присутствует. Почему сверхтехничная – будет, думаю, понятно из описания.
Если посмотреть на HTTP-заголовки в ответе сервера, то можно заметить заголовок “X-TLS-ClientRandom-Challenge”, в котором написано следующее:
try="0xDEADDEADDEADC0DE0[0...]-in-Random"
Заголовок служит затравкой. Под Random – имеется в виду поле в TLS-сообщении ClientHello, поскольку сообщения сервера клиент всё равно не контролирует в нужном объёме. Поле Random – это 32 байта, отсюда многоточие в HTTP-заголовке. Вообще, если внимательно посмотреть на значения соответствующего поля (Random) в ServerHello, которое присылает экспериментальный сервер, то нетрудно заметить, что оно почти всегда (кроме случая HelloRetryRequest) равно DE:AD:DE:AD:DE:AD:C0:DE:00… (далее – нулевые байты). Конечно, это сделано специально. Обычный TLS-сервер должен писать в это поле случайные байты (ну или сигналы, разной степени секретности: самый известный сигнал – как раз признак HelloRetryRequest, значение которого прописано в RFC, но это уже совсем технические детали). Так или иначе, наличие специального HTTP-заголовка и фиксированное значение поля Random в ServerHello достаточное основание для того, чтобы попробовать прислать со стороны клиента сообщение с сигналом в Random.
Тут, впрочем, есть одна проблема: вряд ли какая-то распространённая библиотечная утилита позволяет записать в Random произвольное значение, а раскрытие данной “пасхалки” предполагает, что TLS-соединение успешно установлено, что исключает варианты с грубым ручным редактированием байтов в записанном сообщении и повторной его отправкой серверу. Поэтому для реализации нужен какой-то более или менее тонкий инструмент, позволяющий управлять одним из полей в начальном сообщении TLS-сессии (но, думаю, какие-то низкоуровневые утилиты такое умеют; либо можно самостоятельно запрограммировать или модифицировать готовый исходный код, это не очень-то сложно).
Если ClientHello поступило с нужным сигналом в Random, то сервер встраивает в тело HTTP-ответа ASCII-рисунок, который иначе получить нельзя. В этом и состоит “пасхалка”. Надо заметить, что за все эти годы работы сервера (с 2018) было несколько успешных, – в смысле TLS-соединения, – запросов с нужным кодом в Random. Так что кто-то эту техничную “пасхалку” раскрыл.
Комментировать »
Картинка ниже иллюстрирует эффект применения таблицы подстановок (π) из состава шифра “Кузнечик”: верхняя часть – это последовательно увеличивающиеся (слева направо или наоборот – как хотите) значения байтов, биты конкретного байта записаны вертикально, синий пиксель – единица (или нуль, но тогда зелёный – единица); нижняя часть – замена по таблице подстановок, где байт в данном столбце заменяется на соответствующее значение из таблицы. Способ применения таблицы максимально простой – значение входного байта заменяется на байт из таблицы, соответствующий по номеру, например, 0x00 заменяется на 0xFC и так далее, для каждого значения от 0x00 до 0xFF. Состав подстановок зафиксирован спецификацией шифра.

Хорошо виден основной эффект: в результате замены, расстояние между байтами возрастающей последовательности увеличивается, а “статистика”, порождаемая алгоритмом (n+1), скрывается. Подобные таблицы замены относятся к основным элементам, используемым при построении современных шифров. Естественно, сама по себе таблица никакой стойкости не обеспечивает, но, например, решает важную задачу “быстрого” размывания последовательностей “близких” значений во входных данных. Значения для замены специально подбираются так, чтобы эффективно решать именно эту задачу. От таблиц замены зависит стойкость шифров, так что исследование их свойств имеет большое значение (в том числе, с точки зрения обнаружения возможных архитектурных бэкдоров), в частности, конкретно с таблицами “Кузнечика” связана целая серия работ, но это тема для другой записки. Возможно, я напишу подробное описание работы шифра “Кузнечик” для dxdt.ru. С цветными картинками. (“Магма”, второй шифр из соответствующих ГОСТ, – достаточно давно подробно описан.)
Комментировать »
Можно представить “исторический” детектив, – как художественное произведение, – разворачивающийся в средневековом европейском сеттинге: суровый инквизитор-специалист прибывает в определённый город с заданием искоренить еретиков-культистов, о бурной деятельности которых донесли агенты. При этом доклады агентов приходили подробные и детальные: выглядело так, что еретики-культисты почти уже захватили город.
Однако на месте инквизитор обнаруживает, что никаких культистов в том городе не видно. Первое предположение: городская агентурная сеть готовила фиктивные доклады, чтобы как-то оправдывать свою прочую деятельность, но агенты переусердствовали – реально прислали инквизитора. Впрочем, такой расклад тоже вполне себе создаёт для него дело. Однако встреча с местным старшим агентом только всё запутывает: тот утверждает, что отчёты писались (на пергаменте, конечно) полностью по реальным событиям и только по ним, но одна проблема – недавно все локальные записи об этих культистах исчезли, так что подтвердить нечем. Тогда инквизитор проверяет записи и манускрипты, которые привёз с собой: странным образом, но всё, что касалось культистов, – исчезло.
В ходе разбирательства в городе инквизитор выясняет, что какие-то следы культистов всё же есть, но со странностями: например, их магистр в какой-то момент по совершенно неясным причинам потерял доступ к святилищу – просто, исчезли ключи (магические, конечно), позволявшие входить в здание. В святилище проходили собрания, которые позволяли развивать общественное влияние культа. Естественно, исчезли и все манускрипты, свитки и другие носители как важнейших текстов, так и сиюминутных сведений – списки последователей, статистика сборов пожертвований, календари, расписания и расстановки для обрядов (это уже детали). То есть, ко всей тематической информации, к реквизитам доступа (кристаллы и металлические механизмы) оказалась применена известная максима: “данные удалены” (что бы это ни значило в средневековом сеттинге, да ещё и относительно механизмов). А без этих данных и реквизитов доступа – культ уже не работает, поэтому культисты просто разошлись и занялись другими делами.
В какой-то момент инквизитор отправляет запрос в Центральную библиотеку (шифровкой по почте, конечно, но гонцы подобные депеши доставляют быстро) – дабы получить какие-то подробности из отчётов о культистах. Но, как вы уже догадались, ответ не обнадёживает: записи исчезли и в Центральной библиотеке – там нет отчётов о еретиках-культистах из этого, определённого города (но остались отчёты о других). И даже исчезли записи об отправке самого инквизитора с заданием. Но, к счастью, маршал, который составлял задание, помнит, что действительно его составлял, а вот записи – отсутствуют. Поэтому инквизитору всё же лучше побыстрее вернуться обратно, чтобы попытаться разобраться в ситуации.
В итоге, собрав ещё некоторую информацию, хорошо обдумав события, инквизитор приходит к выводу, что некая третья сила, о которой до этого момента не знала Инквизиция, разобралась с еретиками-культистами раньше, но сделала это новым, “информационным” способом – удалив тематические данные из всех источников. Можно было бы разделаться с еретиками-культистами более суровыми методами, но это наверняка вызвало бы агрессивную реакцию, и, возможно, не только со стороны самих культистов. Кроме того, шум и слухи могли бы добавить популярности культу. “Удаление данных” оказалось гораздо более эффективным методом: даже инквизиторы теперь заняты выяснением способов незаметного и масштабного удаления данных, а о культистах – просто забыли.
Конечно, некоторые моменты тут выглядят надуманными, но это только из-за средневекового сеттинга. Достаточно перенести историю в Новое средневековье, в контекст “удаления цифровых следов и доступов”, чтобы она обрела нужную строгость.
Комментировать »
Сокрытие “статистики” входного потока данных – основная характеристика, связанная со стойкостью шифра. Собственно, в обобщённом смысле, цель использования шифра состоит именно в том, что, после обратимого преобразования, всякая “статистика”, порождающая различительные характеристики для входных сообщений, оказалась вычислительно эквивалентна случайной. Именно так нужно представлять эффект действия современного шифра. Можно представить, что есть некая “коробочка”, которая получает на вход открытый текст (исходное сообщение), а выводит либо результат зашифрования (с некоторым секретным ключом, который, для простоты, каждый раз новый), либо случайную, равновероятную последовательность битов (подходящую по длине). Тогда, для стойкого шифра, внешний наблюдатель, передающий в “коробочку” открытый текст, не может с высокой вероятностью определить, что именно пришло в ответ – результат зашифрования или случайные биты (тут нужно учитывать повторные попытки, свойства ключей, делать оговорки про вычислительные возможности и т.д., но это всё детали).
Так, если взять в качестве примера привычную запись текста на естественном языке, то простой шифр алфавитной замены (“А” -> “Д”, “Б” -> “Э” и т.д.: буквы заменяются на буквы по перестановке того же алфавита, ключом является перестановка) не обладает только что описанным свойством: если попросить “коробочку” зашифровать слово “длинношеее”, то результат, очевидно, получится угадываемым (ну, конечно, в той степени, в какой вообще можно поверить в случайные биты).
Данное представление с “размытием статистики” очень полезно для верхнеуровневого понимания свойств шифров. Так, отсюда прямо следует свойство “сокрытия информации” (фольклорное “нельзя прочитать”): если результат работы шифра нельзя отличить от случайного набора байтов, то и “прочитать ничего нельзя” (или “можно прочитать всё что угодно” – тут возможны разные интерпретации).
Интересно, что внесение дополнительного слоя сохранения некоторых статистических характеристик является одной из теоретических областей создания алгоритмических закладок/бэкдоров в шифрах. Представьте блочный шифр. То есть, такой шифр, который на вход получает, предположим, строго 256 битов и 256-битный ключ, а выводит тоже строго 256 битов шифротекста. Многие современные шифры так работают. Если шифр идеальный, то вывод будет равновероятным, а для успешного поиска нужно будет перебирать, хотя бы, 2^255 вариантов.
Однако можно предположить, что специальный дефект в алгоритме создаёт недокументированное разбиение всего пространства шифротекстов на некоторые интервалы (даже не обязательно, чтобы на непересекающиеся). Попадание шифротекста в тот или иной интервал связано со значением некоторых битов ключа. Тогда, если проверка свойств шифра проводится для нескольких случайных входных блоков, даже при использовании одного значения ключа, обнаружить какие-то подозрительные разбиения не получится. Однако сторона, знающая о недокументированном дефекте алгоритма, может передать кортеж специально подготовленных блоков открытого текста, прочитать вывод шифра, определить последовательность интервалов, в которые попали блоки шифротекста, и вычислить интервал возможных значений ключа (ключ использовался один и тот же). Этот вычисленный интервал для ключа может быть небольшим, – например, 2^32 значений, – что позволяет найти ключ перебором.
Так как использование одного значения ключа для зашифрования потока данных из многих блоков это обычная практика – подобная атака явяется вполне себе практической, но, конечно, необходимо наличие бэкдора в алгоритме шифра. Подобные разбиения могут достигаться при помощи специальных алгебраических конструкций внутри шифра (например, в таблицах подстановок, “регистровых” сдвигах и т.д.; опять же, это технические детали, довольно хитрые), однако устроить хорошо скрытый бэкдор весьма непросто.
Комментировать »
Новый