Область техники, к которой относится изобретение
Изобретение относится к вычислительному устройству, выполненному с возможностью вычисления функции данных на основании входного значения функции, причем устройство содержит электронное запоминающее устройство, хранящее сеть таблиц, конфигурированную для функции данных, и электронный процессор, соединенный с запоминающим устройством и выполненный с возможностью вычисления функции данных путем применения сети таблиц, причем устройство выполнено с возможностью получения входного значения функции в качестве кодированного входного значения, причем сеть таблиц выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения, кодированного выходного значения функции, причем выходное значение функции равно результату применения функции данных к входному значению функции.
Кроме того, изобретение относится к соответствующему способу и компилятору.
Уровень техники
В US 2012/0300922 раскрыт способ формирования таблицы соответствий, пригодной для использования в способе криптографической обработки и содержащий этап, на котором сохраняют множество входных данных и выходных данных в таблице, причем каждые входные данные связаны по меньшей мере с одними выходными данными в таблице. Для каждых входных данных получают по меньшей мере одни из выходных данных путем применения кодирующей функции к первым вспомогательным данным и к зашифрованным промежуточным данным в зависимости от входных данных.
В US 2012/0155638 раскрыто, что в области криптографии при помощи компьютеров, такой как блочное шифрование, стойкость шифра к атакам повышена путем защиты ключа шифра путем применения к нему линейной перестановки перед использованием одного ключа для шифрования или дешифрования сообщения. Это в особенности предпочтительно в среде «белого ящика», в которой взломщик имеет полный доступ к алгоритму шифрования, включая внутреннее состояние алгоритма во время его выполнения. Этот способ и связанное с ним вычислительное устройство полезны в случае, когда ключ извлекают посредством некоторого процесса, и таким образом он неизвестен, когда компилируется программный код, реализующий шифрование. Этот случай обычно имеет место, когда у шифрования много пользователей, каждый из которых имеет свой собственный ключ, или когда каждый сеанс пользователя имеет свой собственный ключ.
В традиционной криптографии обычно предполагалось, что взломщик только получает доступ к входным и выходным значениям защищенной системы. Например, взломщик может быть способен видеть простой текст, поступающий в систему, и видеть зашифрованный текст, выдаваемый системой. Хотя взломщик мог попытаться добиться полезного результата путем анализа таких пар вводов/выводов, возможно даже с применением вычислительно затратных способов, не предполагалось, что у него будет непосредственный доступ к системе, которая реализовала такое поведение в отношении ввода-вывода.
Недавно возникла необходимость учета моделей угроз, в которых предполагается, что взломщику известны некоторые сведения об упомянутых реализациях. Например, можно рассматривать угрозу анализа побочных каналов и угрозу обратной разработки. Кроме того, вопросы, которые ранее были связаны в основном с проблемами безопасности, распространились на другие области, такие как неприкосновенность частной жизни. Хотя криптографические системы, обрабатывающие информацию в сфере безопасности, такую как криптографические ключи, остаются главным вопросом, защита других программ, например программ, обрабатывающих информацию, относящуюся к частной жизни, также стала важной.
Давно известно, что компьютерные системы раскрывают некоторую информацию по так называемым побочным каналам. Наблюдение за поведением компьютерной системы в отношении ввода-вывода может не обеспечить какой-либо полезной информации в отношении важной информации, такой как секретные ключи, используемые компьютерной системой. Но компьютерная система имеет другие каналы, за которыми можно наблюдать, например ее энергопотребление или электромагнитное излучение; эти каналы называются побочными каналами. Например, могут измеряться небольшие изменения в мощности, потребляемой различными командами, и изменения в мощности, потребляемой при выполнении команд. Измеренное изменение может коррелироваться с важной информацией, такой как криптографические ключи. Эта дополнительная информация в отношении секретной информации, находящаяся за пределами наблюдаемого и преднамеренного поведения в отношении ввода-вывода, называется побочным каналом. По побочному каналу компьютерная система при использовании может «выдавать» секретную информацию. Наблюдение и анализ побочного канала могут обеспечить взломщику доступ к лучшей информации, чем та, которая может быть получена только посредством криптоанализа поведения в отношении ввода-вывода. Один известный вид атаки по побочному каналу является так называемым дифференциальным анализом мощности (DPA).
Существующие подходы к проблеме побочных каналов вносят в работу вычислительных систем элемент произвольности. Например, среди настоящих операций, посредством которых выполняется программа, могут быть вставлены ложные команды, чтобы сделать неясной взаимосвязь между потреблением мощности и данными, над которыми работает программа.
Еще более сильным приемом атаки на компьютер является так называемое обратное проектирование. Во многих ситуациях, связанных с безопасностью, взломщики могут иметь полный доступ к компьютеру. Это позволяет им дизассемблировать программу и получать любую информацию о компьютере и программе. При достаточных усилиях любой ключ, спрятанный, например, в программе, может быть обнаружен взломщиком.
Защита от такой схемы атаки оказалась очень сложной. Один вид контрмеры представляет собой так называемую криптографию методом белого ящика. В криптографии методом белого ящика ключ и алгоритм объединены. Итоговый алгоритм работает только с одним конкретным ключом. Кроме того, алгоритм может быть реализован в виде так называемой сети таблиц поиска. Вычисления преобразованы в последовательность поисков в таблицах, зависимых от ключа. Пример такого подхода описан, например, в “White-Box Cryptography and an AES Implementation”, под авт. S. Chow, P. Eisen, H. Johnson, P.C. van Oorschot.
Раскрытие изобретения
Известные меры противодействия для компьютерных систем не вполне удовлетворительны. Например, мерой против внесения произвольности может быть статистический анализ. Маскировке программного обеспечения можно противостоять путем более совершенного анализа работы программы. Таким образом, существует потребность в обеспечении новых и улучшенных мер противодействия.
Например, один способ маскировки компьютерной программы состоит в кодировании входных и выходных значений и работе с кодированными значениями в максимальной возможной мере. Для выполнения вычислений возможно даже использование так называемых сетей таблиц. Такая сеть таблиц может быть создана вручную или посредством специализированных программ, например в случае криптографии методом белого ящика, или посредством компиляторов общего назначения. Предполагалось, что, в общем случае, таблица маскирует вид выполняемой операции. Однако авторы изобретения обнаружили, что последнее в общем неверно.
Даже если входные и выходные данные функции кодированы, статистические свойства отношения ввода и вывода могут раскрывать то, какая функция закодирована. Ниже приведен пример данного явления.
Рассмотрим W={0,1,...,N-1}, кодировку E и ее соответствующее декодирование D=E-1. Пусть F и G обозначают кодированное суммирование по модулю N и кодированное умножение по модулю N, соответственно. То есть определим как где обозначает суммирование по модулю N, и как где обозначает умножение по модулю N.
Для каждого фиксированного значения x мы имеем {F(x,y)| Также для каждого ненулевого и натурального N мы имеем и . Для ненатуральных N существуют аналогичные ситуации.
Вследствие этого, вне зависимости от кодировки E можно определить что F не может быть кодированным умножением по модулю N, и что G не может быть кодированным суммированием по модулю N. Для этого у взломщика есть по меньшей мере два способа. Он может зафиксировать два различных элемента x1 и x2 в W и сравнить для и для всех y. Если эти числа равны для всех y, то H не может представлять умножение по модулю N; если эти числа находятся в соответствии для всех y, то H не может представлять суммирование по модулю N. Взломщик, который не может выбирать записи в таблице для считывания, но может наблюдать результаты обращений к таблице выполняемой компьютерной программой, может использовать факт, что каждый элемент из W в равной степени часто имеет место в качестве выходных данных, в то время как для G элемент E(0) имеет место в качестве выходных данных значительно более часто. Таким образом, если элемент W имеет место гораздо более часто, чем другие элементы W, в качестве выходных данных H, то H более вероятно представляет собой замаскированное умножение по модулю N, чем суммирование по модулю N.
Другими словами, если используется один из лучших доступных способов маскировки программного обеспечения, т.е. если для вычислений используется полное кодирование входных и выходных значений и сети таблиц, то тем не менее путем исследования программы может быть получена некоторая информация. Такая ситуация является весьма нежелательной.
Было бы полезно иметь устройство или способ, которые решают некоторые из описанных выше вопросов. Изобретение определено независимыми пунктами формулы. В зависимых пунктах формулы определены предпочтительные варианты выполнения.
Первый аспект изобретения относится к компилятору, выполненному с возможностью компиляции компьютерной программы причем компилятор выполнен с возможностью синтаксического анализа компьютерной программы для идентификации множества операторов, включая функцию (f) данных и функцию (g) состояния, и обеспечения сети таблиц, конфигурированной для функции данных и функции состояния, причем сеть таблиц выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения, причем кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния, причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение.
Также предусмотрено вычислительное устройство, выполненное с возможностью выполнения компьютерной программы, компилированной таким компилятором. Вычислительное устройство содержит электронное запоминающее устройство, хранящее сеть таблиц, конфигурированную для функции данных, и электронный процессор, соединенный с запоминающим устройством и выполненный с возможностью вычисления функции данных путем применения сети таблиц.
Устройство выполнено с возможностью получения входного значения функции в качестве кодированного входного значения, причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение. Сеть таблиц дополнительно выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения, причем кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния.
Получение входного значения функции в качестве кодированного входного значения означает, что устройство принимает входные данные функции, поскольку оно принимает кодированное входное значение, в котором она закодирована вместе с другим значением.
Устройство вычисляет две функции: функцию данных, которая принимает в качестве входных данных входное значение функции и обеспечивает выходное значение функции, и функцию состояния, которая принимает в качестве входных данных входное значение состояния и обеспечивает выходное значение состояния. Однако хотя две возможно различных функции вычисляются на основании отдельных входных значений, необходима только одна сеть таблиц. Упомянутая одна сеть таблиц принимает единственное кодированное входное значение, в которое зашифрованы как входное значение функции, так и входное значение состояния. Входное значение состояния может принимать по меньшей мере два различных значения.
Реализация двух функций в одной сети таблиц, в которой входные значения функции кодированы вместе с одним из множества значений состояния, имеет преимущество, состоящее в том, что входное значение функции соответствует множеству различных кодированных входных значений. Это означает, что предотвращаются атаки, основанные на просмотре соответствия между входными значениями и промежуточными значениями. Кроме того, преимущество состоит в том, что функция данных и функция состояния независимы друг от друга, т.е. функция состояния не зависит от какого-либо из (возможно множества) входных значений функции, и функция данных не зависит от какого-либо из (возможно множества) входных значений состояния. Это означает, что одна и та же сеть таблиц может быть использована для различных функций в различное время; для различных функций в одно и то же время; или для одного, но не для другого. Кроме того, эти три варианта могут быть использованы в одной и той же программе для различных сетей таблиц. Это значительно увеличивает трудность обратной разработки. В самом деле, даже с точки зрения теории информации, наличие сети таблиц, которая кодирует две различные функции, делает невозможным определение из самой сети того, для какой функции она используется, поскольку сеть фактически конфигурирована для двух функций, любая из которых может использоваться или не использоваться. Таким образом, взломщик вынужден анализировать за то же самое время значительно большие части программы.
Шифрование (часто обозначаемое ‘E’) является обратимым, то есть из кодированной пары из входного значения функции и входного значения состояния могут быть восстановлены как входное значение функции, так и входное значение состояния. Подобным образом, из кодированной пары из выходного значения функции и выходного значения состояния могут быть восстановлены как выходное значение функции, так и выходное значение состояния.
Шифрование является закрытым, то есть различные варианты реализации системы могут использовать различные способы шифрования входных и выходных сообщений вместе. Кроме того, шифрование по меньшей мере частично соответствует принципу диффузии. Значения в кодированном значении зависят по большей части от кодированного значения. Например, когда входное/выходное значение извлекают из кодированного входного/выходного значения, то входное/выходное значение предпочтительно зависит от всего кодированного входного/выходного значения; по меньшей мере, оно зависит от большего числа битов, чем размер в битах самого входного/выходного значения. Результатом этого является то, что информация о входном/выходном значении распределяется по множеству битов. Предпочтительно, если у кого-либо есть доступ только к части кодированного значения, и невозможно извлечь те значения, которые оно кодирует, даже если бы кому-либо была досконально известна функция кодирования/декодирования. Следует отметить, что традиционно в кодировании зачастую используется ключ. Использование кодирования с ключом является привлекательной возможностью, но ввиду относительно малого размера входных/выходных значений также возможно представить кодировку в виде таблицы. По этой причине кодирование и шифрование в контексте переменных значений, таких как входные/выходные значения или промежуточные значения, используются взаимозаменяемо.
Поскольку сеть таблиц может представлять две функции, и в самом деле кодированное входное значение содержит два вида входных данных (функцию и состояние), из сети таблиц невозможно определить, является ли оно кодированной версией функции данных или функции состояния. В самом деле, сеть таблиц полностью приспособлена для вычисления любой из функций и в самом деле вычисляет обе функции на основании независимой переменной или набора переменных (в вариантах выполнения функций данных и/или функций состояния, имеющих множество входных данных).
Например, применительно к приведенному выше примеру можно было бы получить сеть таблиц, которая могла бы быть использована для выполнения сложения и умножения. Путем исследования сети таблиц невозможно определить, что из них используется, поскольку на самом деле сеть таблиц может выполнять любое из этих действия.
Функция данных может принимать единственное входное значение или множество входных значений. Функция состояния может принимать единственное входное значение или множество входных значений. В варианте выполнения число входных значений для функций данных и состояния является одинаковым. Например, устройство может быть выполнено с возможностью получения множества входных значений функции в качестве множества кодированных входных значений. Каждое из множества кодированных входных значений объединяет входное значение функции из множества входных значений вместе с входным значением состояния из множества входных значений состояния, шифруемые совместно в единственное значение. Сеть таблиц выполнена с возможностью приема в качестве входных данных упомянутого множества кодированных входных значений и обеспечения в качестве выходных данных кодированного выходного значения. Кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение. Выходное значение функции равно результату применения функции данных к множеству выходных значений функции, и выходное значение состояния равно результату применения функции состояния к множеству входных значений состояния.
Ниже будут показаны несколько различных способов формирования таких сетей таблиц. Любое промежуточное значение, равное выходному значению функции или зависящее от него, включая выходное значение функции, имеет место только в кодированной форме, т.е. зашифровано вместе с переменной состояния. В идеальном случае это свойство также верно для входной переменной состояния, хотя может быть необходимо пойти на уступки в данном отношении для удовлетворения конкурирующих требований к доступным ресурсам. Например, один способ обеспечения данного свойства состоит в создании сети таблиц, содержащей одну таблицу принимающую в качестве входных данных кодированное входное значение и обеспечивающую в качестве выходных данных кодированное выходное значение.
Вычисление состояния можно до некоторой степени отделить, например сеть таблиц может содержать таблицу извлечения состояния и таблицу функции состояния. Таблица извлечения состояния конфигурирована таким образом, что применение этой таблицы извлечения состояния к кодированному входному значению обеспечивает входное значение состояния. Таблица функции состояния конфигурирована таким образом, что применение этой таблицы функции состояния к входному значению состояния обеспечивает выходное значение состояния. Следует отметить, что даже если значение состояния получено в сети таблиц, входное значение функции остается закодированным. Также следует отметить, что таблицы извлечения состояния могут обеспечивать значение состояния в кодированной форме, хотя и в кодированной форме, которая не зависит от входного значения, например кодированное значение состояния, получаемое только путем шифрования значения состояния.
Когда выходное значение состояния стало доступным, возможно в кодированной форме, можно использовать таблицу перекодирования. Таблица перекодирования принимает в качестве входных данных кодированное значение и обеспечивает кодированное значение, однако кодировка изменена. Например, таблица перекодирования может быть выполнена с возможностью приема в качестве входных данных кодированного входного значения и выходного значения состояния, и обеспечения в качестве выходных данных перекодированного входного значения. Перекодированное входное значение объединяет входное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение. К перекодированному входному значению может быть применена таблица функции данных для получения кодированного выходного значения. Например, таблица функции данных может быть выполнена с возможностью приема в качестве входных данных перекодированного входного значения и в качестве выходных данных - кодированного выходного значения.
Это уменьшает размер требуемых таблиц. И все же это остается тем случаем, когда сеть таблиц вычисляет две функции: функцию данных и функцию состояния. Взломщик не может знать, для какой функции используется сеть таблиц. Кроме того, даже хотя значение состояния имеет место в форме, которая не является кодированной вместе с входным значением, входное значение существует только в кодированной форме.
Возможно уменьшение размера таблиц в еще большей степени. Например, сеть таблиц может содержать таблицу приведенной функции состояния и первую таблицу перекодирования. Таблица приведенной функции состояния выполнена с возможностью приема входного значения состояния и обеспечения в качестве выходных данных промежуточного значения состояния, равного результату применения приведенной функции состояния к входному значению состояния, причем диапазон приведенной функции состояния больше единственного значения и меньше диапазона функции состояния. Первая таблица перекодирования выполнена с возможностью приема в качестве входных данных кодированного входного значения и промежуточного значения и обеспечения в качестве выходных данных перекодированного входного значения, причем перекодированное входное значение объединяет входное значение функции вместе с промежуточным значением состояния, шифруемые совместно в единственное значение.
Таким образом сеть таблиц вычисляет три функции - функцию состояния, приведенную функцию состояния и функцию данных. Поскольку приведенная функция состояния имеет меньший диапазон, чем функция состояния, таблица для функции данных уменьшена. Следует отметить, что диапазон приведенной функции состояния имеет размер более 1, так что каждое входное значение данных имеет более одного экземпляра даже в пространстве приведенных состояний. В варианте выполнения размер, т.е. число значений, пространства приведенных состояний, составляет по меньшей мере 2, 4 или 8.
Например, сеть таблиц может содержать таблицу функций данных и вторую таблицу перекодирования. Таблица функций данных выполнена с возможностью приема в качестве входных данных перекодированного входного значения, и в качестве выходных данных - перекодированного выходного значения, причем перекодированное выходное значение объединяет выходное значение функции вместе с промежуточным значением состояния, шифруемые совместно в единственное значение. Вторая таблица перекодирования выполнена с возможностью приема в качестве входных данных перекодированного выходного значения и выходного значения состояния, и обеспечения в качестве выходных данных перекодированного выходного значения.
В варианте выполнения сеть таблиц конфигурирована для входных значений данных, имеющих по меньшей мере 4, предпочтительно по меньшей мере 8 битов. В варианте выполнения сеть таблиц конфигурирована для входных значений состояния, имеющих по меньшей мере 4, предпочтительно по меньшей мере 8 битов.
В варианте выполнения входные значения данных и выходные значения состояния имеют одинаковый размер в битах. Если функция данных и функция состояния имеют одинаковый размер на входе, они неразличимы на этой стороне. В варианте выполнения выходные значения данных и выходные значения состояния имеют одинаковый размер в битах.
В варианте выполнения входные значения данных и значение состояния имеют одинаковый размер в битах и имеют 4 бита или более. В варианте выполнения входные значения данных и значение состояния имеют одинаковый размер в битах и имеют 6 битов или более. В варианте выполнения входные значения данных и значение состояния имеют одинаковый размер в битах и имеют 8 битов или более.
Аспект изобретения относится к способу выполнения компьютерной программы, компилированной компилятором по первому аспекту изобретения, причем способ содержит этапы, на которых вычисляют функцию данных путем применения сети таблиц к кодированному входному значению и обеспечивают в качестве выходных данных кодированное выходное значение, причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение, кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния.
Вычислительное устройство является электронным устройством, например мобильным электронным устройством, мобильным телефоном, абонентской приставкой, компьютером или тому подобным.
Способ согласно изобретению может быть реализован на компьютере в виде реализуемого компьютером способа, или в специализированном аппаратном обеспечении, или в сочетании того и другого. Исполняемый код для способа согласно изобретению может быть сохранен в компьютерном программном продукте. Примеры компьютерных программных продуктов включают в себя запоминающие устройства, оптические запоминающие устройства, интегральные схемы, серверы, программное обеспечение в сети и т.п. Предпочтительно компьютерный программный продукт содержит постоянное программное кодовое средство, сохраненное на считываемом компьютером носителе, для выполнения способа согласно изобретению, когда упомянутый программный продукт выполняется на компьютере.
В предпочтительном варианте выполнения компьютерная программа содержит кодовое средство компьютерной программы, выполненное с возможностью выполнения всех этапов способа согласно изобретению, когда компьютерная программа выполняется на компьютере. Компьютерная программа предпочтительно реализована на считываемом компьютером носителе.
Краткое описание чертежей
Эти и другие аспекты изобретения будут очевидны из вариантов выполнения, описанных ниже, и будут поясняться с обращением к ним. На чертежах:
Фиг. 1 - блок-схема, иллюстрирующая сеть таблиц, реализующую функцию данных и функцию состояния,
Фиг. 2 - блок-схема, иллюстрирующая сеть таблиц, реализующую функцию данных и функцию состояния,
Фиг. 3a - блок-схема, иллюстрирующая сеть таблиц, реализующую функцию данных и функцию состояния,
Фиг. 3b - блок-схема, иллюстрирующая сеть таблиц, реализующую функцию данных и функцию состояния,
Фиг. 3c - блок-схема, иллюстрирующая сеть таблиц, реализующую функцию данных и функцию состояния,
Фиг. 4 - блок-схема, иллюстрирующая сети таблиц в общем случае,
Фиг. 5 - блок-схема, иллюстрирующая вычислительное устройство,
Фиг. 6 - блок-схема, иллюстрирующая компилятор,
Фиг. 7 - блок-схема, иллюстрирующая способ вычисления функции данных.
Следует отметить, что элементы, имеющие одинаковые номера ссылочных позиций на различных чертежах, имеют одинаковые конструктивные признаки и одинаковые функции или являются одинаковыми сигналами. Если функция и/или конструкция такого элемента уже объяснена, нет необходимости в их повторном объяснении в подробном описании.
Осуществление изобретения
При том, что настоящее изобретение может быть реализовано во множестве различных форм, один или более конкретных вариантов выполнения показаны на чертежах и будут подробно описаны в настоящем документе, при понимании того, что настоящее описание следует рассматривать как пример принципов настоящего изобретения, и оно не предназначено для ограничения изобретения конкретными показанными и описанными вариантами выполнения.
На чертежах таблицы показаны прямоугольниками, а значения показаны прямоугольниками с отсеченным правым верхним углом.
Фиг. 4 иллюстрирует общую концепцию сети таблиц, показана сеть 400 таблиц. В виде сети таблиц может быть выражено большинство функций. В частности, таким образом может быть выражено любое сочетание арифметических и логических операций. Например, сеть таблиц может представлять собой реализацию, например, шифра. Показаны 8 таблиц из множества таблиц. Таблица преобразует входное значение в выходное значение посредством поиска входного значения в таблице. Показаны три из входных таблиц 410 для приема входных данных из внешнего окружения реализации функции. Показана одна из выходных таблиц 430. Выходные таблицы 430 вместе образуют выходные данные реализации функции, например посредством соединения. Показаны четыре таблицы из промежуточных таблиц 420, 422, 424, 426, которые принимают по меньшей мере одни входные данные от другой из таблиц, и которые обеспечивают выходные данные, подлежащие использованию в качестве входных данных для по меньшей мере одной другой таблицы. Вместе таблицы образуют сеть. Шифр может быть блочным шифром; блочный шифр может быть выполнен с возможностью шифрования или дешифрования. Блочный шифр шифрует блочный шифр, например шифр AES (усовершенствованный стандарт шифрования). Реализация может быть выполнена для конкретного ключа, и в таком случае таблицы могут зависеть от конкретного ключа.
Таблица 426 поиска представляет оператор, имеющий два входа и один выход. Построение таблиц поиска для унарных операторов может быть расширено для бинарных операторов. Например, второй вход может быть подвергнут ‘каррированию’; в отношении методики преобразования функций каррирование представляет собой методику преобразования функции, которая принимает множество из n аргументов (или n-ные аргументы) таким образом, что она может быть представлена в виде последовательности функций, каждая из которых имеет один аргумент. При использовании этого подхода таблица 426 поиска реализуется в виде множества унарных таблиц поиска. С другой стороны, можно также формировать строки битов для каждых входных данных и соединять результаты. Таким образом таблица поиска формируется непосредственно, и получается одна таблица большего размера. Хотя конфигурация таблиц поиска может быть различной в зависимости от построения, они имеют равный размер и одинаковые свойства. Следует отметить, что нет необходимости в кодировании множества входных значений в соответствии с одной и той же кодировкой.
Сеть таблиц может использовать множество таблиц, кодирующих две функции, или иметь подсети таблиц, которые осуществляют кодирование для двух функций. Система может быть выполнена с возможностью использования той функции состояния или данных в зависимости от текущей кодировки. Могут быть применены методики маскировки сети таблиц, также в сети таблиц, описанной в настоящем документе.
Например, предположим, что вторая таблица принимает в качестве входных данных выходные данные первой таблицы, затем выходные данные первой таблицы могут быть кодированы секретной, например выбираемой случайным образом, кодировкой, и входные данные второй таблицы могут быть кодированы посредством инверсии этой кодировки.
На Фиг. 1 показана сеть 180 таблиц, встроенная в более крупную сеть 100 таблиц. Сеть 180 таблиц содержит только одну таблицу 130.
Сеть 180 таблиц выполнена с возможностью приема множества кодированных входных значений в качестве входных данных, причем показаны кодированные входные значения 122 и 124. Сеть 180 таблиц выполнена с возможностью обеспечения в качестве выходных данных кодированного выходного значения 160. В нижеприведенном описании мы предположим, что функции данных и функции состояния имеют два входных значения и единственное выходное значение. Однако варианты выполнения могут быть расширены до любого числа входных значений и/или выходных значений. В частности, возможны функции данных/состояния с единственным входом и единственным выходом, и возможны функции данных/состояния с двумя входами и единственным выходом.
Сеть 180 таблиц конфигурирована для функции данных и хранится в электронном запоминающем устройстве, соединенном с электронным процессором, выполненным с возможностью вычисления функции данных путем применения сети таблиц.
Кодированное значение 122 получают из входного значения 102 функции и входного значения 112 состояния. Например, это может быть сделано посредством кодера 110. Кодер 110 может быть включен в то же устройство, которое хранит сеть 180 таблиц, но это не обязательно. Входные значения могут быть приняты уже в кодированной форме и/или могут быть переданы в кодированной форме. Или они могут быть приняты/переданы в некодированной форме. В последнем случае они могут быть кодированы и использованы внутри процесса в кодированной форме. Также может иметь место перекодирование, например если вне устройства используется другая кодировка. Например, выходное значение 162 функции и выходное значение 164 состояния могут быть получены от декодера 170.
Кодированные входные данные функции данных могут быть выходными данными другой таблицы или сети таблиц. Последняя может быть или не быть сетью таблиц, конфигурированной для двух функций. Путем объединения сетей таблиц, конфигурированных для различных функций данных, могут быть сформированы целые программы.
Кодер/декодер 110 и 170 могут быть получены в качестве обратных средств по отношению друг к другу. Кодер 110 может быть получен следующим образом. Перечисляют каждую возможную комбинацию входного значения функции и входного значения состояния. Например, если обе из них имеют размер в 4 бита, существуют 16*16=256 возможных комбинаций. Эти 256 комбинаций могут быть отображены отображены друг в друга в случайном взаимно однозначном порядке. То же самое относится к другим размерам. Также может быть использована функция шифрования, например может быть применен 8-битовый блочный шифр с использованием некоторого секретного ключа кодирования.
Кодированное входное значение содержит входное значение 102 функции и входное значение 112 состояния, которые являются взаимозависимыми, например входное значение функции зависит от всех битов кодированных входных данных. Таким образом, знание лишь части кодированного входного значения 122 в общем не позволит найти ни входное значение 102 функции, ни входное значение 112 состояния.
Ниже мы приведем некоторое количество вариантов выполнения с использованием математической терминологии. Одно преимущество объединения входных значений функции со значениями состояния состоит в том, что входные данные функций имеют множество представлений. Функция f относится к функции данных, а g - к функции состояния. Функцию f кодируют в F таким образом, что значение в области F имеет множество представителей. Для маскировки того, какая функция f закодирована, входное(ые) и выходное(ые) значение(я) f имеют множество представлений в области и диапазон кодированной версии F из f. Функция F разработана таким образом, что каждый раз, когда X является представителем x, F(X) является представителем f(x). Ниже мы в некоторых случаях упоминаем «длинные» переменные (входные/выходные значения F) и «короткие» переменные (входные/выходные значения f), чтобы подчеркнуть, что каждое входное/выходное значение f соответствует множеству входных/выходных значений F, так что в общем нам необходимо больше битов для представления входных/выходных значений от F, чем для представления входных/выходных значений от f. Один способ получения множества представлений для операндов описан ниже. Вновь отметим, что для простоты мы рассматриваем функции с равными символами входных и выходных данных; это может быть обобщено.
Пусть W обозначает набор операндов, который мы хотим кодировать. Мы вводим конечный набор Σ «состояний» и конечный набор V с мощностью, равной произведению мощностей W и Σ. Элементы W×Σ отображают по одному в V посредством секретной функции E кодирования. Представители элемента w в W являются элементами набора
Ω(w).
Число представителей каждого элемента в W, таким образом, равно мощности Σ. В результате пути прохождения данных, по которым передаются символы из V, шире, чем пути прохождения данных для передачи символов из W. Например, если W является набором 16-битных целых чисел и пространство Σ состояний имеет 16=24 элементов, пути прохождения данных для V используют 16+4=20 битов, в то время как пути прохождения данных для W используют 16 битов.
Нижеприведенный вариант выполнения кодирует функцию от двух переменных. Рассмотрим функцию f: W×W→W, которую мы хотим кодировать. Построим функцию F: V×V→V таким образом, что для всех и мы имеем
Или, говоря словами: F отображает любую пару представителей из и в представителя
Состояние представителя может зависеть от обоих операндов и и даже может зависеть от обоих состояний и детерминированным или рандомизированным способом. Более конкретно, состояние может зависеть только от состояний и , которые могут быть реализованы путем принятия функции и путем определения
Интересный особый случай вышеописанного варианта выполнения имеет место, если принять Σ=W. Тогда функция F, кодирующая f с использованием функции E, также кодирует функцию g, хотя и посредством другой функции кодирования. То есть невозможно сделать вывод о том, какая из двух функций, f или g, реализуется посредством F. Определим Путем вычисления найдем, что
Таким образом, таблица для F реализует функцию f, если используется кодировка E, и функцию g, если используется в качестве функции кодирования. Таким образом доказано, что только из таблицы 130 невозможно определить, какая функция используется, поскольку она может кодировать по меньшей мере две функции.
Таблица для F может служить для вычисления как f, так и g. В самом деле, если используется E, то, как указано выше, таблица для F реализует f. Та же таблица также может быть использована для реализации g посредством предварительной и последующей обработки входных данных и выходных данных посредством функции Для точности пусть , и запишем Тогда мы имеем, что
Соответственно, мы имеем, что
.
Кодированные входные значения могут быть входными значениями для компьютерной программы, возможно содержащими функцию данных или представленных ей. Компьютерная программа может выполняться на компьютере. Команды компьютерной программы могут быть представлены функцией данных. Кодировки и декодирования могут управляться посредством секретного ключа. В качестве такого ключа могут рассматриваться сами таблицы кодирования и декодирования. Если применяется команда f, работающая с данными, кодированными посредством кодировки Ek, то она сначала кодирует данные, затем f применяется к кодированным данным, и затем результат снова кодируется. То есть результатом данных x является выходное значение F(x)=Ek(f(Dk(x)). Посредством непосредственного сохранения функции F, например, в виде таблицы поиска маскируются функция f и ее смысловое содержание. В конкретном варианте выполнения декодирование является левой инверсией кодирования, то есть Dk(Ek(x))=x для всех x. Это имеет преимущество, если две функции f и g кодируются и декодируются посредством одинаковых функций Ek и Dk, тогда кодированная версия функции f(g(x)) может быть реализована путем последовательного использования таблиц для G(x)=Ek(g(Dk(x)) и F(x)=Ek(f(Dk(x)). В самом деле, можно увидеть, что для каждого x мы имеем, что Ek(f(g(Dk(x))=F(G(x)), так что кодированная версия для f(g(x)) может быть получена из последующих обращений к таблицам для G и для F. Таким образом, могут быть применены последовательности операций без кодирования и декодирования между следующими друг за другом операции, что значительно повышает безопасность. В варианте выполнения кодирование и декодирование происходит только на защищенной стороне, в то время как все кодированные операции происходят на открытой, незащищенной стороне. Выходные данные одной или более кодированных функций могут служить в качестве входных данных для другой кодированной функции. Как мы видели, это может быть удобным образом организовано, если кодирования и декодирования являются обратными операциями по отношению друг к другу. Предпочтительный вариант выполнения для исполнения последовательности операций в наших изобретениях состоит в следующем. Сначала в защищенной области «короткие» переменные преобразуют в «длинные» переменные. Используют рандомизацию, чтобы убедиться, что «длинные» переменные имеют место приблизительно с равной частотой. Это может, например, быть реализовано посредством устройства, которое формирует случайное состояние , и отображения переменной в k(x,, где Ek - это кодировка «длинных» переменных. После всех вычислений на открытой стороне, все из которых производятся с использованием «длинных» переменных, на защищенной стороне применяют декодирование Dk, и затем определяют «короткую» переменную, соответствующую декодированной длинной переменной. В качестве альтернативы, декодирование и определение короткой переменной производится в один комбинированный этап. Буква k означает «секретный», например секретный ключ.
Наличие множества представителей для переменных подразумевает удлинение путей прохождения данных. Также это подразумевает, что таблица для реализации кодированной версии F для f становится больше. Например, рассмотрим функцию f(x,y), которая имеет в качестве входных данных две 16-битных переменных x и y и в качестве выходных данных - 16-битную переменную. Таблица для реализации кодированной функции f без использования множества представителей использует таблицу с 216×216 записями, причем каждая запись в таблице имеет размер 16 битов, что составляет размер таблицы в 236 битов. Теперь предположим, что каждая 16-битная переменная имеет 16 представителей; таким образом набор представителей может быть представлен 20 битами. Теперь используем таблицу с 220×220 записями, причем каждая запись в таблице имеет размер 20 битов, что составляет размер таблицы в 5×242 битов. То есть таблица в 5×26=320 раз больше, чем в случае без множества представителей.
На Фиг. 2 показан способ уменьшения влияния объединения данных и представления состояния на размер таблицы. Сеть 200 таблиц вычисляет ту же самую функцию данных и ту же самую функцию состояния, что и на Фиг. 1.
Сеть 200 таблиц конфигурирована для функции данных и хранится в электронном запоминающем устройстве, соединенном с электронным процессором, выполненным с возможностью вычисления функции данных путем применения сети таблиц.
Сеть 200 таблиц содержит таблицы 212 и 214 извлечения состояния, выполненные с возможностью извлечения из кодированных входных значений 122 и 124 соответствующих значений 112 и 114 состояния. Следует отметить, что это не подразумевает, что входные значения в любой момент получают в простой форме. Значения состояния используются в качестве входных таблицы 230 функции состояния. Таблица 230 функции состояния представляет функцию состояния. Следует отметить, что таблица 212 извлечения состояния, таблица 214 извлечения состояния и таблица 230 функции состояния могут использовать кодирование для значений состояния, возможно даже другое кодирование для значений 112 и 114; однако это кодирование зависит только от значения состояния, а не от входного значения; кодирование может быть секретным, например секретным для конкретной реализации. Теперь из таблицы 230 функции состояния известно выходное значение 232 состояния.
Сеть 200 таблиц дополнительно содержит таблицы 242, 244 перекодирования. Эти таблицы принимают кодированные входные значения 122 и 124, но перекодируют их таким образом, чтобы иметь общее значение состояния, в данном конкретном варианте выполнения - выходное значение 232 состояния. Это означает, что таблица 260 функции данных может быть значительно упрощена, поскольку она более не должна быть выполнена с обеспечением возможности того, что она принимает два различных значения состояния. Следует отметить, что получается то же самое кодированное выходное значение 160, что и на Фиг. 1.
Ниже мы приведем некоторое число вариантов выполнения с использованием математической терминологии. Рассмотрим функцию f для m операндов. В качестве первого этапа мы можем определить представления операндов для f таким образом, что по меньшей мере два операнда имеют одинаковое состояние. Чтобы продемонстрировать преимущества, рассмотрим случай, в котором операнды могут достигать w значений, и каждое значение операнда имеет s представлений. Метод по Фиг. 1 приводит к таблице с (sw)m записями. Если все операнды f привести к одному состоянию, мы можем использовать таблицу с лишь swm записями. В варианте выполнения по Фиг. 2 по меньшей мере два операнда из множества f’s операндов приведены в общее состояние в пространстве состояний.
Один способ получения множества представлений для операндов состоит в следующем. Пусть W означает набор операндов, которые необходимо кодировать. Введем конечный набор Σ «состояний» и конечный набор V с мощностью, равной произведению мощностей W и Σ. Элементы W×Σ отображаются по одному в V посредством секретной функции E кодирования. Представители элемента w в W являются членами набора Ω(w) .
Таким образом, число представителей каждого элемента в W равно мощности Σ. В результате пути прохождения данных, содержащих символы из V шире, чем пути прохождения данных для передачи символов из W. Например, если W является набором из 16-битных целых чисел и пространство Σ состояний имеет 16=24 элементов, пути прохождения данных для V используют 16+4=20 битов, в то время как пути прохождения данных для W используют 16 битов.
Теперь рассмотрим функцию f: W×W→W, которую необходимо кодировать. Построим функцию F: V×V→V таким образом, что для всех и мы имеем, что
Или, говоря словами: F отображает любую пару представителей и в представителя Теперь рассмотрим ситуацию, в которой состояние представителя зависит только от состояний и , что может быть реализовано путем принятия функции и определения
Отметим, что эта функция F имеет две входных переменных из V. Таким образом, таблица для F имеет записей, и что каждая запись является элементом из V. Ниже мы покажем, как можно значительно уменьшить размер таблицы. Мы используем таблицу для средства извлечения состояний , определяемую как
На Фиг. 2 таблицы 212 и 214 извлечения состояний представляют эти функции извлечения состояний. Отметим, что возможно, что в кодированном входном значении 122 использовалась другая кодировка состояния по сравнению с кодированным входным значением 124.
Также мы используем таблицу для вычисления функции g, реализованной в 230 на Фиг. 2. Также мы используем (секретные) кодировки и и таблицы (соответствующие таблицам 242 и 244 на Фиг. 2) для реализации функций и , которые таковы, что для i=1,2 и всех мы имеем
И, наконец, мы используем таблицу для реализации функции таким образом, что для всех и мы имеем, что
.
Теперь рассмотрим входные данные и Отметим, что взломщик может отслеживать и но не может отслеживать и
Выполним следующую программу
; ; (** so
(** so
z:= (** так, что )**)
Предпоследняя строка выше соответствует таблицам 242, 244, 252 и 254 по Фиг. 2. Последняя строка выше соответствует таблице 260 по Фиг. 2.
Теперь определим общий размер требуемых таблиц. Таблица для имеет |V| записей, каждая из которых является элементом из Σ: битов. Таблица для g имеет записей, каждая из которых является элементом из Σ: битов. Обе из таблиц для и имеют |V||Σ| записей, каждая из которых является элементом W: битов на таблицу. Таблица для имеет записей, каждая из которых является элементом из V: битов. Таким образом, общее число необходимых битов равно
.
Так, если , то, используя то, что , обнаружим, что число требуемых битов равно . Фиг. 1 использует битов. Так, в данном примере размер таблицы уменьшен почти кратно |W|/2.
Фиг. 3a демонстрирует, как размер таблиц и защищенность могут заменять друг друга в компромиссном варианте. В дополнение к таблице 230 функции состояния, как на Фиг. 2, сеть 300 таблиц содержит таблицу 310 приведенной функции состояния. Таблица 310 приведенной функции состояния вычисляет другую функцию на основании входных значений 112 и 114 по сравнению с таблицей 230 функции состояния. В действительности таблица 310 приведенной функции состояния может вычислять любую функцию на основании 112 и 114, например случайную функцию, а кроме того таблица 310 приведенной функции состояния имеет меньший диапазон по сравнению с таблицей 230 функции состояния. То есть число возможных выходных значений таблицы 310 приведенной функции состояния меньше, чем число возможных выходных значений таблицы 230 функции состояния. Таблица 310 приведенной функции состояния обеспечивает значение 320 приведенного состояния. Например, выходное значение 232 состояния может составлять 4 бита, и приведенное выходное значение состояния может составлять 2 бита. Для упрощения можно выбирать биты значения 320 из битов выходного значения 232 состояния; однако предпочтительно таблицы 310 и 230 различаются и не коррелируют, в особенности в плане данной линейной зависимости.
Вместо перекодирования входных значений в выходное значение состояния сеть 300 таблиц выполняет перекодирование в приведенное значение 320 состояния. Сеть 300 таблиц содержит таблицы 332 и 334 перекодирования, выполненные с возможностью приема в качестве входных данных перекодированных входных значений 122 и 124, соответственно, и обеспечения новых перекодированных значений, кодированных для приведенного значения 320 состояния вместо выходного значения 164 состояния. Результаты представляют собой перекодированное входное значение 342, 344 соответственно. Так, перекодированные входные значения 342 объединяют свое входное значение функции в кодированных входных данных 122 с приведенным значением 320 состояния (вместо входного значения 112 состояния), шифруемые совместно в единственное значение; то же самое верно для перекодированного входного значения 344.
Наконец, таблица 350 функции данных подобна таблице 260 функции данных за исключением того, что она принимает сокращенный диапазон значений состояния. Функция, вычисленная на основании входного значения, соответствует функции данных; функция на основании функции состояния может быть чем угодно, например случайным числом или идентификатором. Наконец, результат перекодируют посредством таблицы 360 перекодирования таким образом, что кодированное входное значение соответствует выходному значению 164 состояния, а также выходному значению 162 функции. Таблица 332 перекодирования и таблица 334 перекодирования также называются первыми таблицами перекодирования. Таблица 360 перекодирования также называется второй таблицей 360 перекодирования. Следует отметить, что как перекодированные входные данные 342, так и перекодированные входные данные 344 содержат приведенное состояние, что означает, что эта часть входных данных таблицы 350 дублирована, в результате чего таблица может быть прореженной, что, например, хорошо сжимается, если к ней применить сжатие данных.
Например, если каждое из значений функции и значений состояния имеет размер в 4 бита, и приведенные значения состояния имеют размер в 2 бита, то: таблица 332/334 перекодирования имеет 4+4+2=10 битов входных данных и 6 битов выходных данных; таблица 350 функции данных состояния имеет 6+6=12 битов входных данных. Если таблица 350 обеспечивает выходные значения того же размера, что и кодированные входные/выходные значения, она имеет 4+4=8 битов выходных данных; если значения состояния являются приведенными, она имеет 6 битов выходных данных; если только выходные данные содержат выходные значения функции состояния (возможно кодированные), то она имеет 4 бита выходных данных. Примерные значения, такие как имеющие размер 4 и 2 бита, могут быть различными.
Сеть 300 таблиц конфигурирована для функции данных и хранится в электронном запоминающем устройстве, соединенном с электронным процессором, выполненным с возможностью вычисления функции данных путем применения сети таблиц.
На фиг. 3b показан другой способ того, как как размер таблиц и защищенность могут заменять друг друга в компромиссном варианте. Как и на фиг 3a, сеть 300 таблиц содержит таблицу 310 приведенной функции состояния. Однако фиг. 3b не включает в себя таблицы 332 и 334 перекодирования. Вместо этого используются таблицы 372 и 374 перекодирования в зависимости от состояния.
Таблица 372 перекодирования в зависимости от состояния принимает в качестве входных данных кодированное входное значение 122, которое объединяет входное значение функции и входное значение состояния, но в кодированной (зашифрованной) форме. Таблица 372 перекодирования в зависимости от состояния извлекает входные данные функции и кодирует их по-другому, причем перекодирование зависит от приведенного значения 320 состояния. Говоря другими словами, входные данные функции в кодированном входном значении 122 зашифрованы с использованием приведенного значения 320 состояния в качестве. Таблица 374 перекодирования в зависимости от состояния делает то же самое, но для кодированного входного значения 124. Результаты таблиц 372 и 374 представляют собой перекодированные входные значения 382 и 384.
Например, если как значения функции, так и значения состояния имеют размер 4 бита, и приведенные значения состояния имеют размер 2 бита, то: таблица 372/374 перекодирования имеет 4+4+2=10 бита входных данных и 4 бита выходных данных; таблица 385 функции данных имеет 4+4+2=10 битов входных данных. Если таблица 385 обеспечивает выходные значения того же размера, что и кодированные входные/выходные значения, она имеет 4+4=8 битов выходных данных; если значения состояния являются приведенными, то она имеет 6 битов выходных данных; если только выходные данные имеют выходные значения функции (возможно кодированные), она имеет 4 бита выходных данных. Примерные значения, такие как имеющие размер 4 и 2 бита, могут быть различными.
Ниже будет приведено несколько вариантов выполнения с использованием математической терминологии. Варианты выполнения позволяют дополнительно уменьшить размер необходимых таблиц потенциально за счет не столь хорошей маскировки функции f.
Применим таблицу для функции извлечения состояния , определямой как таблица имеет |V| записей, каждая из которых является элементом Σ, и поэтому она использует битов. Это таблица 212 и 214 на фиг. 3. Аналогичным образом, таблица для реализации g имеет битов; это таблица 230 на фиг. 3. Далее мы используем «внутреннее пространство состояний» T и таблицу для отображения Таблица для t использует битов; это таблица 310 на фиг. 3.
Также мы используем (секретные) кодировки и Кроме того, мы используем таблицы для реализации функций и , которые таковы, что для i=1,2 и всех и мы имеем Таблица для каждого имеет |V||T| записей, каждая из которых имеет элемент из W, и таким образом она использует битов. Это таблицы 372 и 374 на фиг. 3. Применим функцию таким образом, что для всех и , мы имеем , где - секретная перестановка Таблица для имеет |W|2|T| записей, каждая их которых является элементом V, и таким образом число необходимых битов равно Это таблица 385 на фиг. 3. Наконец, применим таблицу для реализации функции таким образом, что для всех мы имеем Это таблица 360 на фиг. 3. Число битов для этой таблицы равно
Общее число необходимых битов, таким образом, равно В особом случае |W|=|Σ| это сокращается до
Из вышесказанного следует, что меньшее внутреннее пространство Т состояний может уменьшить необходимый размер таблицы. Далее мы явным образом продемонстрируем, как использовать вышеупомянутые таблицы. Рассмотрим входные данные и Следует отметить, что взломщик может отслеживать и но не может отслеживать и Выполним следующую программу.
; ; (** так
(** так
z:= (** так **)
; (** так
(** так )
Недостаток малого пространства состояний состоит в следующем. В вышеприведенной программе вычисляются , которые таковы, что . Поэтому если взломщик обнаружит, что для двух различных значений и соответствующие значения и являются фактически равными, то он узнает, что и представляют одно и то же значение . Если T мало, то весьма вероятно, что различные представители дают одинаковое значение для В качестве крайнего случая: если T имеет только один элемент, различные представители элемента в W всегда дают одинаковое значение Таким образом, полезно не выбирать T слишком малым. Например, T может иметь 4 элемента или 8, или 16.
Ниже приведен пример построения кодера 110, декодера 170 и таблиц 212 и 214 извлечения состояния. Предположим, что имеются одни входные данные функции и одни входные данные состояния (любых из них может быть и больше), каждые из которых имеют размер 4 бита.
В первых двух столбцах перечислены все возможные сочетания входных значений функции и входных значений состояния. В последнем столбце перечислены случайные перестановки для чисел от 0 до 255 в двоичной форме. Следует отметить, что шифрование является совершенным в том смысле, что даже при совершенном знании 256-2=254 пар входных-выходных данных в остающихся двух парах по-прежнему содержится один бит неопределенности. Может быть получено и менее совершенное, но все же очень применимое кодирование путем использования блочного шифра размером 8 битов.
Таблицу кодирования получают путем сортировки для первых двух столбцов, причем итоговая таблица показывает, как получить последний столбец (кодирование) из первых двух. Путем сортировки для последнего столбца получают таблицу, которая декодирует вместо кодирования. Путем удаления первого столбца и сортировки для второго столбца получают функцию извлечения состояния. Следует отметить, что в общем случае нет необходимости в хранении как столбца входных данных, так и столбца выходных данных. Например, если столбец входных данных отсортирован и содержит все возможные сочетания, его можно исключить.
На фиг. 3c показано перекодирование в зависимости от состояния без использования приведенной функции состояний. Таблицы 372 и 374 перекодирования в зависимости от состояния по фиг. 3c являются теми же, что и таблицы по фиг. 3b за исключением того, что они имеют в качестве входных данных выходное значение 232 состояния вместо приведенного значения состояния. Это означает, что выполняемое перекодирование является более защищенным. С другой стороны, таблицы в 372, 374 и 385 имеют большой размер входных данных. Интересно, что хотя таблица 385 функции данных по фиг. 3c имеет больший размер входных данных, чем таблица по фиг. 3b, нет необходимости в таблице 360 перекодирования, поскольку таблица 385 теперь имеет правильное выходное значение состояния для включения в выходные данные (хотя это и возможно, что уменьшило бы размер таблицы).
Вновь принимая в качестве примера 4 бита для значений функции и состояния, таблица 372 по фиг. 3c имеет 4+4+4 = 12 битов входных данных и 4 бита выходных данных. Таблица 385 по фиг. 3c имеет 4+4+4=12 бита входных данных и 4+4=8 битов выходных данных.
На фиг. 5 показано вычислительное устройство 500, имеющее запоминающее устройство 510. В общем случае запоминающее устройство 510 представляет собой одно или более энергонезависимых запоминающих устройств, но оно также может быть и жестким диском, оптическим диском и т.п. Запоминающее устройство 510 также может быть энергозависимым запоминающим устройством, содержащим загруженные или принятые каким-либо иным образом данные. Вычислительное устройство 500 содержит процессор 550. Процессор в общем случае выполняет код 555, сохраненный в памяти. Для удобства код может быть сохранен в запоминающем устройстве 510. Код побуждает процессор выполнять вычисление. Устройство 500 может при необходимости содержать устройство 560 ввода/вывода (I/O) для приема входных значений и/или передачи результатов. Устройство 560 I/O может представлять собой сетевое соединение, съемное запоминающее устройство и т.п.
Запоминающее устройство 510 содержит одну или более сетей таблиц по одной из фиг. 1-3.
В варианте выполнения вычислительное устройство может при функционировании работать следующим образом: вычислительное устройство 500 принимает входные значения. Входные значения кодированы, например с использованием таблицы 541 кодирования, например таблицы 110. Таким образом, входные значения получают в виде кодированных входных значений. Следует отметить, что входные значения могут быть непосредственно получены в виде кодированных входных значений, например через устройство 560. Кодирование входного значения в кодированное входное значение подразумевает, что необходимо выбрать входное значение состояния. Для этого есть несколько способов, например входные данные состояния могут быть выбраны случайным образом, например посредством генератора случайных чисел. Входные данные состояния могут быть выбраны согласно алгоритму; алгоритм может быть сложным и может обеспечивать дополнительную маскировку. Входное значение состояния может также быть постоянным или последовательно извлекаемым из последовательности чисел, например из последовательности целых чисел, имеющих постоянное приращение, например на 1, и начинающихся в некоторой начальной точке; начальная точка может быть нулем, случайным числом и т.п. Выбор входных данных состояния в виде случайного числа и увеличение на 1 для каждых следующих выбранных входных данных состояния является особенно предпочтительным выбором. Если входные данные состояния выбирают вне устройства, то у взломщика нет способа отслеживания того, где выбраны входные значения состояния и какими они являются.
Процессор 550 выполняет программу 555 в запоминающем устройстве 510. Программа побуждает процессор применять таблицы поиска к кодированным входным значениям или к итоговым выходным значениям. Таблицы поиска могут быть созданы для любой логической или арифметической функции, и таким образом любое вычисление может быть выполнено путем использования последовательности таблиц поиска. Это помогает маскировать программу. В данном случае таблицы поиска кодируют для маскировки, и поэтому имеются промежуточные значения. В данном случае маскировка является в особенности предпочтительной, поскольку единственное входное значение функции может быть представлено множеством кодированных входных значений. Кроме того, некоторые или все таблицы и/или сети таблиц имеют свойство множества функций.
В некоторый момент находят итоговое значение. При необходимости результат может быть декодирован, например с использованием таблицы 542 декодирования, например таблицы 170. Но результат также может быть экспортирован в кодированной форме. Входные значения также могут быть получены от устройств ввода, и выходные значения могут быть использованы для отображения на экране.
Вычисление выполняют для кодированных слов данных. Вычисление выполняют путем применения последовательности обращений к таблицам поиска. Используемые входные значения могут быть входными значениями, принятыми извне вычислительного устройства, но также могут быть получены посредством предыдущего обращения к таблице поиска. Таким образом получают промежуточные результаты, которые затем могут быть использованы для новых обращений к таблице поиска. В определенный момент один из промежуточных результатов представляет собой кодированный результат функции.
Вычислительное устройство 500 может содержать генератор случайных чисел для назначения входных значений состояния для входных значений функции данных.
Фиг. 6 иллюстрирует в виде блок-схемы способ 600 компиляции. На этапе 610 первую компьютерную программу принимают посредством приемника. На этапе 620 выполняют лингвистический анализ, например для идентификации лексем, посредством средства лексического анализа. Возможно также выполняют обработку, такую как макроподстановка. На этапе 630 выполняется синтаксический анализ программы средством синтаксического анализа. Например, средство синтаксического анализа формирует дерево синтаксического анализа в соответствии с формальной грамматикой языка программирования первой программы. Средство синтаксического анализа идентифицирует различные языковые конструкции в программе и вызывает надлежащие процедуры формирования кода. В частности, идентифицируют оператор или множество операторов. В этом случае на этапе 640 генератором кода выполняется формирование кода. В ходе формирования кода формируется некоторый код и, при необходимости, сопровождающие таблицы. Сопровождающие таблицы включают в себя таблицы, которые конфигурированы для двух функций: одна для необходимого оператора и одна для функции состояния. Сформированный код не должен и в общем случае не будет содержать оператор, поскольку он заменен одной или более таблицами поиска. Функция состояния может быть выбрана случайным образом. Функция состояния также может быть выбрана в качестве результата программы, например функция состояния может быть другим необходимым оператором, что позволит повторно использовать таблицу. Например, средство синтаксического анализа идентифицирует операцию сложения и переведет ее в таблицу поиска для команды сложения и в сформированный код для применения таблицы поиска к правильным значениям. В качестве функции состояния компилятор может выбрать случайную функцию. Компилятор может также случайным образом выбрать функцию из набора функций, например сложения, вычитания, умножения и тому подобного.
На этапе 655 сформированные таблицы объединяют в базу таблиц, поскольку вполне может иметь место случай, когда некоторые таблицы формируются множество раз, и в этом случае нет необходимости сохранять их множество раз. Например, таблица сложения может потребоваться и быть сформирована только один раз. Когда весь код объединен и все таблицы объединены, компиляция заканчивается. При необходимости может быть предусмотрен этап оптимизации.
В общем случае компилятор использует кодированные области, т.е. части программы, в которых все значения или по меньшей мере все значения, соответствующие некоторым критериям, кодированы, т.е. имеют битовый размер кодового слова (n). В кодированной области операции могут выполняться путем выполнения таблицы поиска. При входе в кодированную область все значения кодируются, при выходе их кодированной области значения декодируются. Критерий может состоять в том, что значение коррелирует с информацией, важной для безопасности, или зависит от нее, например от криптографического ключа.
Интересный способ создания компилятора состоит в следующем. На этапе 630 выполняют промежуточную компиляцию. Она может выполняться на промежуточном языке, например на языке межрегистровых передач или тому подобном, но также может быть компиляцией кода на машинном языке. Это означает, что для этапов 610-630 по фиг. 6 может использоваться обычный компилятор, который не формирует сети таблиц. Однако на этапе 640 на основании промежуточной компиляции выполняется формирование кода. Например, если использовался машинный язык, каждую инструкцию заменяют соответствующей реализацией этой инструкции без операторов, т.е. реализацией этой инструкции, основанной на таблицах. Это представляет собой в особенности простой способ создания компилятора. Фиг. 6 также может быть использована для формирования компилятора, который обеспечивает не машинный язык, а второй язык программирования.
В варианте выполнения компилятор представляет собой компилятор для компиляции первой компьютерной программы, написанной на первом компьютерном языке программирования, во вторую компьютерную программу, причем компилятор содержит генератор кода для формирования второй компьютерной программы путем формирования таблиц и кода на машинном языке, причем сформированные таблицы и сформированный код на машинном языке вместе образуют вторую компьютерную программу, причем код на машинном языке содержит ссылки на таблицы, причем компилятор выполнен с возможностью идентификации арифметического или логического выражения в первой программе, причем выражение зависит по меньшей мере от одной переменной, и генератор кода выполнен с возможностью формирования одной или более таблиц, представляющих предварительно вычисленные результаты идентифицированного выражения для множества значений переменной и представляющих по меньшей мере одно другое выражение, и формирования кода на машинном языке для реализации идентифицированного выражения во второй компьютерной программе путем обращения к одной или более сформированным таблицам, представляющим предварительно вычисленные результаты. В идеальном случае код на машинном языке, сформированный для реализации идентифицированного выражения, не содержит собственно арифметических или логических машинных команд, по меньшей мере не содержит арифметических или логических машинных команд, относящихся к важной информации. Взломщик, обратную разработку таблиц, может обнаружить, что они могут представлять идентифицированное выражение, но также и то, что они могут также представлять и другое выражение.
Это повышает устойчивость к обратной разработке и снижает утечку информации в отношении второй программы по побочным каналам, поскольку она содержит меньше арифметических или логических операций. В идеальном случае все арифметические и логические выражения и подвыражения в ней заменены обращениями к таблицам. Поскольку те команды, которые составляют арифметическое или логическое выражение или подвыражения, отсутствуют, они не могут выдать какую-либо информацию. Таблица является предварительно вычисленной; мощность, потребляемая для выполнения арифметической или логической операции, заключенной в таблице, не видна при выполнении программы.
Фиг. 7 иллюстрирует на блок-схеме способ 700 вычисления функции данных на основании входного значения функции. На этапе 710 входное значение функции объединяют вместе с входным значением состояния в кодированное входное значение. Это объединение выполняют способом, содержащим шифрование. Следует отметить, что кодирование входных значений может выполняться в другом местоположении и/или другой стороной. На этапе 720 применяют сеть таблиц к кодированному входному значению для формирования кодированного выходного значения. На этапе 730 получают выходное значение функции из кодированного выходного значения. Следует отметить, что выходное значение состояния также может быть получено из кодированного выходного значения, но это может и не требоваться. Выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния. Этап 730 может быть выполнен в другом местоположении и/или другой стороной.
Возможно множество различных способов выполнения способов, раскрытых в настоящем документе, как будет очевидно специалисту в данной области техники. Например, порядок этапов может быть различным или некоторые этапы могут выполняться параллельно. Кроме того, между этапами могут быть введены другие этапы способа. Введенные этапы могут представлять собой усовершенствования способа, описанного в настоящем документе, или могут не относиться к упомянутому способу.
Способ согласно изобретению может быть выполнен с использованием программного обеспечения, которое содержит команды, побуждающие систему процессора выполнять способ 700. Программное обеспечение может включать в себя только те этапы, которые выполняются конкретным подобъектом в системе. Программное обеспечение может быть сохранено на подходящем носителе данных, таком как жесткий диск, гибкий диск, запоминающее устройство и т.п. Программное обеспечение может быть передано в виде сигнала проводным или беспроводным способом или с использованием сети данных, например сети Интернет. Программное обеспечение может быть обеспечено на сервере для загрузки и/или для удаленного использования.
Следует понимать, что изобретение также распространяется на компьютерные программы, в частности компьютерные программы на носителе или в нем, выполненные с возможностью осуществления изобретения. Программа может быть в виде исходного кода, объектного кода, промежуточного источника кода и объектного кода, такого как код в частично компилированной форме, или в любом другом виде, подходящем для реализации способа согласно изобретению. Вариант выполнения, относящийся к компьютерному программному продукту, содержит машиноисполняемые команды, соответствующие каждому из этапов обработки по меньшей мере одного из представленных способов. Эти команды могут быть подразделены на подпроцедуры и/или могут быть сохранены в одном или более файлах, которые могут быть связаны статически или динамически. Другой вариант выполнения, относящийся к компьютерному программному продукту, содержит машиноисполняемые команды, соответствующие каждому из средств по меньшей мере одной из представленных систем и/или продуктов.
Следует отметить, что вышеприведенные варианты выполнения иллюстрируют, а не ограничивают изобретение, и что специалисты в данной области техники смогут разработать множество альтернативных вариантов выполнения. В формуле любые условные обозначения, помещенные в круглые скобки, не должны быть истолкованы как ограничивающие формулу изобретения. Использование глагола «содержать» и его спряжений не исключает наличия элементов или этапов, отличных от тех, что указаны в формуле изобретения. Упоминание элемента в единственном числе не исключает наличия множества таких элементов. Изобретение может быть реализовано посредством аппаратного обеспечения, содержащего несколько отдельных элементов, и посредством надлежащим образом запрограммированного компьютера. В пункте формулы изобретения на устройство, в котором перечислены несколько средств, несколько из этих средств могут быть реализованы посредством одного и того же элемента аппаратного обеспечения. Сам по себе тот факт, что определенные средства упомянуты в различных зависимых пунктах, не указывает на то, что сочетание таких средств не может быть использовано с достижением преимущества.
Перечень ссылочных позиций на фиг. 1-5:
100 сеть таблиц
102, 104 входное значение функции
110 кодер
112, 114 входное значение состояния
122, 124 кодированное входное значение
130 функция данных
160 кодированное выходное значение
162 выходное значение функции
164 выходное значение состояния
170 декодер
180 сеть таблиц
200 сеть таблиц
212, 214 таблица извлечения состояния
230 таблица функции состояния
242, 244 таблица перекодирования
252, 254 перекодированное входное значение
260 таблица функции данных
310 таблица приведенной функции состояния
320 приведенное значение состояния
332, 334 таблица перекодирования
342, 344 перекодированное входное значение
350 таблица функции данных
360 таблица перекодирования
372, 374 таблица перекодирования в зависимости от состояния
382, 384 перекодированное входное значение
410 входная таблица
420 промежуточная таблица
430 выходная таблица
500 вычислительное устройство
510 запоминающее устройство
521, 522 таблицы поиска с единственным входом
531, 532 таблицы поиска с множеством входов
5311-5323 таблицы поиска с единственным входом
541 таблица поиска кодирования
542 таблица поиска декодирования
555 код на машинном языке
550 процессор компьютера
560 устройство ввода/вывода
название | год | авторы | номер документа |
---|---|---|---|
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО, КОНФИГУРИРУЕМОЕ С ПОМОЩЬЮ ТАБЛИЧНОЙ СЕТИ | 2013 |
|
RU2661308C2 |
УСТРОЙСТВО ВИРТУАЛЬНОЙ МАШИНЫ, ИМЕЮЩЕЕ УПРАВЛЯЕМУЮ КЛЮЧОМ ОБФУСКАЦИЮ, И СПОСОБ | 2012 |
|
RU2620712C2 |
УСТРОЙСТВО И СПОСОБ ВЫЧИСЛЕНИЯ БЛОЧНОГО ШИФРА | 2018 |
|
RU2696334C1 |
КРИПТОГРАФИЧЕСКОЕ УСТРОЙСТВО И КОДИРУЮЩЕЕ УСТРОЙСТВО | 2016 |
|
RU2692419C1 |
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО, ХРАНЯЩЕЕ ТАБЛИЦЫ СООТВЕТСТВИЯ ДЛЯ ВЫЧИСЛЕНИЯ ФУНКЦИИ | 2013 |
|
RU2657178C2 |
ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО И СПОСОБ | 2016 |
|
RU2708439C1 |
ЭЛЕКТРОННОЕ ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО ДЛЯ ВЫПОЛНЕНИЯ ЗАМАСКИРОВАННЫХ АРИФМЕТИЧЕСКИХ ДЕЙСТВИЙ | 2015 |
|
RU2698764C2 |
ЭЛЕКТРОННОЕ ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО | 2015 |
|
RU2698763C2 |
ЭЛЕКТРОННОЕ УСТРОЙСТВО ФОРМИРОВАНИЯ | 2015 |
|
RU2710310C2 |
ЭЛЕКТРОННОЕ ВЫЧИСЛИТЕЛЬНОЕ УСТРОЙСТВО ДЛЯ ВЫПОЛНЕНИЯ АРИФМЕТИКИ С ОБФУСКАЦИЕЙ | 2015 |
|
RU2701716C2 |
Изобретение относится к компилятору, способу и вычислительному устройству для выполнения программ. Технический результат заключается в повышении защищенности вычислительных систем. Устройство содержит электронное запоминающее устройство, хранящее сеть таблиц, обеспеченную компилятором, конфигурированную для функции данных и функции состояния, и электронный процессор, соединенный с запоминающим устройством и выполненный с возможностью вычисления функции данных и функции состояния путем применения сети таблиц, причем устройство выполнено с возможностью получения входного значения функции в качестве кодированного входного значения, объединяющего входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение, сеть таблиц выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения, объединяющего выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния. 3 н. и 15 з.п. ф-лы, 9 ил.
1. Реализуемый посредством компьютера компилятор, выполненный с возможностью компиляции компьютерной программы, причем компилятор выполнен с возможностью синтаксического анализа компьютерной программы для идентификации многочисленных операторов, включая функцию (f) данных и функцию (g) состояния, и обеспечения сети таблиц, конфигурированной для функции данных и функции состояния, причем
- сеть таблиц выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения, причем кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, и выходное значение состояния равно результату применения функции состояния к входному значению состояния, причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение.
2. Вычислительное устройство (500), выполненное с возможностью выполнения компьютерной программы, компилированной компилятором по п. 1, причем устройство содержит электронное запоминающее устройство (510), хранящее сеть (180, 200, 300) таблиц, обеспеченную компилятором, конфигурированную для функции (f) данных и функции (g) состояния, и электронный процессор (550), соединенный с запоминающим устройством и выполненный с возможностью вычисления функции данных и функции состояния путем применения сети таблиц, причем
- устройство выполнено с возможностью получения входного значения функции в качестве кодированного входного значения (122, 124), причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение,
- сеть таблиц выполнена с возможностью приема в качестве входных данных кодированного входного значения и обеспечения в качестве выходных данных кодированного выходного значения (160), причем кодированное выходное значение объединяет выходное значение (162) функции вместе с выходным значением (164) состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции (f) данных к входному значению функции, и выходное значение состояния равно результату применения функции (g) состояния к входному значению состояния.
3. Вычислительное устройство (500) по п. 2, выполненное с возможностью использования функции данных или состояния сети таблиц в зависимости от текущей кодировки входных данных сети таблиц.
4. Вычислительное устройство (500) по п. 3, в котором
- кодированное входное значение (122, 124) объединяет входное значение функции и входное значение состояния, шифруемые совместно в единственное значение, в соответствии с первой кодировкой (),
- сеть таблиц выполнена с возможностью получения входного значения функции и входного значения состояния в качестве дополнительно кодированного входного значения (122, 124), причем дополнительно кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение, в соответствии со второй кодировкой (),
- сеть таблиц выполнена с возможностью приема в качестве входных данных упомянутого дополнительно кодированного входного значения и обеспечения в качестве выходных данных дополнительно кодированного выходного значения (160), причем дополнительно кодированное выходное значение объединяет выходное значение (162) функции вместе с выходным значением (164) состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции (g) состояния к входному значению функции, и выходное значение состояния равно результату применения функции (f) данных к входному значению состояния.
5. Вычислительное устройство (500) по п. 4, в котором
- упомянутая первая кодировка определена первой функцией E(x,y) кодирования, причем x обозначает входные данные функции, и y – входные данные состояния, а упомянутая вторая кодировка определена второй функцией кодирования, определяемой как
6. Вычислительное устройство (500) по п. 4, выполненное с возможностью предварительной и последующей обработки входных данных и выходных данных сети (F) таблиц композицией ( функций второй кодировки ( и инверсии первой кодировки (E).
7. Вычислительное устройство по п. 2, в котором сеть таблиц содержит единственную таблицу (180), принимающую в качестве входных данных кодированное входное значение и обеспечивающую в качестве выходных данных кодированное выходное значение.
8. Вычислительное устройство по п. 2, в котором сеть таблиц содержит
- таблицу (212, 214) извлечения состояния, конфигурированную таким образом, что применение этой таблицы извлечения состояния к кодированному входному значению обеспечивает входное значение состояния,
- таблицу (230) функции состояния, конфигурированную таким образом, что применение этой таблицы функции состояния к входному значению состояния обеспечивает выходное значение состояния.
9. Вычислительное устройство по п. 8, в котором сеть таблиц содержит
- таблицу (242, 244) перекодирования, выполненную с возможностью приема в качестве входных данных кодированного входного значения и выходного значения состояния и обеспечения в качестве выходных данных перекодированного входного значения, причем перекодированное входное значение объединяет входное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение.
10. Вычислительное устройство по п. 9, в котором сеть таблиц содержит таблицу (260) функции данных, выполненную с возможностью приема в качестве входных данных перекодированного входного значения и в качестве выходных данных кодированного выходного значения.
11. Вычислительное устройство по п. 8, в котором сеть таблиц содержит
- таблицу (310) приведенной функции состояния, выполненную с возможностью приема входного значения состояния и обеспечения в качестве выходных данных промежуточного значения состояния, равного результату применения приведенной функции состояния к входному значению состояния, причем диапазон приведенной функции состояния больше, чем единственное значение, и меньше, чем диапазон функции состояния, причем кодированное входное значение перекодировано в зависимости от промежуточного значения состояния.
12. Вычислительное устройство по п. 11, в котором сеть таблиц содержит
- первую таблицу (332, 334) перекодирования, выполненную с возможностью приема в качестве входных данных кодированного входного значения и промежуточного значения состояния и обеспечения в качестве выходных данных перекодированного входного значения, причем перекодированное входное значение объединяет входное значение функции вместе с промежуточным значением состояния, шифруемые совместно в единственное значение,
- таблицу (350) функции данных, выполненную с возможностью приема в качестве входных данных перекодированного входного значения и в качестве выходных данных перекодированного выходного значения, причем перекодированное выходное значение объединяет выходное значение функции вместе с промежуточным значением состояния, шифруемые совместно в единственное значение,
- вторую таблицу (360) перекодирования, выполненную с возможностью приема в качестве входных данных перекодированного выходного значения и выходного значения состояния и обеспечения в качестве выходных данных кодированного выходного значения.
13. Вычислительное устройство по п. 11, в котором сеть таблиц содержит
- первую таблицу (372, 374) перекодирования, выполненную с возможностью приема в качестве входных данных кодированного входного значения и промежуточного значения состояния и обеспечения в качестве выходных данных перекодированного входного значения (382, 384), причем перекодированное входное значение (382, 384) является перекодированными входными данными функции, причем перекодирование выбрано в зависимости от промежуточного значения состояния,
- таблицу (385) функции данных, выполненную с возможностью приема в качестве входных данных перекодированного входного значения (382) и приведенного значения (320) состояния и в качестве выходных данных выходного значения функции в кодированной форме,
- вторую таблицу (360) перекодирования, выполненную с возможностью приема в качестве входных данных выходного значения функции в кодированной форме и выходного значения состояния и обеспечения в качестве выходных данных кодированного выходного значения.
14. Вычислительное устройство по п. 2, в котором сеть таблиц содержит
- первую таблицу (372, 374) перекодирования, выполненную с возможностью приема в качестве входных данных кодированного входного значения и выходного значения состояния и обеспечения в качестве выходных данных перекодированного входного значения (382, 384), причем перекодированное входное значение (382, 384) является перекодированными входными данными функции, причем перекодирование выбрано в зависимости от выходного значения состояния.
15. Вычислительное устройство по п. 2, в котором сеть таблиц конфигурирована для входных значений функции, имеющих по меньшей мере 4, предпочтительно по меньшей мере 8 битов.
16. Вычислительное устройство по п. 2, в котором сеть таблиц конфигурирована для входных значений состояния, имеющих по меньшей мере 4, предпочтительно по меньшей мере 8 битов.
17. Вычислительное устройство по п. 2, в котором входное значение функции и входное значение состояния имеют одинаковый размер в битах.
18. Способ выполнения компьютерной программы, компилированной компилятором по п. 1, причем способ содержит этапы, на которых вычисляют функцию данных и функцию состояния путем применения сети таблиц, обеспеченной компилятором, к кодированному входному значению и обеспечивают в качестве выходных данных кодированное выходное значение, причем кодированное входное значение объединяет входное значение функции вместе с входным значением состояния, шифруемые совместно в единственное значение, кодированное выходное значение объединяет выходное значение функции вместе с выходным значением состояния, шифруемые совместно в единственное значение, причем выходное значение функции равно результату применения функции данных к входному значению функции, а выходное значение состояния равно результату применения функции состояния к входному значению состояния.
US 5111390 A, 05.05.1992 | |||
Изложница с суживающимся книзу сечением и с вертикально перемещающимся днищем | 1924 |
|
SU2012A1 |
Изложница с суживающимся книзу сечением и с вертикально перемещающимся днищем | 1924 |
|
SU2012A1 |
Колосоуборка | 1923 |
|
SU2009A1 |
Устройство для измерения угловой деформации свариемого изделия | 1980 |
|
SU905616A1 |
ШТАММ ВИРУСА БОЛЕЗНИ НЬЮКАСЛА ДЛЯ ИСПОЛЬЗОВАНИЯ ПРИ СЕРОДИАГНОСТИКЕ БОЛЕЗНИ НЬЮКАСЛА В РТГА | 2010 |
|
RU2482184C2 |
КОМПИЛЯЦИЯ ИСПОЛНЯЕМОГО КОДА В МЕНЕЕ ДОВЕРЯЕМОМ АДРЕСНОМ ПРОСТРАНСТВЕ | 2007 |
|
RU2439665C2 |
Авторы
Даты
2018-12-28—Публикация
2013-12-17—Подача