MX2015006158A - Dispositivo de computo configurado con una red de tablas. - Google Patents

Dispositivo de computo configurado con una red de tablas.

Info

Publication number
MX2015006158A
MX2015006158A MX2015006158A MX2015006158A MX2015006158A MX 2015006158 A MX2015006158 A MX 2015006158A MX 2015006158 A MX2015006158 A MX 2015006158A MX 2015006158 A MX2015006158 A MX 2015006158A MX 2015006158 A MX2015006158 A MX 2015006158A
Authority
MX
Mexico
Prior art keywords
function
network
tables
output
state
Prior art date
Application number
MX2015006158A
Other languages
English (en)
Other versions
MX343892B (es
Inventor
Ludovicus Marinus Gerardus Maria Tolhuizen
Paulus Mathias Hubertus Mechtildis Antoni Gorissen
Mina Deng
Alphons Antonius Maria Lambertus Bruekers
Original Assignee
Koninkl Philips Nv
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninkl Philips Nv filed Critical Koninkl Philips Nv
Publication of MX2015006158A publication Critical patent/MX2015006158A/es
Publication of MX343892B publication Critical patent/MX343892B/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • G06F16/1827Management specifically adapted to NAS
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/004Countermeasures against attacks on cryptographic mechanisms for fault attacks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/043Masking or blinding of tables, e.g. lookup, substitution or mapping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/16Obfuscation or hiding, e.g. involving white box

Abstract

Un dispositivo de cómputo configurado para calcular una función de datos (f) sobre un valor de entrada de función (w), el dispositivo comprende un almacenamiento electrónico que almacena una primera red de tablas configurada para la función de datos (f); el dispositivo de cómputo comprende un procesador electrónico acoplado al almacenamiento y configurado para obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla (x=E(w,s)) incluyen el valor de entrada de función (w), y calcular la función de datos (f) aplicando la primera red de tablas a las múltiples primeras entradas de tabla (x) para producir múltiples primeras salidas de tabla (u=E(f(w), g(w,s)), las múltiples primeras salidas de tabla (u) incluyen un valor de salida de función (f(w)), el valor de salida de función (f(w)) corresponde al resultado de aplicar la función de datos (f) al valor de entrada de función (w) ; el almacenamiento electrónico almacena además una segunda red de tablas configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, el procesador electrónico también está configurado para obtener múltiples segundas entradas de tabla para la segunda red de tablas, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla (u) y por lo menos una entrada con las múltiples primeras entradas de tabla (w; s), y aplicar la segunda red de tablas a las múltiples segundas entradas de tablas, la segunda red de tablas está configurada para verificar por lo menos una salida específica (f(w) o g(w,s)) de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla (f(w); g(w,s)) de la por lo menos una de las múltiples primeras entradas de tablas (w; s) dadas; la segunda red de tablas produce segundas salidas de tabla (v= E(w´,s´)) incluyendo una salida de función protegida (w'), la salida de función protegida es igual a la salida de función (f(w)) en el caso de que la verificación sea exitosa y la salida de función protegida (w´) es desigual a la salida de función en caso de que la verificación no sea exitosa.

Description

DISPOSITIVO DE CÓMPUTO CONFIGURADO CON UNA RED DE TABLAS Campo de la Invención La invención se relaciona con un dispositivo de cómputo configurado para calcular una función de datos sobre un valor de entrada de función, el dispositivo comprende un almacenamiento electrónico que almacena una primera red de tablas configurada para la función de datos, el dispositivo de cómputo comprende un procesador electrónico acoplado al almacenamiento y configurado para obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla incluyen el valor de entrada de función, y calcular la función de datos aplicando la primera red de tablas a las múltiples primeras entradas de tabla para producir múltiples primeras salidas de tabla, las múltiples primeras salidas de tabla incluyen un valor de salida de función, el valor de salida de función corresponde al resultado de aplicar la función de datos al valor de entrada de función.
Antecedentes de la Invención En el cifrado tradicional se suponía típicamente que un atacante solo obtiene acceso a los valores de entrada y salida de un sistema seguro. Por ejemplo, el atacante sería capaz de observar un texto simple que entra a un sistema y observar un texto cifrado que sale del sistema. Aunque un Ref.: 256394 atacante podría tratar de obtener una ventaja analizando los pares de entrada/salida, posiblemente incluso usando métodos computacionalmente intensos no pensaba que tenía acceso directo al sistema que implemento el comportamiento de entrada/salida.
Recientemente, se ha hecho necesario tomar en cuenta modelos de amenaza en los cuales se supone que un atacante tiene algún conocimiento de las implementaciones. Por ejemplo, podría considera la amenaza de análisis de canal lateral y de ingeniería inversa. Adicionalmente, las preocupaciones que previamente se asociaban mayormente con problemas de seguridad se ha extendido a otros campos, tales como privacidad. Aunque los sistemas de cifrado que procesan información de seguridad tales como teclas de cifrado continúan siendo una preocupación principal, la protección de otros programas, por ejemplo, aquellos que procesan información pertinente sobre privacidad también se han hecho importantes.
Durante mucho tiempo se ha sabido que los sistemas de cómputo conocidos filtran cierta información a través de los denominados canales laterales. La observación de un comportamiento de entrada-salida de un sistema de cómputo puede no proporcionar ninguna información útil sobre información sensible, tal como claves secretas utilizadas por el sistema de cómputo. Pero un sistema de cómputo tiene otros canales que pueden observarse, por ejemplo, su consumo de energía o radiación electromagnética; estos canales se conocen como canales laterales. Por ejemplo, pueden medirse pequeñas variaciones en la energía consumida por diferentes instrucciones y variaciones en la energía consumida mientras se ejecutan instrucciones. La variación medida puede correlacionarse con información sensible, tales como claves criptográficas. Esta información adicional sobre información secreta, más allá del comportamiento de entrada-salida observable y pretendido se denomina canales laterales. A través de un canal lateral un sistema de cómputo puede "filtrar" información secreta durante su uso. La observación y el análisis de un canal lateral puede proporcionar a un atacante acceso a mejor información que la que puede obtenerse solo de un criptoanálisis del comportamiento de entrada-salida. Un tipo conocido de ataque de canal lateral es al denominado análisis de energía diferencial (DPA, por sus siglas en inglés).
Los enfoques actuales para el problema de canales laterales introducen aleatoriedad en el cálculo. Por ejemplo, entre operaciones genuinas que ejecutan el programa se pueden insertar instrucciones simuladas para hacer confusa la relación entre el consumo de energía y los datos con los que el programa está trabajando.
Un ataque aún más fuerte en una computadora se denomina ingeniería inversa. En muchos escenarios de seguridad los atacantes pueden tener acceso total a la computadora. Esto les da la oportunidad de desensamblar el programa y obtener cualquier información acerca de la computadora y el programa. Con el suficiente esfuerzo cualquier clave oculta por ejemplo en un programa puede ser hallada por un atacante.
La protección contra este escenario de ataque ha resultado ser muy difícil. Un tipo de contramedida es la denominado criptografía de caja blanca. En la criptografía de caja blanca, se combinan la clave y el algoritmo. El algoritmo resultante solo funciona para una clave particular. Enseguida el algoritmo puede implementarse como una denominada red de tablas de consulta. Los cálculos se transforman en una serie de consultas en tablas dependientes de claves. Véase por ejemplo, "White-Box Cryptography and an AES Implementation", de S. Show, P. Velsen H. Johnson, P.C. van Orosco, como un ejemplo de este enfoque.
Breve Descripción de la Invención Las contramedidas conocidas contra el ataque de canales laterales contra sistemas de cómputo son se han satisfecho por completo. Por ejemplo, la introducción de aleatoriedad puede contrarrestarse por análisis estadístico. El ofuscamiento de software puede contrarrestarse mediante análisis más avanzado de la operación del programa. Por lo tanto existe una necesidad por más y mejores contramedidas.
Por ejemplo, una forma de ofuscar un programa de cómputo es codificar los valores de entrada y operar lo más posible en valores codificados. Incluso pueden usarse las denominadas redes de tablas para realizar los cálculos. Tal red de tablas puede hacerse a mano, o mediante programas especializados, por ejemplo, en el caso de una criptografía de caja blanca, o por medio de compiladores de propósito general. Se creía que, en general, una tabla ofusca el tipo de operación que se realiza. Sin embargo, los inventores han encontrado que esto no es generalmente cierto.
Aún cuando la(s) entrada(s) y salida(s) de una función estén codificadas, las propiedades estadísticas de las relaciones de entrada/salida pueden revelar qué función está siendo codificada. Un ejemplo de este fenómeno es el siguiente.
Considere W = {0,1, ..., N-l}, una codificación E, y su correspondiente decodificación D=E-1. Sea F y G que denotan el módulo codificado N adición y el modulo codificado N multiplicación, respectivamente. Es decir, defínase F: W x W W como F{x, y) = E (D (X) Q N D (y)), en donde © N denota el módulo N adición , y G: W x W W como G (x,y) = E {D (X)*N D (y)), en donde *N denota el módulo N multiplicación.
Por cada x fija, tenemos que {F(x,y)|y e W} W. Asimismo, para cada x e W diferente de cero, y N primo tenemos que {G(x, y)|y e w} = W, y {G(0,y)|y e w} = E(0).
Para N no primo se tienen patrones similares.
Consecuentemente, independientemente de la codificación E, puede determinarse que F no puede ser un módulo codificado N multiplicación, y que G no puede ser un módulo codificado N adición. Un atacante tiene por lo menos dos métodos para hacerlo. Podría utilizar dos elementos fijos diferentes xi y X2 en W y para e {F,G], comparar H (xi,y) y H(x2,y) para toda y. Si estas cantidades son diferentes para toda y, entonces H no puede representar el módulo N multiplicación; si estas cantidades están de acuerdo con algunas y, entonces H no puede representar el módulo" N adición. Un atacante que no elije qué entradas de tablas leer, pero puede observar los resultados de los accesos de tablas de un programa de software en ejecución puede usar el hecho de que cada elemento de W se presenta igualmente con frecuencia como salida mientras que con G, el elemento E(0) se presenta como una salida con mucha más frecuencia. Por lo que si un elemento de W se presenta con mucha más frecuencia que otros elementos de W como salida de H, entonces H tiene más probabilidad de ser un módulo ofuscado N multiplicación que un módulo ofuscado N adición.
En otras palabras, aún cuando se utilice uno de los mejores métodos de ofuscamiento de software disponible, es decir, si se utiliza la codificación total de los valores de entrada y salida y las redes de tablas para los cálculos, entonces aún puede obtenerse alguna información por inspección del programa. La situación es bastante indeseable.
Se ha encontrado que este problema se soluciona mediante la introducción de redes de tablas que operan en múltiples valores de entrada al mismo tiempo. La red de tablas puede aplicar una función diferente a diferentes entradas o grupos de entradas. Usando una codificación de cifrar en un solo valor dos o más de las múltiples entradas junto con un solo valor, se hace imposible para un atacante determinar a qué función está destinada la red de tablas dado que, de hecho, realiza dos funciones. Véase la solicitud provisional de los EE.UU. con número US 61/740,691 y el título "Dispositivo de cómputo que comprende una red de tablas" presentada el 21 de diciembre de 2012, y/o la solicitud de patente europea de mismo título "Dispositivo de cómputo que comprende una red de tablas", con fecha de presentación del 27 de diciembre de 2012 y el número de expediente EP12199387.
Aunque este sistema aporta bastante a la seguridad, existen un vector de ataque, especialmente si el modelo de ataque se amplía más. Suponemos que solo un atacante tiene acceso completo por lo que puede observar todo lo que sucede en el sistema, también nos preparamos para un atacante que es capaz de modificar el programa. Consideramos dos modificaciones, la modificación a las entradas de tablas y la modificación a las variables. El primer tipo de modificación supone menos sobre el atacante dado que la modificación podría hacerse antes de que comience la ejecución del programa; el tipo posterior de modificación se hace mientras el programa está en ejecución y por lo tanto de considera más difícil. Por ejemplo, un atacante puede tratar de seguir el siguiente ataque (más probablemente de forma automatizada). Él modifica una entrada en una tabla y ejecuta el programa modificado para una variedad de entradas. Si una de las ejecuciones muestra cualquier diferencia en la salida del programa original y el programa modificado, él concluye que la entrada de tabla modificada y la entrada de tabla no modificada son iguales en lo que respecta a los datos pertinentes y solo difieren en cálculos de ofuscamiento, es decir, las denominadas variables de estado y funciones de estado. Dado un tiempo suficiente puede construirse un mapa de las clases de valores que son iguales en lo que respecta al cálculo correcto. Efectivamente, se elimina por lo tanto la variable de estado. Para aclarar, debido a la codificación el atacante no será capaz de observar directamente si los valores de datos son los mismos mientras los valores de estado son diferente, pero puede ser capaz de deducir esto del análisis del efecto de modificaciones de tablas.
Sería ventajoso tener un dispositivo de cómputo configurado para calcular una función de datos sobre un valor de entrada de función con mayor flexibilidad contra modificaciones de programas.
Un dispositivo de cómputo configurado para calcular una función de datos sobre un valor de entrada de función, que solucione por lo menos esta preocupación.
El dispositivo de cómputo comprende un almacenamiento electrónico y un procesador electrónico acoplados al almacenamiento. El almacenamiento electrónico está configurado para almacenar una primera red de tablas configurada para la función de datos f, y una segunda red de tablas configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas.
El procesador está configurado, por ejemplo, a través de un código de procesador de computadora apropiado, obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla incluyen el valor de entrada de función, y calcular la función de datos aplicando la primera red de tablas a las múltiples primeras entradas de tabla para producir múltiples primeras salidas de tabla, las múltiples primeras salidas de tabla incluyen un valor de salida de función, el valor de salida de función corresponde al resultado de aplicar la función de datos al valor de entrada de función.
El procesador también está configurado para obtener múltiples segundas entradas de tabla para la segunda red de tablas, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla y las segundas entradas de tabla comparten por lo menos una entrada con las múltiples primeras entradas de tabla, y aplicar la segunda red de tablas a las múltiples segundas entradas de tablas, la segunda red de tablas está configurada para verificar por lo menos una salida específica de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla de la por lo menos una de las múltiples primeras entradas de tablas dadas.
La segunda red de tablas produce segundas salidas de tabla incluyendo una salida de función protegida, la salida de función protegida es igual a la salida de función en el caso de que la verificación sea exitosa y la salida de función protegida es desigual a la salida de función en caso de la verificación no sea exitosa. Por ejemplo, puede configurarse la segunda red de tablas de tal manera que la salida de función protegida siempre sea desigual en caso de que la verificación no sea exitosa. Sin embargo, en una implementación ventajosa la salida se hace aleatoria, por ejemplo, la salida en caso de una verificación no exitosa se selecciona aleatoriamente cuando se construyen las tablas. En este caso se podría tener ocasionalmente una salida igual. Tomando como referencia las variables de estado y la salida aleatoria puede requerirse que la salida fuese desigual en el caso de una verificación no exitosa en por lo menos 90 % de los casos, es decir, de todas las entradas de tabla, es decir, todas las primeras entradas de tabla posibles.
Este dispositivo de cómputo ofusca por lo tanto de forma profunda y protegida contra el ataque de modificación descrito anteriormente. De hecho, la primera red de tablas opera en múltiples entradas y produce múltiples salidas. Entre las múltiples entradas se encuentra por lo menos una de las entradas a la función de datos, y entre las múltiples salidas se encuentra por lo menos la salida de función. En la solicitud de patente antes mencionada se ha descrito que las redes de tablas pueden construirse en una variedad de formas. Como parte de la construcción la función de datos puede haberse evaluado para todos los valores de entrada posibles.
La segunda tabla de redes verifica parte del cálculo de la primera red de tablas. Para este fin la segunda red de tablas recibe la salida de la primera red de tablas, y comparte por lo menos parte de las múltiples entradas a la primera red de tablas. Dado que la segunda red de tablas no necesariamente tiene todos los múltiples valores de entrada, puede no ser posible que la segunda red de tablas realice el cálculo completo. Sin embargo, la segunda red de tablas se elije de tal manera que pueda verificar por lo menos una de las múltiples primeras salidas de tabla si una primera red de tablas no modificada hubiese obtenido un valor diferente. En otras palabras, la segunda red de tablas verifica la existencia de múltiples primeras entradas de tabla incluyendo la por lo menos una de las múltiples primeras entradas de tabla ingresada, de la cual una primera red de tablas no modificada obtiene una salida específica de las múltiples primeras salidas de tabla. Una manera práctica de lograr esto es realizar parte de todo el mismo cálculo que hizo la primera red de tablas, pero esto no es estrictamente necesario, por ejemplo dada parte de una entrada de función, puede ser posible concluir que algunas salidas de función se han hecho imposibles. También en este último ejemplo, esta compatibilidad se habrá establecido por enumeración durante la compilación y se consulta durante la ejecución.
Existen por lo menos dos maneras en las que la segunda red de tablas puede compartir una entrada con las múltiples primeras entradas de tabla. Una primera opción es que una de las entradas de la primera red de tablas se copie a la segunda red de tablas. Una consecuencia de este enfoque es que, en el caso de que la entrada se codifique junto con otras entradas, esas serán también entradas a la segunda red de tablas. Esto puede dar lugar a tablas más grandes que las deseadas; hasta cierto grado esto puede remediarse usando tablas de extracción, tales como tablas de extracción de estado, para obtener una entrada más, por ejemplo, un estado, de entradas que se codifican juntas. Una segunda opción es utilizar variables de sombra, es decir una o más de las múltiples entradas de la primera red se mantienen por lo menos por duplicado, posiblemente en una codificación diferente. Por ejemplo, la primera red de tablas puede tener entradas de función y de estado mientras que la segunda red de tablas solo comparte las entradas de estado. En este caso las entradas de la segunda red de tablas no necesita copiarse directamente de las entradas de la primera red de tablas; las dos redes tienen una o más entradas en común, pero las entradas en común no necesitan provenir necesariamente de la misma fuente. Esto puede dar lugar a tablas más pequeñas en la segunda red de tablas. Por otro lado requiere, por lo menos en partes del programa que algunas de las variables se mantengan por duplicado, es decir, las denominadas variables de sombra.
En el caso de que la segunda red de tablas detecte una modificación a la primera red de tablas, modifica la salida de función, es decir, saca una salida de función protegida a la salida de función. Esto tiene el efecto de que el atacante verá cambios debido a esta modificación con mayor frecuencia que lo que indicaría la probabilidad. Por ejemplo, incluso si un atacante ha modificado datos no relacionados (por ejemplo, estados) , esto puede detectarlo la segunda red de tablas que a su vez hace que el cambio se propague a variables de datos.
El ataque descrito anteriormente se hace más difícil, si no totalmente imposible.
En una modalidad, las múltiples primeras salidas de tabla incluyen además un valor de entrada de estado y las múltiples primeras salidas de tabla incluyen un valor de salida de estado, en donde el valor de salida de estado es igual al resultado de aplicar una función de estado al valor de entrada de estado, y la segunda red de tablas está configurada para tomar como entrada el valor de entrada de estado, la segunda red de tablas está configurada de tal manera que la salida de función protegida es igual a la salida de función en el caso de que el resultado de aplicar de la función de estado al valor de entrada de estado sea igual al valor de estado incluido en las múltiples primeras salidas de tabla ingresadas a la segunda red de tablas.
Al calcular dos funciones independientes entre sí, la función de datos y la función de estado en la misma red de tablas, es posible verificar una de ellas. Por lo tanto se reduce la cantidad de trabajo que necesita hacerse en la segunda red de tablas. Como resultado puede diseñarse la segunda red de tablas con menos entradas lo cual tiene el resultado de una tabla significativamente más pequeña.
En una modalidad, la primera red de tablas está configurada para tomar como entrada un valor de entrada codificado, el valor de entrada codificado combina el valor de entrada de función junto con un valor de entrada de estado codificado conjuntamente en un solo valor, y la primera red de tablas está configurada para producir como salida un primer valor de salida codificado, el primer valor de salida codificado combina el valor de salida de función junto con un valor de salida de estado codificado conjuntamente en un solo valor, en donde el valor de salida de estado es igual al resultado de aplicar una función de estado al valor de entrada de estado, la segunda red de tablas está configurada para tomar como entrada el primer valor de salida codificado y el valor de entrada de función, la segunda red de tablas está configurada para producir como salida un segundo valor de salida codificado, el segundo valor de salida codificado contiene la salida de función protegida.
La codificación de algunas o todas las múltiples entradas y/o algunas o todas las múltiples salidas en conjunto hace que la ingeniería inversa del dispositivo sea mucho más difícil. Un atacante no sabe directamente que representa un valor, o de hecho cuál es el valor.
Una codificación (con frecuencia denominada 'E') es por lo menos parcialmente reversible, es decir, para algunos pares codificados de un valor de entrada de función y un valor de entrada de estado, el valor de entrada de función y/o el valor de entrada de estado pueden recuperarse; similarmente, para un par codificado de un valor de salida de función y un valor de salida de estado. En una implementación práctica, las codificaciones se seleccionan típicamente como completamente reversibles, aunque como se indicó arriba esto no es estrictamente necesario. Es decir, para una codificación completamente reversible puede recuperarse tanto el valor de entrada de función como el valor de entrada de estado para cualquier par codificado de un valor de entrada de función y un valor de entrada de estado. Similarmente, de un par codificado de un valor de salida de función y un valor de salida de estado, el valor de salida de función y el valor de salida de estado pueden recuperarse.
Una codificación es privada, es decir, diferentes implementaciones del sistema pueden utilizar una manera diferente de codificar valores de entrada o salida conjuntamente .
Adicionalmente, la codificación se adhiere por lo menos en parte al principio de difusión. Los valores en el segundo valor dependen en gran medida del valor codificado. Por ejemplo, cuando un valor de entrada/salida se recupera de un valor de entrada/salida codificado, entonces el valor de entrada/salida depende preferentemente de todo el valor de entrada/salida codificado; por lo menos depende de más bits que el tamaño de bits del propio valor de entrada/salida. Esto tiene el efecto de que la información en el valor de entrada/salida se distribuye en muchos bits. Preferentemente, si se accede a solo parte de un valor codificado, es imposible recuperar los valores que codifica, incluso si se conoce perfectamente la función de codificación/decodif icación. Nótese que tradicionalmente, el cifrado frecuentemente utiliza una clave. El uso de una codificación con clave es una posibilidad atractiva, pero debido al tamaño relativamente pequeño de los valores de entrada/salida también es posible representar la codificación como una tabla. Por esta razón la codificación y el cifrado en el contexto de valores de variables, tales como valores de entrada/salida o valores intermedios se usan de manera intercambiable .
Debido a que la red de tablas puede representar dos funciones, y de hecho los valores de entrada codificados contienen dos entradas (la función y el estado), es imposible saber de la red de tablas si es una versión codificada de la función de datos o de la función de estado. De hecho la red de tablas está completamente equipada para calcular cualquier función y de hecho calcula ambas funciones en una variable independiente, o conjunto de variables (en modalidades de funciones de datos y o funciones de estado que tienen múltiples entradas).
Por ejemplo, aplicado al ejemplo anterior, podría obtenerse una red de tablas que podría usarse para realizar adición y multiplicación. Por inspección de la red de tablas no puede saberse cuál es utilizada, dado de hecho la red de tablas puede realizar cualquiera.
La función de datos puede tomar uno o múltiples valores de entrada. La función de estado puede tomar uno o múltiples valores de entrada. En una modalidad, el número de valores de entrada de los datos y la función de estado es el mismo. Por ejemplo, el dispositivo puede configurarse para obtener los múltiples valores de entrada de función como múltiples valores de entrada codificados. Cada unos de los múltiples valores de entrada codificados combina un valor de entrada de función de los múltiples valores de entrada con un valor de entrada de estado de los múltiples valores de entrada de estado cifrados conjuntamente en un solo valor. La red de tablas está configurada para tomar como entrada los múltiples valores de entrada codificados y producir como salida un valor de salida codificado. El valor de salida codificado combina un valor de salida de función junto con un valor de salida de estado cifrados conjuntamente en un solo valor. El valor de salida de función es igual al resultado de aplicar la función de datos a los múltiples valores de entrada de función, y el valor de salida de estado es igual al resultado de aplicar una función de estado a los múltiples valores de entrada de estado.
En una modalidad, la segunda red de tablas está configurada para producir como salida, un segundo valor de salida codificado, el valor de salida codificado combina el valor de salida de función protegido junto con un valor de salida de estado protegido cifrados conjuntamente en un solo valor, la salida de estado protegida es igual al resultado de aplicar una permutación de estado al valor de salida de estado .
La adición de una segunda red de tablas que contrarresta modificaciones a la primera red se suma significativamente a los problemas de ataque el sistema. Sin embargo, si el atacante pudiese hallar la segunda red de tablas, puede ser capaz de juzgar a partir de su salida si un cambio fue hecho o no por el. Al modificar siempre el valor de estado en la salida de la segunda red de tablas, un atacante no puede ver si la segunda red de tablas necesitó o no aplicar un cambio a la salida de función, dado que un valor codificado cambiará totalmente aún cuando solo un valor en el cambia.
En una modalidad, la segunda red comprende una tabla de estado y una red de tablas de alineación, la tabla de estado está configurada para la función de estado, el procesador está configurado para aplicar la tabla de estado a la entrada de estado para obtener un valor de salida de estado paralelo, la red de tablas de alineación está configurada para recibir como entrada por lo menos el valor de salida de estado paralelo y el valor de salida de estado recibido de la primera red de tablas. De esta manera, las tablas de estado pueden ser tablas de función paralelas. Pueden usarse múltiples tablas de estado y función antes de realizar una red de tablas de alineación. Esto reduce el número de comprobaciones hechas en la modificación, mientras aún las detecta. De esta manera se reduce el tamaño de la codificación.
En una modalidad, la segunda red de tablas comprende una tabla de estado modificado y una red de tablas de alineación, la tabla de estado está configurada para recibir como entrada un valor de entrada de estado y calcular un valor de estado modificado, el valor de estado modificado es igual al resultado de aplicar la función de estado al valor de entrada de estado seguido por una función de estado adicional, la red de tablas de alineación está configurada para tomar como entrada el valor de entrada de estado y el valor de salida de estado modificado y verificar que la función de estado adicional aplicada al valor de salida de estado produce el valor de salida de estado modificado.
En la misma tabla de estado se realiza una composición de función de la función de estado y una función de estado adicional, mientras que en la primera red de tablas solo se usa la función de estado. La tabla de alineación verifica si la variable de estado tiene el valor esperado. Nótese que la salida se comprueba, no necesariamente cómo se ha obtenido. Esto protege contra ataques que intentan remover la red de tablas de alineación y reemplazar su salida por ejemplo por la salida de la primera red de tablas. El intento no trabajaría dado que la variable de estado y la variable de datos ya no se ejecutan en paralelo.
No es necesario que la segunda red de tablas opere en los valores de estado; pueden utilizarse otras partes de las múltiples entradas. En una modalidad, la segunda red de tablas está configurada para tomar como entrada el valor de entrada de función, la segunda red de tablas está configurada de tal manera que la salida de función protegida es igual a la salida de función en el caso de que el resultado de aplicar la función de datos al valor de entrada de función sea igual al valor de salida de función codificado en el primer valor de salida codificado.
La entrada y salida de función puede ser de 4, 5, 6, 7 u 8 bits, posiblemente aún mayor, por ejemplo 16 bits, los valores de entrada y salida de estado del mismo tamaño o posiblemente menores, por ejemplo de 2 ó 3 bits. Una elección práctica es tener cada uno los valores de función y estado de 4 bits, y valores codificados, que contienen una función y un valor de estado, como de 8 bits.
Un aspecto de la invención se relaciona con un compilador configurado para recibir la función de datos y para producir una primera y segunda red de tablas, en donde la primera red de tablas está configurada para recibir múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla incluyen el valor de entrada de función, y producir múltiples primeras salidas de tabla, las múltiples primeras salidas de tabla incluyen un valor de salida de función, el valor de salida de función corresponde al resultado de aplicar la función de datos al valor de entrada de función, la segunda red de tablas está configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, la segunda red de tablas está configurada para recibir múltiples segundas entradas de tabla, las segundas entradas de tabla está configurada para recibir múltiples segundas entradas de tabla, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla y por lo menos una de las múltiples primeras entradas de tabla, la segunda red de tablas está configurada para verificar por lo menos una salida específica de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla de la por lo menos una de las múltiples primeras entradas de tablas dadas, la segunda red de tablas produce segundas salidas de tabla incluyendo una salida de función protegida, la salida de función protegida es igual a la salida de función en el caso de que la verificación sea exitosa y la salida de función protegida es desigual a la salida de función en caso de que la verificación no se exitosa .
El dispositivo de cómputo es un dispositivo electrónico; por ejemplo, un dispositivo electrónico móvil, un telefono móvil, un decodificador, una computadora, o similar.
Un método de conformidad con la invención puede implementarse en una computadora como un método implementado en computadora, o en hardware dedicado, o en una combinación de ambos. El código ejecutable para un método de conformidad con la invención puede almacenarse en un producto de programa de cómputo. Ejemplos de productos de programa de cómputo incluyen dispositivos de memoria, dispositivos de almacenamiento óptico, circuitos integrados, servidores, software en línea, etc. Preferentemente, el producto de programa de cómputo comprende medios de códigos de programa no transitorios almacenados en un medio de lectura por computadora para realizar un método de conformidad con la invención cuando el programa de cómputo es ejecutado en una computadora .
En una modalidad preferida, el programa de cómputo comprende medios de códigos de programas de cómputo adaptados para realizar todos los pasos de un método de conformidad con la invención cuando el programa de cómputo es ejecutado en una computadora. Preferentemente, el programa de cómputo está incorporado en un medio de lectura por computadora.
Breve Descripción de las Figuras Estos y otros aspectos de la invención serán evidentes y se entenderán al hacer referencia a las modalidades descritas de aquí en adelante. En las figuras.
La figura 1 es un diagrama esquemático que ilustra una red de tablas que implementa una función de datos y una función de estado, la figura 2 es un diagrama de bloques que ilustra dispositivos de cómputo 202 y 204 configurados con una red de tablas, la figura 3 es un diagrama de bloques que ilustra una red de tablas, la figura 4 es un diagrama de bloques que ilustra una red de tablas en general, la figura 5 es un diagrama de bloques que ilustra un dispositivo de cómputo, la figura 6 es una diagrama de flujo que ilustra un compilador, la figura 7 es una diagrama de flujo que ilustra un metodo para calcular una función, las figuras 8a y 8b son diagramas de bloques que ilustran una red de tablas, la figura 9 es un diagrama de bloques que ilustra un flujo de programa.
Debe apreciarse que los elementos que tienen los mismos números de referencia en diferentes figuras, tienen las mismas caracterís icas estructurales y las mismas funciones, o son las mismas señales. Cuando la función y/o la estructura del elemento ha sido explicado, no hay necesidad de una explicación repetida del mismo en la descripción detallada.
Descripción Detallada de la Invención Aunque la presente invención es susceptible de modalidades de muchas formas diferentes, se muestran en las figuras y se describirán detalladamente en la presente una o más modalidades específicas, en el entendimiento de que la presente descripción se considerará como ejemplo de los principios de la invención y no pretende limitar la invención a las modalidades específicas mostradas y descritas.
La figura 4 ilustra el concepto general de la red de tablas, se muestra ahí la red de tablas 400. La mayoría de las funciones pueden expresarse como una red de tablas. En particular cualquier composición de operaciones aritmeticas y lógicas puede expresarse de esta manera. Por ejemplo, la red de tablas puede ser una imple entación, por ejemplo una cifra. Se muestran 8 tablas de múltiples tablas. Una tabla transforma un valor de entrada a un valor de salida por consulta del valor de entrada. Se muestran tres de las tablas de entrada 410, para recibir una entrada desde fuera de la im lementación de función. Se muestra una de las tablas de salida 430. Las tablas de salida 430 forman en conjunto la salida de la implementación de función, por ejemplo, por concatenación. Se muestran cuatro tablas de las tablas intermedias 420, 422, 424, 426, que reciben por lo menos una entrada de otra de las tablas, y producen una salida para usarse como una entrada para por lo menos otra tabla; en el diagrama por ejemplo las tablas intermedias 422 y 410 proporcionan una entrada para la tabla 426. Estas tablas forman conjuntamente una red. La cifra puede ser una cifra de bloque; la cifra de bloque puede estar configurada para cifrado o para descifrado. La cifra de bloque realiza el cifrado de un bloque, por ejemplo AES. La implementación puede ser una clave particular, en cuyo caso las tablas pueden depender de la clave particular.
La tabla de consulta 426 representa un operador que tiene dos entradas y una salida. La construcción de tablas de consulta para operadores monádicos puede ampliarse a operadores diádicos. Por ejemplo, la segunda entrada puede currificarse ; con referencia a la téenica de transformación, currificación es la técnica de transformar una función que toma n múltiples argumentos (o un múltiplo de n argumentos) de tal manera que puede denominarse una cadena de funciones, cada una con un solo argumento. Cuando este enfoque se usa la tabla de consulta 426 se implementa como tablas de consulta monádicas múltiples. Por otro lado, también pueden generarse cadenas de bits para cada entrada y concatenar los resultados. De esta manera se genera directamente la tabla de consulta, y se obtiene una sola tabla de consulta pero más grande. Aunque la disposición de las tablas de consulta pueden diferir con base en la construcción, estas pueden tener un tamaño igual y las mismas propiedades. Nótese que no es necesario que se codifiquen múltiples valores de entrada de acuerdo con la misma codificación.
La red de tablas puede usar múltiples tablas que codifican dos funciones o tienen como redes de tablas de subred que codifican para dos funciones. Adicionalmente, la red de tablas puede incorporar una o una primera y segunda red de tablas para evitar que un atacante use la modificación de tablas y/o variables para aprender información útil acera del sistema.
El sistema puede estar configurado para usar esa función de estado o de datos de una tabla de red dependiendo de la codificación actual. Pueden aplicarse téenicas de ofuscamiento, también en las redes de tablas descritas en la presente .
Por ejemplo, suponga que una segunda tabla recibe como entrada la salida de una primera tabla, entonces la salida de la primera tabla puede codificarse con una codificación secreta, por ejemplo, elegida aleatoriamente, y la entrada de una segunda tabla puede codificarse con codificación inversa.
La figura 1 muestra una tabla de red 180 integrada en una red de tablas más grande 100. La red de tablas 180 como se muestra contiene solo una única tabla 130. Como se indica, es posible implementar la tabla 130 como una red de tabla, en una concesión mutua, por ejemplo, entre el tamaño de la tabla y la seguridad. En la figura 1, las tablas se ilustran con rectángulos, y los valores se ilustran con un rectángulo con la esquina superior derecha recortada.
La red de tablas 180 está configurada para tomar múltiples valores de entrada codificados como entrada, se muestran valores de entrada codificados 122 y 124. La red de tablas 180 está configurada para producir como salida un valor de salida codificado 160. En la siguiente descripción supondremos que las funciones de datos y las funciones de estado tienen dos valores de entrada y un solo valor de salida. Sin embargo, las modalidades pueden extenderse a cualquier número de valores de entrada y/o valores de salida. En particular las funciones de datos/estado con una entrada y una salida son posibles y las funciones de datos/estado con dos entradas y una salida son posibles.
La red de tablas 180 está configurada para la función de datos y está almacenada en un almacenamiento electrónico, acoplado al procesador electrónico configurado para calcular la función de datos mediante la aplicación de la red de tablas .
El valor codificado 122 se obtiene de un valor de entrada de función 102 y un valor de entrada de estado 112.
Por ejemplo, esto puede hacerse por medio de un codificador 110. El codificador 110 puede estar incluido en el mismo dispositivo que almacena la red de tablas 180, pero no es necesario. Los valores de entrada puede ser recibidos ya en una forma codificada y/o pueden ser transmitidos en forma codificada. O pueden ser recibidos/transmitidos en forma no codificada. En éste último caso pueden codificarse y usarse internamente en forma codificada. Puede haber también una recodificación, por ejemplo, si fuera del dispositivo se usa una codificación diferente. Por ejemplo, el valor de salida de función 162 y el valor de salida de estado 164 pueden obtenerse de un decodificador 170.
La entrada codificada de la función de datos puede ser la salida de otra tabla o red de tablas. Ésta puede o no ser una red de tablas configurada para dos funciones. Al combinar las redes de tablas configuradas para diferentes funciones de datos, pueden integrarse programas completos.
El codificador/decodificador 110 y 170 puede obtenerse como la inversa de uno del otro. El codificador 110 puede obtenerse como sigue. Se enumera cada combinación posible de valor de entrada de función y valor de entrada de datos. Por ejemplo, si ambos son de 4 bits de ancho, entonces existen 16 x 16 256 combinaciones posibles. Las 256 combinaciones pueden relacionarse consigo mismas en un orden biyectivo. Lo mismo aplica a otros tamaños. También puede usarse una función de cifrado, por ejemplo, puede aplicarse una cifra de bloque de 8 bits, utilizando alguna clave de codificación secreta .
El valor de entrada codificado contiene el valor de entrada de función 102 y el valor de entrada de estado 112 de manera independiente, por ejemplo, la entrada de función depende de todos los bits de la entrada codificada. Por lo tanto, conociendo solo parte del valor de entrada codificado 122 generalmente no permitirá hallar el valor de entrada de función 102 o el valor de entrada de estado 112.
Abajo proporcionamos varias modalidades que utilizan lenguaje matemático. Una ventaja de combinar valores de entrada de función con valores de estado es que las entradas de función tienen múltiples representaciones. La función f se refiere a la función de datos y g a la función de estado. La función f está codificada en F de tal manera que un valor en el dominio de F tiene múltiples representaciones. Con el objeto de ocultar qué función f está siendo codificada, la(s) entrada (s) y salida(s) de f tienen múltiples representaciones en el dominio e intervalo de la versión codificada F de f. La función está diseñada de tal manera que siempre que X sea una representación de x, entonces F(X) es una representación de f (x). En la secuela algunas veces hablamos acerca de variables "largas" (entrada/salida de F) y de variables "cortas" (entrada/salida de f) para enfatizar que cada entrada/salida de f corresponde a múltiples entrada/salida de F, por lo que en general necesitamos más bits para representar las entrada/salida de F que para representar las entrada/sal ida de f. Una manera de obtener múltiples representaciones para operandos se describe a continuación. De nuevo nótese que por simplicidad, consideramos funciones con símbolos de entrada y salida iguales; esto puede generalizarse .
Sea W que denota el conjunto de operandos que deseamos codificar. Introducidos un conjunto finito de "estados" y un conjunto finito V con cardinalidad igual al producto de las cardinalidades de y å . Los elementos de W x å se relacionan uno a uno con V por medio de una función de codificación secreta E. Los representantes del elemento w en W son los miembros del conjunto El número de representantes de cada elemento en W es igual a la cardinalidad de å . Como resultado, las trayectorias de datos que llevan símbolos de V son más amplias que las trayectorias de datos que llevan símbolos de W. Por ejemplo, si W es el conjunto de enteros de 16 bits y el espacio de estado å tiene 16 = 24 elementos, las trayectorias de datos para V utilizan 16 + 4 = 20 bits, mientras las trayectorias de datos para W utilizan 16 bits.
La siguiente modalidad codifica una función de dos variables. Considere una función f: W x W W que deseamos codificar. Construimos una función F: V x V V de tal manera que para todo wi, w2 e W y si, s2 e å tenemos que F (E (wi, oi) , E ( W2 o 2 ) ) e W ( (wi, W2) ) .
O, en otras palabras: F representa cualquier par de representantes de wi y w2 a un representante de f(wi, w2).
El estado del representante de f(wi, w2) puede depender de ambos operandos wi y w2 y podría depender incluso de ambos estados si y s2/ ya sea de manera determinística o aleatoria. Más específicamente, el estado puede depender solo de los estados si y s2, que pueden implementarse tomando una función g: å x å å y definiendo F (E (wi, oi) , E (w2, a2) ) = E (f (wi , W2) , g (oí , så) ) .
Un caso especial interesante de la modalidad anterior surge si consideramos å = W. Entonces la función F que codifica f utilizando la funcióntambién codifica la función g, aunque con una función de codificación E diferente. Es decir, no puede deducirse cuál de las dos funciones, f o g está siendo i plementada por F. Definimos E(x,y) = E (y,x). Por cálculo hallamos que F ( E ( si , wi ) , E ( 02 , W2 ) ) = F (E (wi, si) , E (W2, 02) ) = E (f (wi, W2) , g (si , 02) ) = E (g (oí, 02) , f (wi, wå) ) .
Una tabla de F implementa por lo tanto la función f si la codificación E está siendo utilizada, y la función g si É está siendo utilizada como función de codificación. De esta manera, se demuestra que de la tabla 130 sola no puede saberse qué función está siendo utilizada, dado que podría codificar para por lo menos dos funciones.
La tabla para F puede servir para calcular tanto f como g. De hecho, si se usa E, entonces, como se dijo antes, la tabla para F imple enta f. La misma tabla también puede usarse para implementar g mediante procesamiento previo y posterior de entradas y salidas con al función E E_1. Para precisar, sea wi,w2, e å, y escribimos i = E(wioi), i = 1,2. Entonces tenemos que F ( (EE 1 (VÍ) , EE 1 (v2) = F (E (wi, si) , E (w2, a2) ) = F (E (si , wi) , E (s2 , w2) ) = E (f (s? , 02 ) , g (Wl , W2 ) ) ) .
Consecuentemente, tenemos que EE 1 [F ( (EE-1 (vi) , EE-1 (v2) ) ] = (g (wi, w2) , f (oi , s2) ) .
Los valores de entrada codificados pueden ser valores de entrada a un programa de cómputo, posiblemente conteniendo o representados por la función de datos. El programa de cómputo puede ejecutarse en una computadora. Las instrucciones del programa de cómputo pueden representarse por la función de datos. Las codificaciones y decodificaciones pueden estar bajo el control de una clave secreta. Las tablas de codificación y decodificación pueden considerarse como la clave. Si se aplica una instrucción f que opera en datos codificados con la codificación Ek, entonces primero decodifica los datos, después f se aplica en los datos decodificados, y a continuación el resultado se codifica de nuevo. Es decir, los datos x producen la salida F (x) Ek(f(Dk(x)). Al almacenar directamente la función F, por ejemplo como una tabla de consulta, la función f y su semántica están ocultas. En una modalidad específica, la decodificación es la inversa izquierda de la decodificación, es decir, Dk(Ek(x)) = x para toda x. Esto tiene la ventaja de que si dos funciones f y g son codificadas y decodificadas con las mismas funciones Ek y Dk, entonces la versión codificada de la función f(g(x)) puede hacerse usando sucesivamente las tablas para G(x) = Ek(g(Dk(x)) y F(x) E ((Dk(x)). De hecho, puede observarse que por cada x tenemos que Ek(f(g (Dk(x)) = F(G(x)), de tal manera que la versión codificada para f(g(x)) puede obtenerse de los accesos subsiguientes de las tablas para G y para F. De esta manera, las secuencias de operaciones se pueden aplicar sin codificar y decodificar entre operaciones sucesivas, por lo tanto mejorando en gran medida la seguridad. En una modalidad, la codificación y decodificación solo tiene lugar en el lado seguro, mientras que todas las operaciones codificadas tienen lugar en un lado inseguro abierto. La(s) salida(s) de una o más funciones pueden servir como entrada (s) a la otra función codificada. Como hemos visto esto puede disponerse convenientemente si las codificaciones y decodificaciones son la inversa de la otra. Una modalidad preferida para ejecutar una secuencia de operaciones con nuestras invenciones es la siguiente. Primero, en el dominio seguro, las variables "cortas" son transformadas a variables "largas". La aleatorización se involucra para asegurar que las variables "largas" ocurren con una frecuencia aproximadamente igual. Esto puede lograrse por ejemplo teniendo un dispositivo que genera un estado aleatorio o e å, y relacionando la variable x en E (x,o) en donde Ek es una codificación de las variables "largas" . Después de todos los cálculos en el lado abierto, toda operación que utilice variables "largas", la decodificación D se aplica en el lado seguro, y enseguida, se determina la variable "corta" que corresponde a la variable larga decodificada. Alternativamente, la decodificación y la determinación de la variable corta se hace en un solo paso combinado. La letra k denota un secreto, por ejemplo una clave secreta.
Tener múltiples representantes para variables implica que las trayectorias de datos se hacen más largas. También, implica que la tabla para implementar la versión codificada F de f se hace más grande. Por ejemplo, consideremos una función f(x,y) la cual tiene como entrada dos variables de 16 bits x y y y como salida una variable de 16 bits. Una tabla para implementar una versión codificada de f, sin tener múltiples representantes, utiliza una tabla con 216 x 216 entradas, cada entrada de tabla es de 16 bits de ancho, lo cual significa una tamaño de tabla de 236 bits. Supongamos ahora que cada variable de 16 bits tiene 16 representantes, el conjunto de representantes puede representarse por lo tanto con 20 bits. Ahora utilizamos una tabla con 220 x 220 entradas, cada entrada de tabla es de 20 bits de ancho, lo cual significa una tamaño de tabla de 5 x 242 bits. Es decir, la tabla es 5 x 26 = 320 veces tan grande como si no tuviera múltiples representantes.
A continuación se proporciona un ejemplo de una construcción de un codificador 110, un decodificador 170 y tablas extraetoras de estados 212 y 214. Supondremos una sola entrada de función y una entrada de estado (pueden haber más de cualquiera de ellas), de cada 4 bits.
Tabla 1 Las primeras dos columnas enumeran todas las combinaciones posibles de valores de entrada de función y valores de entrada de datos. La última columna enumera una permutación aleatoria del número 0 al 255 en binario. Nótese que el cifrado es perfecto, en el sentido de que incluso con un conocimiento perfecto de 256-2=254 pares de entrada-salida, los dos pares restantes aún tienen un bit de incertidumbre entre ellos. Una codificación perfecta es deseable, en un sentido teórico de información, pero no necesaria para buenos resultados; por ejemplo, podría obtenerse una codificación menos perfecta pero aún muy utilizable, usando por ejemplo una cifra de bloque de 8 bits de ancho, es decir una cifra de bloque que tiene un tamaño de bloque igual a la suma de una entrada de función y una entrada de estado.
Una tabla de codificación se obtiene clasificando las dos primeras columnas, la tabla resultante muestra cómo obtener la última columna (codificación) de las primeras dos. Al clasificar en la última columna, se obtiene una tabla que decodifica en lugar de codificar. Al remover la primera columna y clasificando en la última columna se obtiene una función de extractor de estado. Nótese que generalmente, no se necesita almacenar la columna de entradas y la columna de salidas. Por ejemplo, si la columna de entrada se clasifica y contiene todas las combinaciones posibles, puede omitirse.
La figura 2 ilustra redes de tablas 204 y 202 para usarse en un dispositivo de computación que tiene un almacenamiento electrónico y un procesador electrónico, por ejemplo, el dispositivo mostrado en la figura 5 (ver más adelante) .
Para la red de tablas 202 se muestran dos primeras redes de tablas 212 y 214. La primera tabla 214 utiliza una entrada de la salida 216 de la primera tabla 212. La red de tablas 212 y 214 puede ser del tipo de red de tablas 180. La primera tabla 212 recibe múltiples entradas 210, y produce múltiples salidas, entre las entradas se encuentra un valor de entrada de función y entre la salida se encuentra un valor de salida de función. Para aumentar la claridad de los diagramas, no se muestran múltiples entradas y múltiples salidas en forma individualizada, a menos que esto se considerase útil en la exposición. El valor de salida de función de la tabla 212 se usa como entrada adicional para la tabla 214, que a su vez produce múltiples salidas. Las múltiples entradas y salidas de las tablas 212 y 214 están codificadas por lo que un atacante no puede determinar, por lo menos no de un solo valor, qué parte corresponde a los datos reales y cuáles no. Por ejemplo, las tablas 212 y 214 pueden recibir como entrada una o más entradas codificadas, cada una de las cuales combina una entrada de función con una entrada de estado, y cada una puede producir una o más salidas codificadas. Una combinación frecuentemente utilizada es recibir dos o más entradas codificadas y producir una salida codificada.
El uso de la red 202 es ventajoso dado que la tabla 212 y 214 realizan cálculos en datos que no son directamente relevantes para los resultados finales del programa de la cual forma parte la red de tablas 202. Sin embargo, un atacante puede ser capaz de atacar el sistema modificando las entradas de las tablas y observando el resultado. Éste estaría viendo cambios que no parecen influir en la ejecución del programa, dado que de ello que es capaz de deducir que los valores originales y modificados son iguales en lo que concierne a los datos de función.
La red de tablas 204 se ha construido como una alternativa a la red de tablas 202 para evitar este ataque. La red de tablas 204 comprende las primeras redes de tablas 222 y 224, y adicionalmente también las redes de tablas 232 y 234. Las redes de tablas 222 y 224 pueden ser del tipo de redes de tablas 212 y 214 respectivamente.
La red de tablas 232 recibe como entrada la salida 226 de la red de tablas 222 y comparte por lo menos parte de su entrada con las entradas 220 de la red de tablas 220. La segunda red de tablas es capaz de verificar si las salidas 226 recibidas de la tabla 222 son compatibles con lo que la tabla 232 obtiene de las entradas 220. En particular, la tabla 232 verifica si hay una específica, pero más preferentemente para todas las múltiples primeras salidas de tabla 226 si una primera red de tablas 222 podría obtener una específica de las múltiples primeras salidas de tabla de la por lo menos una de las múltiples primeras entradas de tabla. La tabla (o red de tablas) 232 puede hacer esto mediante la operación de consulta de tabla. Durante la construcción de la tabla 232, se determina cuáles son todas las posibles entradas 220 y cuáles son todas las salidas correspondientes 226, de hecho esto puede ser parte de la construcción de la tabla 222. Enseguida se hace una tabla que indica para cara combinación de entrada y salida de la tabla 232 si corresponde o no a un par de entrada/salida de la tabla 222. Con base en esta determinación la tabla 232 tiene una salida diferente (ver abajo). En otras palabras, la tabla 222 determina la existencia de múltiples primeras entradas de tabla incluyendo la por lo menos una de las múltiples primeras entradas de tabla ingresada, de la cual una primera red de tablas no modificada obtiene la salida específica de las múltiples primeras salidas de tabla.
Una manera práctica de lograr esto es tener una salida 226 que es calculada solo a partir de parte de la entrada 220. Por ejemplo, las entradas 220 pueden comprender una entrada de estado y de función. La salida 226 puede contener una salida de función, la cual es una función aplicada a la entrada de función, y una salida de estado. La salida de estado es preferentemente solo dependiente de la entrada de estado, pero también depende de la entrada de función. Dada la entrada de función y todas las salidas de la tabla 222, la tabla 232 puede verificar que la entrada de función y la salida de función corresponden, es decir, si la función de datos aplicada a la entrada de función proporciona la salida de función. Alternativamente o además, dada la entrada de estado y todas las salidas de la tabla 222, la tabla 232 puede verificar que la entrada de estado y la salida de estado corresponden, es decir, si la función de estado aplicada a la entrada de estado proporciona la salida de estado. En modalidades preferidas, la segunda red de tablas verifica por lo menos las variables de estado. Captar este tipo de errores (es decir, estado modificado) se considera importante dado que puede resultar en una salida de programa no modificada (es decir, si ocurre que el valor de función no ha cambiado). Este último tipo de cambios lleva especialmente mucha información para el atacante.
Normalmente, la tabla 232 enviará la salida de 226 para usarse en la siguiente tabla/red de tablas, posiblemente realizando algún paso de procesamiento en ella. Sin embargo, en el caso de que la tabla 232 detecte un error, es decir, las entradas y salidas de 222 solo pueden haberse obtenido alterando la tabla 222 o posiblemente las variables, la tabla 232 hace aleatoria por lo menos parte de la salida 226 antes de transferirla. Nos referimos a un valor de salida que ha paso a traves de una segunda red de tablas como un valor de salida protegido. Un valor protegido es útil para un cálculo adicional en caso de que no se detectara un error, pero se ha hecho aleatorio en caso de que se detecte una alteración.
El efecto de variables protegidas es que la información que puede aprenderse por la alteración se reduce significativamente. El atacante encontrará que si realiza una alteración la salida cambia y el programa no funciona normalmente, pero esto es lo que se espera cuando hay una alteración; el atacante no aprende nada de este hecho por sí mismo. Sin embargo, la información útil, por ejemplo, que cambia corresponde al estado y cuyos datos de función han desaparecido debido a la aleatorización. La aleatorización se prefiere, pero también son posibles cambios más sutiles, siempre y cuando la salida de función protegida sea desigual a la salida de función en el caso de que la verificación no sea exitosa. Nótese que la aleatorización es fija en la(s) tabla (s) durante su construcción. No se necesita un generador de números aleatorios para aplicar la red de tablas.
La salida de la tabla 232, es enviada a una siguiente red de tablas, en este caso las tablas 224 y 234. Esto corresponde a una tabla 214, que necesitaría recibir la salida en una red no protegida. En este caso 224 es una primera red de tablas y 234 es una segunda red de tablas.
La red de tablas 204 se almacena en un almacenamiento electrónico, por ejemplo, una memoria flash o RAM, y es utilizada por un procesador electrónico, es decir, aplicando la red de tablas a datos recibidos del exterior del dispositivo o generados en el dispositivo. Nótese que en modalidades típicas, las entradas a la red de tablas están codificadas, de acuerdo con una codificación secreta que el atacante desconoce. Para las redes de tablas una codificación es transparente, no involucra ningún procesamiento adicional una vez que se hace la tabla. Es decir, la aplicación de una tabla a un valor pleno o a un valor codificado es igual en el requisito de procesamiento. Nótese que las codificaciones pueden cambiar fácilmente entre tablas. Una codificación es una relación entre un valor pleno y un valor utilizado internamente .
Preferentemente, la red de tablas 204 actúa sobre variables que combinan un valor de función con un valor de estado. Como el sistema tambien calcula en variables de estado, el atacante no puede saber a partir de la tabla qué función codifica, dado que la tabla realiza simultáneamente dos funciones. El papel de la variable de estado y la variable de función puede intercambiarse a lo largo de transcurso del programa. En estas modalidades, las tablas realizan simultáneamente dos funciones. Sin embargo, el número de funciones realizadas simultáneamente también puede elegirse más grande, complicando más el análisis por parte del atacante. Por ejemplo, una tabla puede representar tres funciones, por ejemplo la función de datos y una primera y segunda función de estado; incluso son posibles números de funciones más grandes, por ejemplo 4 ó 5.
A continuación se proporciona en lenguaje matemático una lista de modalidades de la segunda red de tablas. En estos ejemplos, u,v,x,y son variables que codifican un valor de función y un valor de estado; p,q,a son valores de estado; w es un valor de función. La variable v es la salida final de la primera y segunda red de tablas, que puede usarse en un procesamiento adicional corriente abajo, por ejemplo, tablas. La función f es una función de dato; g, gi y son funciones de estado. La función o es un extractor de estado, p es un extractor de valor de función y E una función de codificador, es decir o{E(w,p)) = p y p{E(w,p)) = w; todas estas funciones pueden implementarse como tablas. La función P es una función en variables de estado, preferentemente una permutación. La función F corresponde a f pero se transcribe al dominio codificado es decir, F{x, y) = E{ f (p {x) , p (y) , g{o{x) , o{y) ) ) .
La letra z denota una función de alineación, si la primera entrada corresponde a la segunda entrada y a entradas adicionales, la salida es la primera entrada, posiblemente con algún procesamiento adicional, si no la salida cambia. por ejemplo, se hace aleatoria.
En estas modalidades, las tablas trabajan en dos entradas de función. Sin embargo, el número de entradas puede elegirse como se desee. El sistema puede aplicarse a una sola entrada, pero es interesante que también a funciones de entrada múltiple. Utilizaremos como ejemplo estado y funciones que son de 4 bits, y codificaciones modificadas de ellas que son de 8 bits. Son claramente posibles diferentes tamaños; por ejemplo 2 bits para estado, 6 bits para función, etc .
En todos los ejemplos a continuación la primera red de tablas implementa la función u = F(x,y). Esto puede hacerse por medio de una sola tabla con dos entradas codificadas y una salida codificada.
La segunda red de tablas puede ser cualquiera de las siguientes : 1. La segunda red de tablas toma como entrada x, y y u, es decir, todas las entradas y salidas de la primera red de tablas. La segunda red de tablas contiene tres tablas. Las primeras dos son extractores de estado y la tercera es una tabla de alineación: Entrada x, y.p = o(x); q = o(y); v = E(z(u,p,q), P(a(u))). En este caso z(u,p,q) = o(u) si g(p,q) = o(u) y de lo contrario aleatoria. En otras palabras, la segunda red de tablas verifica que la primera red de tablas calculó la función de estado correctamente . Si la verificación es exitosa, u y v tienen valores iguales, pero diferentes estados. Si la verificación detecta un error, el valor de v difiere del valor de u. Nótese que el estado recibe un cambio en la forma de una permutación P. Esta modalidad utiliza tres tablas, con tamaños de entrada de 8, 8 y 16 bits. 2. La segunda red de tablas toma como entrada x, y y u. La segunda red de tablas contiene una tabla. Entrada x,y.v = E(z(u,x,y), P(s(u))). En este caso z(u,x,y) = p(u) si F(x,y) = u y de lo contrario aleatorio. En este caso se verifica el cálculo completo de la primera red de tablas. La tabla tiene el tamaño de entrada de 8+8+8= 24 bits. 3. La segunda red de tablas toma como entrada x, y y u. La segunda red de tablas contiene dos tablas. Entrada x,y.a = g (s(x),s(y)); v = E(z(u,a), P(o(u)). En este caso z(u, a) = p (u) si o(u) = a y de lo contrario aleatorio. En este caso se verifica solo la parte de estado de la primera red de tablas. Las tablas tienen un tamaño de entrada de 16 y 12 bits. Como una variante puede usarse: v = E(z(u,a), P(a)) para la tabla de alineación. Este cambio es de particular relevancia en caso de que falle la verificación.
Como variante adicional la segunda red de tablas utiliza : = s (x); q = o(y); a = g(p,q); v = E(z(u,a), P(o(u)). En este caso la segunda tabla utiliza 3 tablas, pero tiene entradas de solo 8, 8 y 12 bits. 4. El dispositivo actúa sobre dos tipos de variables: variables codificadas que tienen un valor tanto de estado como de función (variables "largas"·) y una variable de solo estado correspondiente (variables de estado). Esto último también puede codificarse, pero es de tamaño menor. Con el tamaño de ejemplo, las "variables largas" contienen un valor de función y un valor de estado y son de 8 bits, y la variable de estado correspondientes es de 4 bits. Una variable larga y de estado corresponde en el sentido de que sus variables de estado están en una relación verificable, por ejemplo, son iguales.
La primera red de tablas actúa como variables largas x y y como se indicó arriba. La segunda red de tablas toma como entrada las variables de estado correspondientes y u. Teniendo una variable de estado que corresponde a una variable larga es posible hacer diferentes subconjuntos de las múltiples entradas de la primera tabla disponible a la segunda tabla. Nos referimos a tc and xy como las variables de estado que corresponden a x y y. Nótese que las variables de estado son parte de la entrada de la primera red de tablas, dado que las variables largas codificadas contienen las variables de estado, es decir, tc= s(c), tg = o(y). La segunda red de tablas comparte estas entradas dado que utiliza como entrada ix, y y u contiene dos tablas para calcular Tu = g(ix,iy); v = E(Z(U,TU), P(TU)). En este caso z(u, tu) = p (u) si s(u) = Tu y de lo contrario es aleatorio. Las entradas a las tablas en la segunda red son solo de 8 y 12 bits. Nótese que TX Ty pueden ser variables separadas a las que se les hace un seguimiento, independientemente del valor real de s (x) y s (y). El programa ha sido configurado de tal manera que estos valores pueden verificarse uno con otro, es decir para determinar la igualdad. 5. La segunda red de tablas toma como entrada TX, Ty y la segunda red de tablas contiene dos tablas para calcular TU = g2 (gi(ix, Ty)).; v= E(Z(U,TU), P(xu))- En este caso z(u,xu) = p (u) si g2(o(u)) = TU y de lo contrario es aleatorio. En este caso gi es la función de estado g utilizada en la primera red de tablas. La tabla de cálculo de estado en la segunda red de tablas realiza una función adicional en los valores de estado, lo cual no se hace en la primera red de tablas. La tabla de alineación verifica entonces este hecho, y lo corrige. De esta manera es imposible que el atacante omita la tabla de alineación, dado que ocasionaría que los valores de estado y función se desalinearan. En la siguiente tabla de alineación se detectaría y corregiría el desajuste.
Nótese que estos ejemplos difieren en varios aspectos. Primero todos ellos tienen diferentes tamaños de entrada y salida, lo cual daría lugar a diferentes tamaños de tabla. El tamaño de tabla es un criterio importante de las necesidades del programa para mantenerse dentro de límites. También los ejemplos difieren en que los valores están disponibles a un atacante. Se considera una ventaja para un atacante si los valores de estado están disponibles sin la codificación con un valor de función. Dependiendo de los requerimientos exactos en tamaño y seguridad puede hacerse una elección entre estas alternativas. Nótese que no es necesario que un programa utilice solo una única elección. Diferentes segundas tablas pueden utilizar variantes diferentes.
Las figuras 3, 8a y 8b ilustran varias de estas posibilidades para una función de datos y una función de estado que toma una sola entrada. Por ejemplo, la figura 3 ilustra un dispositivo de cómputo 300. El dispositivo almacena una primera red de tablas 310 y una segunda red de tablas 340.
La primera red de tablas 310 toma como entrada 305 una variable larga x = E(w,p). La tabla 310 está construida para aplicar una función f 312 en la parte de función y una función g 314 en la parte de estado. Nótese que en la implementación actual estas partes no son directamente visibles; la tabla 310 trabaja directamente sobre el valor codificado, consultando el valor en una tabla previamente calculada. La tabla 310 produce una salida 307; u = E(f(w),g(p)). La segunda red de tablas como dos tablas: tabla 320 y 330. La segunda red de tablas toma x como entrada y aplica a ella una tabla de extractor de estado 320 para obtener el estado extraído 322; p = s(c). El estado extraído 322 y la salida 307 son entradas para la tabla de alineación 330. La tabla de alineación se ha construido a partir de la función z 332 y una permutación 334. En este caso z(u,p,) = c(u) si c(u) = p y de lo contrario es aleatorio. La permutación 334 aplica una permutación a un estado, en este caso la elección se hizo para el estado obtenido de la tabla 310, pero también fue posible el estado de la tabla 320. Con una permutación en la tabla de alineación se asegura que la salida de la tabla siempre cambia, independientemente del hecho de si se ha detectado o no un cambio. Esto evita un ataque en el cual se usa un cambio en la tabla 330 para determinar los cambios introducidos por la alteración. También la tabla 330 es una sola tabla, en la cual las funciones 332 y 334 no son separadamente visibles.
La figura 8a ilustra un dispositivo de cómputo 800 que comprende una memoria de trabajo que almacena un conjunto de variables largas, que codifican un valor de función y un valor de estado y un conjunto correspondiente de variables de estado. Para cada uno del conjunto de variables largas corresponde uno particular del conjunto de variables de estado. Una variable largo y de estado tiene una relación verificable. Por ejemplo, la variable larga codifica un valor de estado que también está codificado en la variable de estado. Por ejemplo, la variable larga codifica un valor de estado mientras que la variable de estado codifica una función de ese valor de estado.
Una red de tablas se almacena en el dispositivo 800. Una primera red de tablas 310 se usa como se describió arriba, tomando como entrada una variable larga (se muestra la situación en la cual una sola variable larga es recibida, pero son posibles más, las fórmulas anteriores ilustran la situación en la cual son recibidas dos variables largas, son posibles más).
La tabla 310 recibe múltiples entradas, es decir, un valor de función y un valor de estado. Nótese que estas dos entradas están codificadas conjuntamente; sin embargo la tabla 310 actúa sobre las entradas de diferentes maneras. En particular, la tabla 310 puede actuar muy bien sobre la entrada de función y estado independientemente una de la otr .
La segunda red de tablas comprende una tabla de función de estado 810 y una tabla de alineación 330. Para la tabla 330 puede usarse la misma tabla cono en la figura 3. La tabla de función de estado 810 toma como entrada un subconjunto de las múltiples entradas de la tabla 310; en particular son recibidos los valores de estado. Esto puede implementarse aplicando la tabla 810 a las variables de estado que corresponden a las variables largas a las cuales se aplica la tabla 310; alternativamente 805 puede ser parte de una trayectoria que desarrolla independientemente del desarrollo de la trayectoria 305. La tabla 810 implementa la misma función de estado que la tabla 310.
En implementaciones preferibles la función de estado utilizada tanto por la tabla de función de estado 810 como la tabla 310 actúa independientemente de la función. Esto simplifica bastante la implementación . Sin embargo es posible introducir las dependencias de valores de función en la tabla de función de estado. En este caso, la tabla de función de estado 810 utiliza parte de los resultados intermedios de la tabla 310, en su cálculo. Debe tenerse cuidado de no exponer los valores de función en forma plena cuando se hace esto; si por otro lado el siguiente estado solo depende de estados presentes, no en valores de función, la exposición de los valores de estado es menos crítica.
La tabla 810 produce como salida 807 el resultado de aplicar la función de estado al valor de estado; g(xx). Nótese que este valor es un valor de estado (no combinado con un valor de función) pero se codificará en una iplementación típica. En redes de tablas no es inusual codificar datos, dado que esto no impide el procesamiento de ninguna manera. Es interesante que múltiples entradas, por ejemplo los valores de función y estado puedan codificarse juntos, es decir cifrarse en un solo valor. La codificación de una variable de estado puede hacerse con una permutación aleatoria del espacio de estado. La salida de la tabla 340 puede usarse en el procesamiento subsiguiente, por ejemplo, en redes de tablas adicionales.
La figura 8b describe una variación interesante. Se muestran una primera red de tablas que contiene una tabla 310, que recibe entradas largas 305 y 815 y la tabla 830 utilizando una salida 305 de la tabla 310 y una entrada larga adicional 836. Las tablas 310 y 830 son capaces de calcular una función más complicada en múltiples entradas codificadas. Las tablas de función de estado 810 y 820 con correspondientes a las tablas 310 y 830. Esas tablas reciben como entrada las variables de estado que corresponden a las variables largas utilizadas por las tablas 310 y 830, es decir: las variables de estado 805, 806, 807, 816, 817 corresponden a las variables largas 305, 815, 307, 836 y 837 respectivamente .
Es interesante que esto proporciona la posibilidad de ejecutar un segmento de un programa de cómputo dos veces, una vez utilizando una red de tablas que actúa en variables largas y una vez actuando en variables de estado correspondientes. Al final del segmento una tabla de alineación verifica si los dos programas están aún en sincroní .
Esto se ilustra adicionalmente en la figura 9. Como en todas las figuras, la ejecución del programa va desde la parte superior de la figura hasta la parte inferior. En 910 el programa se ejecuta en una sola línea de ejecución. No se hacen verificaciones adicionales. En algún punto se introduce una parte más sensible a la seguridad. En ese punto el programa de divide en dos partes, por ejemplo a la izquierda de evalúan variables de estado mientras que a la derecha se evalúan variables largas. Esto ocurre en 920. En algún punto se introduce una parte aún más crítica. En este punto, por ejemplo las variables largas son evaluadas por completo dos veces. Al final de esa sección una tabla de alineación asegura que no se hicieron cambios; esto se hace en 930. Aún cuando no se detectaron cambios el programa continúa ejecutándose, pero con valores que son borrados de correlaciones útiles. En 940 la primera bifurcación tambien finaliza, de nuevo con una función de alineación. En 950 el programa continúa ejecutándose como dos líneas de ejecución, por ejemplo variables de estado y largas. Finalmente, en 960 hay otra función de alineación y el programa se ejecuta de nuevo como una sola línea de ejecución.
La figura 5 muestra un dispositivo de cómputo 500, que tiene un dispositivo de almacenamiento 510. El dispositivo mostrado en la figura 5 puede usarse con las redes de tablas ilustradas en las figuras 1, 2, 3, 4, 8a, 8b y 9; en particular como los dispositivos de cómputo 100, 204, 202, 300, y 800.
El dispositivo de almacenamiento 510 es típicamente una o más memorias volátiles, pero tambien puede ser un disco duro, un disco óptico, etc. El dispositivo de almacenamiento 510 también puede ser una memoria volátil que comprende datos descargados o recibidos de otra manera. El dispositivo de cómputo 500 comprende un procesador 550. El procesador típicamente ejecuta el código 555 almacenado en una memoria. Por conveniencia el código puede almacenarse en memoria 510. El código hace que el procesador ejecute un cálculo. El dispositivo 500 puede comprender un dispositivo 1/0 opcional 560 para recibir valores de entrada y/o transmitir resultados. El dispositivo 1/0 560 puede ser una conexión de red, un dispositivo de almacenamiento removible, etc.
El dispositivo de almacenamiento 510 contiene una o más redes de tablas de acuerdo con una de las figuras 1 a 3.
En una modalidad, el dispositivo de cómputo puede trabajar de la siguiente manera durante la operación: el dispositivo de cómputo 500 recibe valores de entrada. Los valores de entrada son codificados, por ejemplo, usando la tabla de codificación 541, por ejemplo la tabla 110. Por lo tanto los valores de entrada se obtienen como valores de entrada codificados. Nótese que los valores de entrada podrían obtenerse directamente como valores de entrada codificados, por ejemplo a través del dispositivo 560. La codificación de un valor de entrada a un valor de entrada codificado implica que se ha elegido una entrada de estado. Existen varias maneras de hacerlo, por ejemplo, la entrada de estado puede elegirse de manera aleatoria, por ejemplo, por medio de un generador de números aleatorios. La entrada de estado puede elegirse de acuerdo con una algoritmo; el algoritmo puede ser complicado y agregarse a la ofuscación. El valor de entrada de estado también puede ser constante, o tomarse secuencialmente de una secuencia de números, por ejemplo la secuencia de enteros que tienen un incremento constante, por ejemplo de 1, y comenzar en algún punto de inicio; el punto de inicio puede ser cero, un número aleatorio, etc. La elección de las entradas de estado como un número aleatorio y aumentando con 1 para cada siguiente elección de entrada de estado es una elección particularmente ventajosa. Si las entradas de estado son elegidas fuera del dispositivo el atacante no tiene manera de rastrear en dónde se eligen los valores de entrada de estado y cuáles son.
El procesador 550 ejecuta un programa 555 en la memoria 510. El programa hace que el procesador aplique tablas de consulta a los valores de entrada codificados, o a valores de salida resultantes. Las tablas de consulta pueden crearse para cualquier función aritmética por lo tanto puede realizarse cualquier cálculo usando una secuencia de tablas de consulta. Esto ayuda a ofuscar el programa. En este caso las tablas de consulta son codificados para ofuscación y tambien lo son los valores intermedios. En este caso la ofuscación es particularmente ventajosa porque un solo valor de entrada de función puede ser representado por múltiples valores de entrada codificados.
Adicionalmente, algunas o todas la tablas y/o redes de tablas tienen la propiedad de función múltiple, de las redes de tablas que tienen la propiedad de función múltiple algunas o todas son apareadas con una segunda red de tablas para verificación de los resultados.
En algún momento se encuentra un valor de resultado. Si es necesario el resultado puede decodificarse, por ejemplo, usando la tabla de decodificación 542, por ejemplo la tabla 170 se ilustra en la figura 1. Pero el resultado puede exportarse también en forma codificada. Los valores de entrada también pueden obtenerse de dispositivos de entrada, y los valores de salida pueden usarse para mostrarse en una pantalla .
El cálculo es realizado en palabras de datos codificados. El cálculo se hace aplicando una secuencia de accesos de consulta de tablas. Los valores de entrada pueden ser valores de entrada recibidos desde fuera del dispositivo de cómputo, pero también pueden obtenerse por accesos de tablas de consulta previos. De esta manera se obtienen resultados inmediatos que pueden usarse para nuevos accesos de tabla de consulta. En algún momento uno de los resultados intermedios es el resultado codificado de la función.
El dispositivo de cómputo 500 puede comprender un generador de números aleatorios para asignar los valores de entrada de estado a las entradas de función de datos.
La figura 6 ilustra como un diagrama de flujo un metodo de compilación 600. En el paso 610 un primer programa de cómputo es recibido por un receptor. En el paso 620 se realiza un análisis léxico, por ejemplo, para identificar símbolos, por medio de un analizador léxico. Posiblemente se realiza el procesamiento tal como una macroexpansión . En el paso 630 el programa es analizado sintácticamente por medio de una analizador sintáctico. Por ejemplo, el analizador sintáctico genera un árbol de análisis sintáctico de acuerdo con una gramática formal del lenguaje de programación del primer programa. El analizador sintáctico identifica las diferentes construcciones de lenguaje en el programa e invoca rutinas apropiadas de generación de códigos. En particular, se identifican un operador o múltiples operadores. En ese caso, en el paso 640 se realiza la generación de códigos por medio de un generador de códigos. Durante la generación de códigos se genera cierto código y si es necesario tablas acompañantes. Las tablas acompañantes incluyen tablas que están configuradas para dos funciones: una para el operador necesario y una función de estado, es decir, las primeras tablas de las primeras redes de tablas. Algunas de las primeras redes de tablas son apareadas con una segunda red de tablas correspondiente. Existen varias maneras de decidir que primeras redes de tablas aparear con una segunda red de tablas. El compilador puede configurarse para aparear todas la primeras redes de tablas con una segunda red de tablas. El compilador puede estar configurado para detectar etiquetas de inicio y paro en el programa de cómputo recibido indicando al compilador el comienzo de la generación de las segundas redes de tablas y el código correspondiente para aplicarlas a la salida de las primeras redes de tablas. El compilador puede generar las segundas redes de tablas para una muestra aleatoria de las primeras redes de tablas.
El código generado no necesita, y generalmente no necesitará, contener el operador porque éste es reemplazado por una o más tablas de consulta. La función de estado puede elegirse de manera aleatoria. La función de estado también puede elegirse como resultado del programa, por ejemplo, la función de estado puede ser otro operador necesario, el cual permitirá que la tabla sea reutilizada. Por ejemplo, el analizador sintáctico identificará y añadirá la operación y traducirá esto en una tabla de consulta para la instrucción de añadir y en código generado para aplicar la tabla de consulta a los valores correctos. Como función de estado el compilador puede seleccionar una función aleatoria. El compilador puede seleccionar también de manera aleatoria una función de un conjunto de funciones, por ejemplo, sustracción, multiplicación, etc.
En el paso 655 las tablas generadas se fusionan a una tabla base, dado que puede ocurrir que algunas tablas se generen muchas veces, en ese caso no es necesario almacenarlas muchas veces. Por ejemplo, puede necesitarse una tabla añadida y generarse solo una vez. Cuando se fusionan todos los códigos y se han fusionado todas las tablas la compilación finaliza. Opcionalmente, puede haber un paso de optimización .
Típicamente, el compilador utiliza dominios codificados, es decir, secciones del programa en las cuales todos los valores, o por lo menos todos los valores que corresponden a ciertos criterios, están codificados, es decir, tienen un tamaño de bits de palabra de código (n). En el dominio codificado, pueden ejecutarse operaciones mediante la ejecución de tablas de consulta. Cuando el dominio codificado se ingresa todos los valores están codificados, cuando se deja el dominio codificado, los valores están decodificados un criterio puede ser que el valor se correlaciona, o depende de, información sensible a la seguridad, por ejemplo, una clave criptográfica.
Una manera interesante de crear el compilador es la siguiente. En el paso 630 se realiza una compilación intermedia. Esto puede ser para un lenguaje intermedio, por ejemplo, un lenguaje de transferencia de registros o similar, pero también puede ser una compilación de código de lenguaje de máquina. Esto significa que para los pasos 610-630 de la figura 6 puede usarse un compilador convencional, el cual no produce tablas de corrección de errores. Sin embargo en el paso 640 se realiza la generación de código en la compilación intermedia. Por ejemplo, si se utilizó el código de lenguaje de máquina, cada instrucción es reemplazada por una implementación libre del operador correspondiente de esa instrucción, es decir, una implementación basada en tabla de esa instrucción. Esto representa una manera directa particular de crear el compilador. La figura 6 también puede usarse para generar un compilador que no produce un lenguaje de máquina sino un segundo lenguaje de programación.
En una modalidad, el compilador es un compilador para compilar un primer programa de cómputo escrito en un primer lenguaje de programación de computadora en un segundo programa de cómputo, el compilador comprende un generador de código para generar el segundo programa de cómputo mediante la generación de tablas y el código de lenguaje de máquina, las tablas generadas y el código de lenguaje de máquina generado juntos forman el segundo programa de cómputo, el código de lenguaje de máquina generado hace referencia a las tablas, en donde el compilador está configurado para identificar una expresión aritmética o lógica en el primer programa de cómputo, la expresión depende de por lo menos una variable, y el generador de código está configurado para generar una o más tablas que representan resultados precalculados de la expresión identificada para múltiples valores de la variable y representar por lo menos alguna otra expresión, y para generar código de lenguaje de máquina para implementar la expresión identificada en el segundo programa de cómputo accediendo a una o más tablas generadas que representan resultados precalculados. Idealmente, el código de lenguaje de máquina generado para implementar la expresión identificada no contiene instrucciones de máquina aritméticas o lógicas, por lo menos no instrucciones de máquina aritméticas o lógicas relacionadas con información sensible. Un atacante que hace ingeniería inversa con las tablas puede encontrar que puede representar la expresión identificada, pero que también puede representar la otra expresión.
Esto aumenta la resistencia contra la ingeniería inversa y reduce la fuga de canal lateral del segundo programa de cómputo porque contiene menos operaciones aritméticas o lógicas. Idealmente todas las expresiones y subexpresiones aritméticas y lógicas son reemplazadas por accesos de la tabla. Dado que todas están ausentes esas instrucciones que constituyen la expresión o subexpresiones aritméticas o lógicas no pueden filtrar ninguna información. La tabla es precalculada; la energía consumida para realizar el comportamiento aritmético o lógico incluido en la tabla no es visible durante la ejecución del programa.
A continuación se proporcionan detalles adicionales y modalidades adicionales de ventajas de las redes de tablas.
Como se hizo anteriormente nos referimos a W como el conjunto de operandos (valores de entrada y salida de una operación) que deseamos codificar, y un conjunto finito å de "estados" y un conjunto finito V con cardinalidad igual al producto de las cardinalidades de y å . La extensión de la trayectoria de datos descrita arriba es más ventajosa si no existe una manera fácil de eliminarla. Si un atacante fuese capaz de hallar o aislar cada W (w), consideramos a la extensión de la trayectoria de datos como rota en términos de seguridad. Describimos dos ataques relacionados dirigidos a las clases de equivalencia W halladas.
El primer ataque es una configuración extendida en donde una máquina virtual (VM, por sus siglas en inglés) y un programa proporcionan al usuario en dónde la salida no depende del estado (de hecho será suficiente una variable posiblemente cifrada que no depende del estado) Por ejemplo: Una ingeniería de descifrado que proporciona imágenes en una pantalla. En la configuración un atacante puede hacer lo siguiente Para cada variable v en el programa del cual espera información de estado. El atacante escribe el valor original v, comienza reemplazando esta variable con otros valores t.
Para todos los valores t que producen las imágenes correctas el atacante conoce que t pertenece a un conjunto Q (w) del cual v es un representante. Incluso para imágenes que no son visualizadas correctamente el atacante podría comparar las imágenes erróneas resultantes y concluir que los valores s y t sustituidos para v que dan como resultado los mismos errores representarían valores iguales. Un segundo ataque similar es en la salida de elementos funcionales, como operadores, los cuales probablemente se tabulan, supuestamente en una tabla T. Si una salida de tabla T[i] es utilizada por el programa, entonces el atacante podría variar el valor en la ubicación i de la tabla. Si el algoritmo tiene exito, entonces el atacante sabe que la nueva entrada en la posición i (muy probablemente) está en el conjunto W(T[?]).
Se agreda redundancia al programa. Como resultado, durante la ejecución del programa, pueden detectarse fallas y pueden tomarse medidas apropiadas. En una de las modalidades la reacción sobre una verificación de falla es la siguiente: si se detecta una falla en una variable, el valor de la variable cambia (muy probablemente dando como resultado una salida de programa incorrecta) , mientras que por el contrario, el estado de la variable cambia, pero su valor sigue siendo el mismo.
Pueden usarse tres componentes: Agregar redundancia a un programa, por ejemplo, estados además de operandos, es decir, valores de función.
Utilizar redundancia durante (o después de) la ejecución del programa para detectar situaciones inesperadas.
- Tomar acciones como resultado del uso de redundancia para la detección de situaciones inesperadas.
Por ejemplo, pueden ejecutarse en paralelo diferentes versiones de un programa, por ejemplo, intercaladas. Diferentes versiones pueden tener diferentes codificaciones E y/o diferentes valores iniciales para los estados de las variables en los programas. Para ser más específico, supóngase que tenemos un programa P y ejecutamos m versiones en paralelo. La versión i utiliza la codificación E, y tiene como vector inicial el vector de estado para todas (o algunas de) las variables. Denotamos la iésima versión de P como Ej (R,s,). Preferentemente, las codificaciones Ei, E2, Em son distintas.
Todas las versiones se ejecutan en paralelo, y en cualquier punto de la ejecución del programa, puede verificarse si una o más variables correspondientes en los programas coinciden o no coinciden. Nótese que podemos omitir verificar la coincidencia de una o más variables, y que no necesitan verificarse todas las variables verificadas en todos los programas. Por ejemplo, si tenemos tres versiones de un programa P con tres variables x,y,z podemos verificar la coincidencia de la variable x en las tres versiones, verificar una coincidencia de la variable y entre las versiones 1 y 3, y no verificar para nada la variable z. En caso de una no coincidencia, pueden tomarse varias acciones, por ejemplo, detener la ejecución del programa, continuar ejecutando con valores modificados, etc.
La ejecución de múltiples programas en paralelo puede ser bastante costoso. Ahora describimos una segunda modalidad que es más económica, y está dirigida a frustrar los ataques en los que se cambias tablas. Como un ejemplo ilustrativo, consideramos la protección contra el cambio de entradas en una tabla que implementa una función f de dos variables.
Utilizamos la siguiente notación. Definimos las funciones w: V W y o: V å por el requerimiento de que por cada v e V, tenemos que E(w(y),o(v) = v. Suponemos: una permutación secreta P de å. La función F: V x V V implementa una función f: W W como se explicó arriba, por lo que para cada x,y e W y s,t e å, F(E(x,c), E(y,x) E (f(x,y), g (s,i)), en donde g:å x å å Siempre que vaya a calcularse la función f, con entradas x y y, podríamos ejecutar el procedimiento como se expresa por medio del siguiente pseudo código. p : = s (c) ; q := s (y) ; u ;= F (x, y) v := E{z{u,p, q , P{o (u) ) La función z: V x å x å W es tal que z(u,p,q) = w(u) si o(u) = g(p,q), y, de otra manera otro valor, por ejemplo un valor aleatorio. Por ejemplo, si W = n å, podemos considerar z = ww ((uu)) - o(u) + g(p,q). La evaluación de v puede hacerse usando una tabla T con entradas etiquetadas por elementos de V x å x å de tal manera que para u e V,p,q e å, T[u,p,q] = E(z(u,p,q), P[o{u)). En el pseudo código anterior, los valores de estado de x y y parecen claros. Esto puede evitarse si utilizamos el siguiente procedimiento: u := F(x,y); v := E (Z(u,x,y), P(o(u)); esto último se implementa como una sola tabla. La función Z: V x V x V W es tal que Z(u,x,y) = w(u) si y solo si o(u) = g(o(x), o(y)). La evaluación de v puede hacerse usando una tabla T con entradas etiquetadas por elementos de V x V x V de tal manera que T[u,x,y] = E(Z(u,x,y), P(a(u)) para toda u,x,y e V.
Como una tercera alternativa, podemos utilizar el siguiente procedimiento. a := g (s(x),s(y)); u := F(x,y); v := E(z(u,a), P (o(u)), en donde la función z: V x å W es tal que z(u,a) = w(u) si y solo si a = o(u). La evaluación de a puede hacerse usando una tabla T con entradas etiquetadas por elementos de V x V tales que T[x,y] = g(a(x), o(y)) para toda x,y e V o etiquetadas por entradas de å x å si a(x),a(y) aparece en el programa; en éste último caso, T[p,q] = a[p,q] para toda p,q €º å. La evaluación de v puede hacerse usando una tabla U con entradas etiquetadas por elementos de V x å tal que U [u,a] = E (z(u,a), P(o(u)) para toda u e V, a e å.
Como una cuarta alternativa, podemos usar el siguiente procedimiento, muy similar al tercero a := g (s(x),s(y)); u := F(x,y); v := E(z(u,a), P(a)), en donde la función z: V x å W es tal que z(u,a) = w(u) si y solo si a = o(u) . La evaluación de a puede hacerse usando una tabla T con entradas etiquetadas por elementos de V x V tales que T[x,y] = g(o(x) ,s (y)) para toda x,y e V o etiquetadas por entradas de å x å si o(x),o(y) aparece en el programa; en éste último caso, T[p,q] = a[p,q] para toda p,q e å. La evaluación de v puede hacerse usando una tabla U con entradas etiquetadas por elementos de V x å tal que U [u,a] = E {Z(u,a), P(a)) para toda u e V , a e å.
La razón para el primero de los procedimientos anteriores (un razonamiento similar se mantiene para las otras variaciones) se ilustra a continuación. Suponga que un atacante modificó la entrada [x,y] en la tabla T implementando F de a hasta a'. Aplicamos el procedimiento anterior con las entradas x y y. Entonces tenemos que u = T[x,y] = a', y v = E (z(a',s(x),s(y)),P(s (a1))). Ahora consideramos dos casos.
Primero suponemos que w(a) = w(a'). Como a F a', tenemos que o(a') F o(a). Como o(a) = g (s(x),s(y)), se tiene que de las propiedades de z que w(u') F w (u) = w(a), y así, como suponemos que w(a) = w(a'), tenemos que w(v) F w(a'), es decir, w (v) F w(a') = w(a) = w{F(x,y)). En otras palabras: el valor de v no es igual al valor de F(x,y). Es decir: el programa continuará con una variable con un valor incorrecto, y el atacante pensará que w (a) = w(a'). Si w(a)¹ w(a'), el valor de v puede o no ser igual al valor de F(x,y). En el primer caso, el atacante cree que w(a) = w(a') , que obviamente está ayudando al defensor. En el segundo caso, el atacante pensará que w(a) = w(a'), lo cual no es información muy útil para él.
En las variaciones anteriores, observamos una transformación de la variable u a v la cual es tal que w(u) = w(v) si y solo si el estado de u coincide con el estado esperado con base en x y y. En una generalización, en lugar de valores de estado coincidentes, una función de valores de estado coincide. Por ejemplo, w(u) = w (v) si y solo si el estado y el estado esperado concuerdan en un número dado de sus bits más significativos (MSB, por sus siglas en inglés), o en un número dado de sus bits menos significativos (LSB, por sus siglas en inglés), o si la suma de control sobre los símbolos del estado y del estado esperado concuerdan.
Las variaciones de la segunda modalidad protege contra un ataque en el cual se cambian las entradas de tabla. Enseguida consideramos una tercera modalidad que ofrece protección contra un ataque en el cual se cambia una variable. Con el objeto de hacerlo, para cada variable x e V que deseamos proteger, mantenemos el seguimiento de una variable correspondiente ix e å (lo cual en circunstancias normales debe ser igual a s(c)). Siempre que x se actualiza, Tx también se actualiza. Consecuentemente, las partes de los programas para actualizar x y tc deben sincronizarse. Preferentemente, la actualización de tc no utiliza ninguna de las variables utilizadas para actualizar x, sino solo las variables tipo estado que corresponden a estas variables. Por ejemplo, supongamos que tenemos las variables x,y e V con variables tipo estado correspondientes TX, XY, y cambiamos x a F (x,y). También actualizamos tc a g(xx,Ty), en donde g: å x å å es tal que F(E (wi,si),E (w2,s2)) = E (f(wi,w2),g (si,o2))- (las variables tipo estado son variables con valores en å en lugar de V).
La función de mezclado de estados g puede ser diferente para diferentes funciones F. Es decir, la manera de actualizar ix puede depender de la transformación que se está aplicando a x. Más generalmente, la manera de actualizar tc podría depender de x antes de actualizar y/o la función (método, procedimiento) que se utilizó para actualizar x. Los valores de TX y s(c) puede verificarse cada vez que se actualizan los valores de x y tc, pero esto no es necesario. Siempre que tenga lugar una verificación, puede aplicarse el siguiente procedimiento: x := E (z(c,tc),R(tc)); tc := R(tc); (A). En este caso, R es una permutación de å, y la función z: V x å - W es tal que z(c,t) = w(x) si y solo si s (x) = T.
En palabras: si el estado y el estado esperado coinciden, el valor x se mantiene igual, pero su estado cambia; si el estado y el estado esperado no coinciden, el valor x se altera. La evaluación de x puede hacerse usando una tabla T con entradas etiquetadas por elementos de V x å tal que T[c,t] = E(z(c,t), R(t)) para toda x e V, t e Nótese que después del procedimiento, tenemos que i o(x) . Si el atacante logra deshabilitar del procedimiento ya sea la actualización de x o la actualización de T (pero no ambos) , entonces en una comprobación subsiguiente, t y o(x) muy probablemente no son iguales, y el valor de x cambiará (a menos que el atacante también logre deshabilitar la actualización x del procedimiento anterior).
De manera equivalente, el orden de las asignaciones en (A) puede alterarse a tc := R(tc); x := E (z(x,tc),tc) (A'), en donde z: V X å W es tal que z(c,t) = w(x) si y solo si o(x) = R_1(t), o, de manera equivalente, si y solo si R(s(c)) = t.
De nuevo, la evaluación de x puede hacerse usando una tabla con entradas etiquetadas por elementos de V x å .
Un procedimiento alternativo es el siguiente: x : = E (z (c, t) , P (s (x) ) ) ; t : = R (s (c) ) ; (B) La evaluación de x puede hacerse usando una tabla con entradas etiquetadas por elementos de V x å tal que T[X,T] = E(z(c,t), R(s(c))) para toda x e V, t e å . Nótese que en esta alternativa, la actualización para t puede hacerse con una tabla U con entradas etiquetadas por elementos de V, de tal manera que U [x] = R(s(c)), o si no es perjudicial que s(c) aparezca explícitamente, podemos hallar primero p := s(c) con una tabla para o, y subsiguientemente hallamos t := Y [p] utilizando la tabla 7 con entradas etiquetadas por elementos de W. La tabla 7 tiene menos entradas que la tabla U.
En una configuración más general, el nuevo estado X después de una verificación no depende solo de s(c), sino de x. Entonces en lugar de (B) utilizamos x := E (z (c, t) , Q (x) ) ; t : = Q (x) en donde Q: V å es tal que Q(v) F s(n) para toda v e V. La evaluación de x puede hacerse usando una tabla con entradas etiquetadas por elementos de V x å tal que T[c,t] = E(z(c,t),z (x))) para toda x e V, i e å.
La figura 7 ilustra en un diagrama de flujo un método 700. En el paso 710 se obtienen múltiples primeras entradas de tabla para una primera red de tablas almacenada en una almacenamiento electrónico. Por ejemplo, pueden recibirse de una tabla anterior. En el paso 720 la primera red de tablas se aplica a las múltiples primeras entradas de tabla para calicular una función de datos. Por ejemplo, un código de programa de cómputo puede instruir al procesador que busque una entrada de tabla particular en una tabla de la primera red de tablas, como se indica mediante las entradas múltiples. A pesar de que se usan múltiples entradas, esto puede oscurecerse codificando algunas o todas éstas de manera conjunta. En el paso 730 se obtienen múltiples segundas entradas de tabla para una segunda red de tablas almacenada en una almacenamiento electrónico, las segundas entradas de tabla incluyen la salida de la primera red de tablas y por lo menos una de las múltiples primeras entradas de tabla. En el paso 740 esta segunda red de tablas se aplica entonces a las múltiples segundas entradas de tabla para producir segundas salidas de tablas que incluyen una salida de función protegida .
También la segunda red de tablas puede ser una tabla simple en la cual se realiza una consulta de tabla simple, sin embargo, esta tabla se ha construido de tal manera que varias cosas suceden de manera conjunta incluyendo los pasos 744, 748 y 749; esto se ha ilustrado con flechas punteadas. En el paso 740 se producen segundas salidas de tabla incluyendo una salida de función protegida. En el paso 744, se verifica si hay una salida específica de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla de la por lo menos una de las múltiples primeras entradas de tabla dada. Dependiendo de esta verificación se toma ya sea el paso 748 ó 749. En el paso 748 (es decir, en caso de que la verificación no sea exitosa, es decir, el valor podría no obtenerse), la salida de función protegida es desigual a la salida de función. En el paso 749 (es decir, en caso de que la verificación sea exitosa, es decir, el valor podría obtenerse), la salida de función protegida es igual a la salida de función.
La salida protegida puede usarse en cálculos siguientes. Nótese que la salida protegida puede codificarse junto con un valor de estado, es decir, un valor de estado obtenido de las primeras salidas de tabla. El valor de estado preferentemente se permuta. Dado que los valores de función y estado se codifican conjuntamente esto tiene el efecto de que todo el valor codificado parece cambiar. En modalidades preferidas, la salida protegida se combina con un valor de estado, y el valor de estado siempre se permuta, de tal manera que el atacante no puede ver si se han aplicado 748 ó 749.
Son posibles muchas formas diferentes de ejecutar el método, como será evidente para una persona con experiencia en la téenica. Por ejemplo, el orden de los pasos puede variarse o algunos pasos pueden ejecutarse en paralelo. Además, entre los pasos pueden insertarse pasos de otro método. Los pasos insertados pueden representar refinamientos del método tal como se describe en la presente, o pueden no estar relacionados con el método. Por ejemplo, los pasos 744, 748 y/o 749 se ejecutan preferentemente por medio de una consulta de tabla simple o, en una concesión mutua preferida. mediante una secuencia de consultas en una red de tablas simples. Además, un paso dado puede no haber terminado por completo antes de que se inicie un siguiente paso.
Un método de conformidad con la invención puede ejecutarse empleando software, el cual comprende instrucciones para hacer que un sistema de procesador realice el método 700. El software puede incluir solo aquellos pasos considerados por una subentidad particular del sistema. El software puede almacenarse en un medio de almacenamiento adecuado, tal como un disco duro, un disco flexible, una memoria, etc. El software puede enviarse como una señal a lo largo de un alambre, o inalámbricamente, o usando una red de datos, por ejemplo, la Internet. El software puede hacerse disponible para descargar y/o para uso remoto en un servidor.
Se apreciará que la invención también se extiende a programas de cómputo, particularmente programas de cómputo sobre o en un portador, adaptado para poner en práctica la invención. El programa puede estar en forma de código fuente, código de objetos, una fuente intermedia de código y código de objetos tal como una forma parcialmente compilada, o en cualquier otra forma adecuada para usarse en la implementación del método de conformidad con la invención. Una modalidad que se relaciona con un producto de programa de computadora comprende instrucciones ejecutables en computadora que corresponden a cada uno de los pasos de procesamiento de por lo menos uno de los métodos presentados.
Estas instrucciones pueden subdividirse en subrutinas y/o almacenarse en uno o más archivos que pueden vincularse estáticamente o dinámicamente. Otra modalidad que se relaciona con un producto de programa de computadora comprende instrucciones ejecutables en computadora que corresponden a cada uno de los medios de por lo menos uno de los sistemas y/o productos presentados.
Debe apreciarse que las modalidades antes mencionadas ilustran en lugar de limitar la invención, y que aquellos con experiencia en la teenica serán capaces de diseñar muchas modalidades alternativas.
En las reivindicaciones, cualquier signo de referencia colocado entre paréntesis no debe considerarse como limitante de la invención. El uso del verbo "comprende" y sus conjugaciones no excluyen la presencia de elementos o pasos distintos de los establecidos en una reivindicación. El artículo "un" o "una" que antecede a un elemento no excluye la presencia de una pluralidad de tales elementos. La invención puede implementarse por medio de hardware que comprende varios elementos distintos, y por medio de un computadora adecuadamente programada. En la reivindicación de dispositivo que enumera varios medios, varios de estos medios pueden estar conformados por un mismo elemento de hardware. El simple hecho de que se citen ciertas medidas en reivindicaciones mutuamente diferentes no indica que una combinación de esas medidas no pueda usarse ventajosamente.
Lista de números de referencia de las figuras 1, 2, 3, 4, 5, 8a y 8b: 100 red de tablas 102, 104 valor de entrada de función 110 codificador 112, 114 valor de entrada de estado 122, 124 valor de entrada codificado 130 tabla para una función de datos y una función de estado 160 valor de salida codificado 162 valor de salida de función 164 valor de salida de estado 170 codificador 180 red de tablas 202, 204 dispositivos de cómputo 210, 220 primeras entradas de tabla A 212, 222 primera red de tablas A 214, 224 primera red de tablas B 216, 226 primeras salidas de tablas A 232 segunda red de tablas A 234 segunda red de tablas B 236 segundas salidas de tablas A 300 dispositivo de cómputo 305 entrada x = E(w,p) 307 salida u 310 primera red de tablas 312 función de datos f 314 función de estado g 320 tabla de extractores de estado 322 salida de tabla 320 s(c) = p 330 tabla de alineación 332 función z 334 permutación 340 segunda red de tablas 410 tabla de entrada 420 tabla intermedia 430 tabla de salida 500 dispositivo de cómputo 510 dispositivo de almacenamiento 521, 522 tablas de consulta de entrada simple 531, 532 tablas de consulta de entradas múltiples 5311-5323 tablas de consulta de entrada simple 541 tabla de consulta de codificación 542 tabla de consulta de decodificación 550 procesador de computadora 555 código de lenguaje de máquina 560 dispositivo 1/0 800 dispositivo de cómputo 805, 806, 816 entrada de estado 807, 817 salida de estado 810, 820 tabla de función de estado 830 tabla de función de datos 836 entrada de función 837 salida de función Se hace constar que con relación a esta fecha, el mejor metodo conocido por la solicitante para llevar a la práctica la citada invención, es el que resulta claro de la presente descripción de la invención.

Claims (12)

REIVINDICACIONES Habiéndose descrito la invención como antecede, se reclama como propiedad lo contenido en las siguientes reivindicaciones :
1. Un dispositivo de cómputo configurado para calcular una función de datos (f) sobre un valor de entrada de función (w), caracterizado porque comprende un almacenamiento electrónico que almacena una primera red de tablas configurada para la función de datos (f), el dispositivo de cómputo comprende un procesador electrónico acoplado al almacenamiento y configurado para obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla (x=E(w,s)) incluyen el valor de entrada de función (w), y calcular la función de datos (f) aplicando la primera red de tablas a las múltiples primeras entradas de tabla (x) para producir múltiples primeras salidas de tabla (u=E(f(w), g(w,s)), las múltiples primeras salidas de tabla (u) incluyen un valor de salida de función (f(w)), el valor de salida de función (f(w)) corresponde al resultado de aplicar la función de datos (f) al valor de entrada de función (w), en donde el almacenamiento electrónico almacena además una segunda red de tablas configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, el procesador electrónico también está configurado para obtener múltiples segundas entradas de tabla para la segunda red de tablas, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla (u) y las segundas entradas de tabla comparten por lo menos una entrada con las múltiples primeras entradas de tabla (w; s), y aplicar la segunda red de tablas a las múltiples segundas entradas de tablas, la segunda red de tablas está configurada para verificar por lo menos una salida específica (f(w) o g(w,s)) de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla (f(w); g(w,s)) de la por lo menos una de las múltiples primeras entradas de tablas (w; s) dadas, la segunda red de tablas produce segundas salidas de tabla (v= E(w',s')) incluyendo una salida de función protegida (W ), la salida de función protegida es igual a la salida de función (f(w)) en el caso de que la verificación sea exitosa y la salida de función protegida (w') es desigual a la salida de función en caso de que la verificación no sea exitosa para por lo menos algunos valores de las múltiples primeras entradas de tabla.
2. Un dispositivo de cómputo de conformidad con la reivindicación 1, caracterizado porque las múltiples primeras entradas de tabla incluyen un valor de entrada de estado y las múltiples primeras salidas de tabla incluyen un valor de salida de estado en donde el valor de salida de estado es igual al resultado de aplicar la función de estado (g) a los valores de entrada de estado, y la segunda red de tablas está configurada de tal manera que las segundas entradas de tabla compartidas con las múltiples primeras entradas de tabla incluyen el valor de entrada de estado, la segunda red de tablas está configurada de tal manera que la salida de función protegida es igual a la salida de función (f(w)) en caso de que el resultado de aplicar la función de estado (g) al valor de entrada de estado sea igual al valor de estado incluido en las múltiples primeras salidas de tabla ingresadas a la segunda red de tablas .
3 . Un dispositivo de cómputo de conformidad con cualquiera de las reivindicaciones anteriores, caracterizado porque la primera red de tablas está configurada para tomar como entrada un valor de entrada codificado (x), el valor de entrada codificado combina el valor de entrada de función junto con un valor de entrada de estado en un solo valor (x), y la primera red de tablas está configurada para producir como salida un primer valor de salida codificado (u=F(x)), el primer valor de salida codificado combina el valor de salida de función junto con un valor de salida de estado cifrados conjuntamente en un solo valor, en donde el valor de salida de estado es igual al resultado de aplicar una función de estado (g) al valor de entrada de estado. la segunda red de tablas está configurada para tomar como entrada el primer valor de salida codificado (u) de la primera red de tablas y por lo menos uno del valor de entrada de estado y del valor de entrada de función, la segunda red de tablas está configurada para producir como salida un segundo valor de salida codificado (v), el valor de salida codificado contiene la salida de función protegida.
4 . Un dispositivo de cómputo de conformidad con la reivindicación 3, caracterizado porque, la segunda red de tablas está configurada para producir como salida un segundo valor de salida codificado (v), el valor de salida codificado combina el valor de salida de función protegido junto con un valor de salida de estado protegido cifrados conjuntamente en un solo valor, la salida de estado protegida es igual al resultado de aplicar una permutación de estado al valor de salida de estado.
5. Un dispositivo de cómputo de conformidad con cualquiera de las reivindicaciones 2, 3 y 4, caracterizado porque la segunda red de tablas comprende una red de tablas de estado y una red de tablas de alineación, la tabla de estado está configurada para la función de estado, el procesador está configurado para aplicar la tabla de estado a la entrada de estado para obtener un valor de salida de estado paralelo, la red de tablas de alineación está configurada para recibir como entrada por lo menos el valor de salida de estado paralelo y el valor de salida de estado recibido de la primera red de tablas.
6. Un dispositivo de cómputo de conformidad con cualquiera de las reivindicaciones 2, 3 y 4, caracterizado porque la segunda red de tablas comprende una tabla de estado modificado y una red de tablas de alineación, la tabla de estado está configurada para recibir como entrada el valor de entrada de estado y calcular un valor de estado modificado, el valor de estado modificado es igual al resultado de aplicar la función de estado al valor de entrada de estado seguido por una función de estado adicional, la red de tablas de alineación está configurada para tomar como entrada el valor de entrada de estado y el valor de salida de estado modificado y verificar que la función de estado adicional aplicada al valor de salida de estado produce el valor de salida de estado modificado.
7. Un dispositivo de cómputo de conformidad con cualquiera de las reivindicaciones 5 y 6, caracterizado porque una variable codificada, que contiene en forma codificada un valor de función, y un valor de estado, y una variable de estado se mantienen en paralelo, en donde la variable codificada y la variable de estado están en una relación verificable.
8. Un dispositivo de cómputo de conformidad con cualquiera de las reivindicaciones anteriores, caracterizado porque la segunda red de tablas está configurada para tomar como entrada el valor de entrada de función, la segunda red de tablas está configurada de tal manera que la salida de función protegida es igual a la salida de función (f(w)) en el caso de que el resultado de aplicar la función de datos (f) al valor de entrada de función sea igual al valor de salida de función codificado en el primer valor de salida codificado (u).
9. Un compilador configurado para recibir la función de datos y para producir una primera y segunda red de tablas, caracterizado porque la primera red de tablas está configurada para recibir múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla (x=E(w,s)) incluyen el valor de entrada de función (w), y producir múltiples primeras salidas de tabla (u=E(f(w), g(w,s)), las múltiples primeras salidas de tabla (u) incluyen un valor de salida de función (f(w)), el valor de salida de función (f(w)) corresponde al resultado de aplicar la función de datos (f) al valor de entrada de función (w), en donde la segunda red de tablas está configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, la segunda red de tablas está configurada para recibir múltiples segundas entradas de tabla, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla (u) y las segundas entradas de tabla comparten por lo menos una entrada con las múltiples primeras entradas de tabla (w o s), la segunda red de tablas esta configurada para verificar por lo menos una salida específica (f(w) o g(w,s)) de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla (f(w); g(w,s)) de la por lo menos una de las múltiples primeras entradas de tablas (w; s) dadas, la segunda red de tablas produce segundas salidas de tabla (v= E(w',s')) incluyendo una salida de función protegida (w1), la salida de función protegida es igual a la salida de función (f(w)) en caso de que la verificación sea exitosa y la salida de función protegida (w') es desigual a la salida de función en caso de que la verificación no sea exitosa para por lo menos algunos valores de las múltiples primeras entradas de tabla.
10 . Un método electrónico de cálculo de una función de datos (f) en un valor de entrada de función (w), caracterizado porque comprende almacenar en un almacenamiento electrónico una primera red de tablas configurada para la función de datos (f), obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla (x=E(w,s)) incluyen el valor de entrada de función (w), calcular la función de datos (f) aplicando la primera red de tablas a las múltiples primeras entradas de tabla (x) para producir múltiples primeras salidas de tabla (u=E(f(w), g(w,s)), las múltiples primeras salidas de tabla (u) incluyen un valor de salida de función (f(w)), el valor de salida de función (f(w)) corresponde al resultado de aplicar la función de datos (f) al valor de entrada de función (w), almacenar una segunda red de tablas configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, obtener múltiples segundas entradas de tabla para la segunda red de tablas, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla (u) y las segundas entradas de tabla comparten por lo menos una entrada con las múltiples primeras entradas de tabla (w o s), y aplicar la segunda red de tablas a las múltiples segundas entradas de tabla, la segunda red de tablas está configurada para verificar por lo menos una salida específica (f(w) o g(w,s)) de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla (f(w) o g(w,s)) de la por lo menos una de las múltiples primeras entradas de tablas (w o s) dadas, la segunda red de tablas produce segundas salidas de tabla (v = E(w',s')) incluyendo una salida de función protegida (w1), la salida de función protegida es igual a la salida de función (f(w)) en caso de que la verificación sea exitosa y la salida de función protegida (w') es desigual a la salida de función en caso de que la verificación no sea exitosa para por lo menos algunos valores de las múltiples primeras entradas de tabla.
11. Un programa de cómputo caracterizado porque comprende medios de código de programa adaptados para realizar todos los pasos de la reivindicación 10 cuando el programa de cómputo se ejecuta en una computadora.
12 . Un programa de cómputo de conformidad con la reivindicación 9 u 11, caracterizado porque está conformado en un medio de lectura por computadora. RESUMEN DE LA INVENCIÓN Un dispositivo de cómputo configurado para calcular una función de datos (f) sobre un valor de entrada de función (w), el dispositivo comprende un almacenamiento electrónico que almacena una primera red de tablas configurada para la función de datos (f); el dispositivo de cómputo comprende un procesador electrónico acoplado al almacenamiento y configurado para obtener múltiples primeras entradas de tabla para la primera red de tablas, las múltiples primeras entradas de tabla (x=E(w,s)) incluyen el valor de entrada de función (w), y calcular la función de datos (f) aplicando la primera red de tablas a las múltiples primeras entradas de tabla (x) para producir múltiples primeras salidas de tabla (u=E(f(w), g(w,s)), las múltiples primeras salidas de tabla (u) incluyen un valor de salida de función (f(w)), el valor de salida de función (f(w)) corresponde al resultado de aplicar la función de datos (f) al valor de entrada de función (w); el almacenamiento electrónico almacena además una segunda red de tablas configurada para cooperar con la primera red de tablas para contrarrestar modificaciones hechas a la primera red de tablas, el procesador electrónico tambien está configurado para obtener múltiples segundas entradas de tabla para la segunda red de tablas, las segundas entradas de tabla incluyen las múltiples primeras salidas de tabla (u) y por lo menos una entrada con las múltiples primeras entradas de tabla (w; s), y aplicar la segunda red de tablas a las múltiples segundas entradas de tablas, la segunda red de tablas está configurada para verificar por lo menos una salida específica (f(w) o g(w,s)) de las múltiples primeras salidas de tabla si una primera red de tablas no modificada podría obtener la salida específica de las múltiples primeras salidas de tabla (f(w); g(w,s)) de la por lo menos una de las múltiples primeras entradas de tablas (w; s) dadas; la segunda red de tablas produce segundas salidas de tabla (v= E(w',s')) incluyendo una salida de función protegida (w1), la salida de función protegida es igual a la salida de función (f(w)) en el caso de que la verificación sea exitosa y la salida de función protegida (w') es desigual a la salida de función en caso de que la verificación no sea exitosa.
MX2015006158A 2012-12-21 2013-12-19 Dispositivo de computo configurado con una red de tablas. MX343892B (es)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201261740726P 2012-12-21 2012-12-21
US201361767856P 2013-02-22 2013-02-22
EP13156302 2013-02-22
PCT/EP2013/077267 WO2014096117A1 (en) 2012-12-21 2013-12-19 Computing device configured with a table network

Publications (2)

Publication Number Publication Date
MX2015006158A true MX2015006158A (es) 2015-08-05
MX343892B MX343892B (es) 2016-11-28

Family

ID=47877774

Family Applications (1)

Application Number Title Priority Date Filing Date
MX2015006158A MX343892B (es) 2012-12-21 2013-12-19 Dispositivo de computo configurado con una red de tablas.

Country Status (8)

Country Link
US (1) US9594769B2 (es)
EP (1) EP2936730B1 (es)
JP (1) JP5861018B1 (es)
CN (1) CN104919750B (es)
BR (1) BR112015014946A2 (es)
MX (1) MX343892B (es)
RU (1) RU2661308C2 (es)
WO (1) WO2014096117A1 (es)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102013205166A1 (de) * 2013-03-22 2014-09-25 Robert Bosch Gmbh Verfahren zum Erzeugen einer Einwegfunktion
CN105191206B (zh) 2013-05-01 2019-05-28 皇家飞利浦有限公司 电子块密码设备、方法和相应的计算机可读存储介质
EP3078154B1 (en) * 2013-12-05 2018-09-19 Koninklijke Philips N.V. A computing device for iterative application of table networks
SG10201405852QA (en) * 2014-09-18 2016-04-28 Huawei Internat Pte Ltd Encryption function and decryption function generating method, encryption and decryption method and related apparatuses
JP6303073B2 (ja) 2014-12-22 2018-03-28 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. プログラム実行の隠蔽
TR201906026T4 (tr) 2014-12-24 2019-05-21 Koninklijke Philips Nv Kriptografik sistem ve yöntem.
KR102311340B1 (ko) * 2015-01-15 2021-10-15 한국전자통신연구원 암호화 장치 및 방법
WO2016173882A1 (en) * 2015-04-30 2016-11-03 Koninklijke Philips N.V. Cryptographic device for calculating a block cipher
WO2016184695A1 (en) 2015-05-19 2016-11-24 Koninklijke Philips N.V. Computing with encrypted values
NL2015745B1 (en) 2015-11-09 2017-05-26 Koninklijke Philips Nv A cryptographic device arranged to compute a target block cipher.
EP3538989B1 (en) 2016-11-08 2020-03-04 Koninklijke Philips N.V. Electronic calculating device for converting a residue numbers system representation to a radix representation
JP2020515928A (ja) 2016-12-12 2020-05-28 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 整数の積を計算するように設けられた電子計算装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10154976A (ja) * 1996-11-22 1998-06-09 Toshiba Corp タンパーフリー装置
FR2838262B1 (fr) * 2002-04-08 2004-07-30 Oberthur Card Syst Sa Procede de securisation d'une electronique a acces crypte
JP4884976B2 (ja) * 2003-12-11 2012-02-29 イルデト・コーポレート・ビー・ヴイ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
US8479016B2 (en) * 2006-03-10 2013-07-02 Irdeto B.V. Method and system for obfuscating a cryptographic function
CN101491001B (zh) * 2006-07-12 2012-03-14 耶德托公司 数字数据处理单元的防篡改系统和方法
JP5113169B2 (ja) * 2006-07-12 2013-01-09 イルデト・コーポレート・ビー・ヴイ 暗号関数を難読化する方法およびシステム
JP5261088B2 (ja) * 2008-09-09 2013-08-14 富士通株式会社 不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法
US9654280B2 (en) 2009-03-10 2017-05-16 Irdeto B.V. White-box cryptographic system with input dependent encodings
US8914621B2 (en) 2009-04-02 2014-12-16 Infineon Technologies Ag Processing unit that detects manipulations thereof, device comprising two processing units, method for testing a processing unit and a device comprising two processing units
PL2520041T3 (pl) * 2009-12-30 2016-09-30 Sposób generowania tabeli korelacji dla białej skrzynki kryptograficznej
RU2439693C1 (ru) * 2010-06-04 2012-01-10 Федеральное государственное учреждение "Государственный научно-исследовательский испытательный институт проблем технической защиты информации Федеральной службы по техническому и экспортному контролю" Способ защиты текстовой информации от несанкционированного доступа
JP5198526B2 (ja) * 2010-09-21 2013-05-15 株式会社東芝 暗号化装置および復号装置
US8718280B2 (en) * 2010-12-17 2014-05-06 Apple Inc. Securing keys of a cipher using properties of the cipher process
JP2012182779A (ja) * 2011-01-31 2012-09-20 Nippon Hoso Kyokai <Nhk> 受信装置、放送システム及びプログラム
MX345372B (es) * 2012-11-07 2017-01-27 Koninklijke Philips Nv Dispositivo de computo que almacena tablas de consulta para calculo de una funcion.
BR112015014470A2 (pt) 2012-12-21 2017-07-11 Koninklijke Philips Nv compilador configurado para compilar um programa de computador, dispositivo de computação configurado para executar um programa de computador compilado por um compilador, método para executar um programa de computador compilado por um compilador e programa de computador

Also Published As

Publication number Publication date
BR112015014946A2 (pt) 2017-07-11
WO2014096117A1 (en) 2014-06-26
RU2015123670A (ru) 2017-01-10
MX343892B (es) 2016-11-28
JP2016507940A (ja) 2016-03-10
JP5861018B1 (ja) 2016-02-16
RU2661308C2 (ru) 2018-07-13
US20150293911A1 (en) 2015-10-15
US9594769B2 (en) 2017-03-14
CN104919750A (zh) 2015-09-16
EP2936730B1 (en) 2016-06-15
EP2936730A1 (en) 2015-10-28
CN104919750B (zh) 2017-06-06

Similar Documents

Publication Publication Date Title
MX2015006158A (es) Dispositivo de computo configurado con una red de tablas.
US9525435B2 (en) Computing device storing look-up tables for computation of a function
US6594761B1 (en) Tamper resistant software encoding
US10180824B2 (en) Computing device comprising a table network
US8918768B2 (en) Methods and apparatus for correlation protected processing of data operations
EP3729306B1 (en) Compiling device and method
Manikyam Program protection using software based hardware abstraction
EP3078154B1 (en) A computing device for iterative application of table networks
US8707053B2 (en) Performing boolean logic operations using arithmetic operations by code obfuscation
JP2017509942A (ja) 暗号アルゴリズムで使用されるときに秘密データを保護する方法
EP3238113B1 (en) Hiding of a program execution

Legal Events

Date Code Title Description
FG Grant or registration