ES2855749T3 - Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes - Google Patents

Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes Download PDF

Info

Publication number
ES2855749T3
ES2855749T3 ES16728907T ES16728907T ES2855749T3 ES 2855749 T3 ES2855749 T3 ES 2855749T3 ES 16728907 T ES16728907 T ES 16728907T ES 16728907 T ES16728907 T ES 16728907T ES 2855749 T3 ES2855749 T3 ES 2855749T3
Authority
ES
Spain
Prior art keywords
code
encrypted
encryption
character string
string
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
ES16728907T
Other languages
English (en)
Inventor
Eric Brier
Haro Leonard De
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Worldline MS France
Original Assignee
Ingenico Group SA
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 Ingenico Group SA filed Critical Ingenico Group SA
Application granted granted Critical
Publication of ES2855749T3 publication Critical patent/ES2855749T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • 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
    • 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/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/127Trusted platform modules [TPM]
    • 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
    • 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/34Encoding or coding, e.g. Huffman coding or error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)

Abstract

Procedimiento de cifrado de un código que ha de cifrarse (Sx) de un programa informático con el concurso de una clave de cifrado (Kx) seleccionada de entre al menos dos claves de cifrado (Kx, Ky, Kz), materializándose el código que ha de cifrarse (Sx) en forma de un código compilado o de un código intermedio, comprendiendo el procedimiento: - una etapa de obtención (11) de una gramática descriptiva (GD) del lenguaje del código que ha de cifrarse; procedimiento caracterizado por comprender: - una etapa de codificación (13) del código que ha de cifrarse (Sx) con el concurso de la gramática descriptiva (GD) que entrega una cadena de caracteres (CdC) en cuyo seno al menos una instrucción de partida (InstrD) del código que ha de cifrarse (Sx) está codificada en una representación (RInstrD) en la cadena de caracteres (CdC), dicha etapa de codificación (13) se pone en práctica de manera recursiva, calculándose una representación (RInstrDi) de una instrucción de partida (InstrDi) al término de un cálculo previo de una representación (RInstrDi+1) de una instrucción siguiente (InstrDi+1) del código que ha de cifrarse; - una etapa de cifrado (14) de la cadena de caracteres (CdC) con el concurso de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz), que entrega una cadena cifrada (Cx).

Description

DESCRIPCIÓN
Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes
1. Campo
La técnica que se propone se refiere al aumento de la seguridad en el intercambio de información. Más específicamente, la técnica que se propone se refiere al cifrado de datos. Aún más específicamente, se trata de cifrar y de descifrar un código informático. Una de las razones por las cuales es interesante cifrar un código informático es la de querer precaverse de un robo de tal código informático. Una vez cifrado el código, se necesita asimismo descifrarlo. De este modo, la técnica trata del cifrado y del descifrado de un código informático.
2. Técnica anterior
Por el estado de la técnica son conocidos los documentos
XP 055080964 Cryptomorphic Programming: A Random Program Concept
GB 2492618 "Déchiffrement et compilation du code source sur une machine virtuelle de confiance" ("Descifrado y compilación del código fuente en una máquina virtual de confianza")
En ciertos entornos sensibles, puede ser necesario tener que cifrar un código informático. Por ejemplo, ciertos equipos, tales como terminales de pago, están sometidos a abundantes ataques por parte de individuos, de empresas o de gobiernos malintencionados. Algunos de estos ataques son por soporte lógico. Esto significa que el o los soportes lógicos utilizados para hacer funcionar el terminal son analizados, inspeccionados, para tratar de descubrirles una o varias debilidades. Puede consistir otro ataque en descompilar el soporte lógico, en modificar el código así obtenido (insertándole una o varias instrucciones fraudulentas) y en volver a compilar seguidamente el soporte lógico y en reimplantar en el terminal este soporte lógico modificado.
Cabe recordar, a los efectos oportunos, que un soporte lógico puede adoptar varios estados, entre ellos: un estado original, en el que el soporte lógico está escrito o compuesto en código fuente, y un estado compilado, en el que el soporte lógico en su estado original está transformado en un soporte lógico ejecutable por una máquina o un procesador. Este soporte lógico ejecutable se compone de instrucciones llamadas “de máquina” que pueden ser llevadas a la práctica directamente por el procesador en el seno del cual se ejecuta el soporte lógico.
Por regla general, los dispositivos que comprenden soportes lógicos sensibles son físicamente resistentes a los ataques. Es el caso, por ejemplo, de los terminales de pago, los cuales, cuando se ven atacados (por ejemplo, al tratar de abrir un terminal para insertar en él una o varias “sondas”), están en condiciones de proceder a un borrado completo de una memoria segura, e incluso están en condiciones de ponerse completamente fuera de servicio. De este modo, para un atacante, es muy complejo obtener directamente el código del programa en el seno del dispositivo protegido. A partir de ese momento, consiste un medio bastante simple en recoger el código, por ejemplo, en actualizaciones del programa: tales actualizaciones tienen lugar con mayor o menor asiduidad. Suelen consistir en transmitir al dispositivo un código compilado integrado, por ejemplo, en un firmware. Cuando el dispositivo recibe el nuevo firmware, se actualiza instalando el nuevo programa ejecutable contenido en ese firmware. De este modo, una persona malintencionada puede recoger más fácilmente un firmware que se transmite en una actualización, particularmente cuando este firmware se transmite utilizando una red de comunicaciones no segura.
Por lo tanto, para precaverse de una obtención indeseada del firmware y, por tanto, del código que contiene, los fabricantes de soportes físicos sensibles han cifrado este código o este firmware con el fin de que, en caso de interceptación, el código esté protegido. El cifrado se realiza habitualmente utilizando una clave de cifrado. Sin embargo, la realidad es que, en la permanente lucha que se libra entre los fabricantes y los atacantes, estos últimos, así y todo, pueden lograr obtener de todas maneras una o varias claves de cifrado susceptibles de ser utilizadas para cifrar el código fuente compilado. A partir de este momento, es preciso, para el fabricante de soporte físico, encontrar otra solución.
Una solución común de la técnica anterior podría consistir en individualizar la distribución del soporte lógico compilado: más en particular, en vez de poner en práctica una distribución única, para todos los soportes físicos afectados, cabría contemplar cifrar independientemente el soporte lógico en función de un ejemplar particular del soporte físico al que se destina. Tal cifrado “único” puede comprender, por ejemplo, la utilización de un número de identificación único del aparato como parámetro de la función de generación de clave. A partir de este momento, cada soporte lógico cifrado únicamente podría ser descifrado por el terminal cuyo número de identificación único se ha utilizado para crear la clave de cifrado. Este método podría ser adecuado, pero plantea varios problemas. El primer problema se relaciona con la gestión de las claves: el método, efectivamente, es factible de aplicación en un número restringido de ejemplares de soportes lógicos que hayan de protegerse, pero cuando el número se hace demasiado grande, puede resultar ser complicado gestionar las claves necesarias. El segundo problema radica en el hecho de que esta solución no solventa la situación en la que el atacante obtiene a la vez la actualización y la clave de un mismo aparato.
Sería otra posibilidad emplazar la clave de cifrado en un tercero de confianza. Esto plantea problemas en caso de ausencia de conectividad con una red de comunicaciones. Y es que, aparte de una actualización utilizando una red de comunicaciones, asimismo es frecuente tener que realizar actualizaciones locales, utilizando, por ejemplo, una memoria USB o una tarjeta de memoria. Ahora bien, este tipo de actualización no se utiliza con facilidad con un tercero de confianza que posee una copia de una clave de cifrado o de descifrado.
Es preciso, a partir de entonces, proponer una solución alternativa que tenga en cuenta el hecho de que el atacante puede disponer de una o varias claves que permitan descifrar el código del programa informático.
La invención está definida por las reivindicaciones independientes. Las formas preferidas de realización están definidas por las reivindicaciones dependientes.
3. Sumario
La técnica que se propone no presenta estos inconvenientes de la técnica anterior. Más en particular, la técnica que se propone recae sobre un método de cifrado que comprende una fase de codificación específica. Se dice que esta fase de codificación es inteligente por cuanto que tiene en cuenta el contenido del código para efectuar la codificación. Más en particular, la invención se refiere a un procedimiento de cifrado de un código que ha de cifrarse de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado. Tal procedimiento comprende:
- una etapa de obtención de una gramática descriptiva del lenguaje del código que ha de cifrarse;
- una etapa de codificación del código que ha de cifrarse con el concurso de la gramática descriptiva que entrega una cadena de caracteres en cuyo seno al menos una instrucción de partida del código que ha de cifrarse está codificada en una representación en la cadena de caracteres;
- una etapa de cifrado de la cadena de caracteres con el concurso de una clave de cifrado perteneciente al conjunto de claves de cifrado, que entrega una cadena cifrada.
De este modo, la técnica que se propone permite realizar una codificación previa al cifrado. Sin embargo, a diferencia de las técnicas de codificación previa al cifrado que pueden existir, la codificación realizada en la presente técnica es una codificación inteligente. Más en particular, la codificación tiene en cuenta la fuente, es decir, el código que ha de cifrarse. Dicho de otro modo, la técnica permite integrar la codificación como siendo una etapa de plena entidad del cifrado, mientras que, de ordinario, la codificación es más bien una fase utilizada para facilitar la operación de cifrado. En la técnica tal y como se propone, la codificación sirve para transformar el código que ha de cifrarse en función del significado de este código.
De acuerdo con una característica particular, dicha etapa de codificación comprende, para una instrucción de partida del código que ha de cifrarse, una etapa de obtención, en el seno de dicha gramática descriptiva, de un tipo de la instrucción de partida y una etapa de obtención, en el seno de dicha gramática descriptiva, de un identificador de la instrucción de partida en el seno de un cardinal del tipo de la instrucción de partida.
De este modo, la representación de una instrucción
De acuerdo con una forma particular de realización, caracterizada por que dicha etapa de codificación comprende, para una instrucción de partida del código que ha de cifrarse, una etapa de cálculo de dicha representación en función de dicho tipo de la instrucción de partida y de dicho identificador de la instrucción de partida en el seno del cardinal del tipo de la instrucción de partida.
De acuerdo con una forma particular de realización, dicha etapa de codificación es puesta en práctica de manera recursiva, calculándose una representación de una instrucción de partida al término de un cálculo previo de una representación de una instrucción siguiente del código que ha de cifrarse.
De acuerdo con una forma particular de realización, dicha etapa de codificación del código que ha de cifrarse entrega una cadena de caracteres que comprende un único entero.
De este modo, toda clave de cifrado está en condiciones de poder cifrar tal cadena de caracteres.
De acuerdo con otro aspecto, se describe asimismo un dispositivo de cifrado de un código que ha de cifrarse de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado. Tal dispositivo comprende:
- medios de obtención de una gramática descriptiva del lenguaje del código que ha de cifrarse;
- un módulo de codificación del código que ha de cifrarse con el concurso de la gramática descriptiva que entrega una cadena de caracteres en cuyo seno al menos una instrucción de partida del código que ha de cifrarse está codificada en una representación en la cadena de caracteres;
- medios de cifrado de la cadena de caracteres con el concurso de una clave de cifrado perteneciente al conjunto de claves de cifrado, que entregan una cadena cifrada.
De acuerdo con otro aspecto, se describe asimismo un procedimiento de descifrado de un código de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado. Tal procedimiento comprende:
- una etapa de obtención de una cadena cifrada; esta cadena de caracteres cifrada resulta, a priori , de un cifrado realizado con el concurso del procedimiento anteriormente presentado;
- una etapa de obtención de una clave de cifrado perteneciente al conjunto de claves de cifrado; puede tratarse de las mismas claves que las que han servido para la realización del cifrado, o bien de claves públicas o privadas en el caso de un cifrado asimétrico;
- una etapa de descifrado de la cadena cifrada con el concurso de la clave de cifrado, que entrega una cadena de caracteres;
- una etapa de obtención de una gramática descriptiva del lenguaje del código que ha de cifrarse;
- una etapa de descodificación de la cadena de caracteres con el concurso de la gramática descriptiva que entrega una cadena de caracteres descodificada en cuyo seno al menos una representación en la cadena de caracteres está descodificada en una instrucción cadena de caracteres descodificada.
Asimismo, la técnica se refiere a un dispositivo de descifrado de un código de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado. Tal dispositivo comprende: - medios de obtención de una cadena cifrada; esta cadena de caracteres cifrada resulta, a priori, de un cifrado realizado con el concurso del procedimiento anteriormente presentado;
- medios de obtención de una clave de cifrado perteneciente al conjunto de claves de cifrado; puede tratarse de las mismas claves que las que han servido para la realización del cifrado, o bien de claves públicas o privadas en el caso de un cifrado asimétrico;
- medios de descifrado de la cadena cifrada con el concurso de la clave de cifrado, que entregan una cadena de caracteres;
- medios de obtención de una gramática descriptiva del lenguaje del código que ha de cifrarse;
- un módulo de descodificación de la cadena de caracteres con el concurso de la gramática descriptiva que entrega una cadena de caracteres descodificada en cuyo seno al menos una representación en la cadena de caracteres está descodificada en una instrucción cadena de caracteres descodificada.
De acuerdo con una implementación preferida, las diferentes etapas de los procedimientos según la técnica que se propone se llevan a la práctica mediante uno o varios soportes lógicos o programas de ordenador, que comprenden instrucciones lógicas destinadas a ser ejecutadas por un procesador de datos de un módulo relevador según la técnica que se propone y que está diseñado para regir la ejecución de las diferentes etapas de los procedimientos. En consecuencia, la técnica que se propone también está encaminada a un programa, susceptible de ser ejecutado por un ordenador o por un procesador de datos, incluyendo este programa instrucciones para regir la ejecución de las etapas de un procedimiento tal como se ha mencionado anteriormente.
Este programa puede utilizar cualquier lenguaje de programación y estar en forma de código fuente, código objeto, o de código intermedio entre código fuente y código objeto, tal como en una forma compilada parcialmente, o en cualquier otra forma deseable.
La técnica que se propone también está encaminada a un soporte de información legible por un procesador de datos y que incluye instrucciones de un programa tal y como se ha mencionado anteriormente.
El soporte de información puede ser cualquier entidad o dispositivo capaz de almacenar el programa. Por ejemplo, el soporte puede incluir un medio de almacenamiento, tal como una ROM, por ejemplo un CD-ROM o una ROM de circuito microelectrónico, o también un medio de grabación magnética, por ejemplo un disquete (floppy disc) o un disco duro.
Por otra parte, el soporte de información puede ser un soporte transmisible, tal como una señal eléctrica u óptica, que se puede conducir a través de un cable eléctrico u óptico, por radio o por otros medios. El programa según la técnica que se propone se puede descargar en particular por una red de tipo Internet.
Alternativamente, el soporte de información puede ser un circuito integrado en el que va incorporado el programa, estando adaptado el circuito para ejecutar o para ser utilizado en la ejecución del procedimiento en cuestión.
De acuerdo con una forma de realización, la técnica que se propone se lleva a la práctica por medio de componentes de soporte lógico y/o de soporte físico. En esta línea, el término "módulo" puede corresponder, en este documento, tanto a un componente de soporte lógico, como a un componente de soporte físico o a un conjunto de componentes de soporte físico y lógico.
Un componente de soporte lógico corresponde a uno o varios programas de ordenador, uno o varios subprogramas de un programa o, de manera más general, a todo órgano de un programa o de un soporte lógico apto para llevar a la práctica una función o un conjunto de funciones, según lo descrito a continuación en relación con el módulo de que se trate. Tal componente de soporte lógico es ejecutado por un procesador de datos de una entidad física (terminal, servidor, pasarela, encaminador, etc.) y está posibilitado de acceso a los recursos de soporte físico de esta entidad física (memorias, soportes de grabación, buses de comunicación, tarjetas electrónicas de entrada/salida, interfaces de usuario, etc.).
De la misma manera, un componente de soporte físico corresponde a todo elemento de un conjunto de soporte físico (o hardware) apto para llevar a la práctica una función o un conjunto de funciones, según lo descrito a continuación en relación con el módulo de que se trate. Puede ser un componente de soporte físico programable o con procesador integrado para la ejecución de soporte lógico, por ejemplo un circuito integrado, una tarjeta chip, una tarjeta de memoria, una tarjeta electrónica para la ejecución de un microprograma (firmware), etc.
Por supuesto, cada componente del sistema anteriormente descrito lleva a la práctica sus propios módulos de lógica.
Las diferentes formas de realización antes mencionadas son combinables entre sí para la puesta en práctica de la técnica que se propone.
4. Figuras
Otras características y ventajas de la técnica que se propone se pondrán más claramente de manifiesto con la lectura de la siguiente descripción de dos formas de realización, dadas a título de mero ejemplo ilustrativo y no limitativo, y de los dibujos que se acompañan, de los cuales:
- la figura 1 ilustra el procedimiento de cifrado de la presente técnica;
- la figura 2 ilustra el procedimiento de descifrado de la presente técnica; y
- la figura 3 es una representación simplificada de un dispositivo para la puesta en práctica de la presente técnica.
5. Descripción
5.1. Recapitulación
Con se ha indicado con anterioridad, la técnica descrita consiste en añadir, en el cifrado, una etapa suplementaria, llamada etapa de codificación, consistente en transformar el código que ha de cifrarse (por ejemplo, código compilado o código intermedio, es decir, bytecode) en una cadena de caracteres específica (por ejemplo, una cadena de caracteres que no contiene más que un solo y único entero de gran longitud o una cadena ASCII o una cadena en otra base de codificación) la cual, a continuación se cifra. Por el contrario, del lado del receptor, con posterioridad al descifrado, la cadena de caracteres obtenida se descodifica según el proceso de descodificación inverso del proceso de codificación.
Sin embargo, no nos limitamos, según la técnica descrita, a efectuar una codificación del código que ha de cifrarse. Se realiza una codificación particular que posee la propiedad de producir una cadena de caracteres que, por una parte, no puede, en su forma, ser distinguida con facilidad de otra cadena de caracteres y, por otra, que siempre puede ser descodificada para producir un código correcto. Más en particular, de acuerdo con la técnica que se propone, cualquier código que haya de cifrarse, cuya gramática es conocida por el codificador, produce una cadena de caracteres; a la inversa, cualquier cadena de caracteres, proporcionada al descodificador (que comprende la misma gramática), produce un código correcto: es decir un código sintácticamente correcto, del cual, a priori, no se puede dar un significado particular.
De este modo, cifrando no tanto directamente el código que ha de protegerse, sino una codificación particular de ese código, se retarda significativamente a un atacante que disponga de un conjunto de claves de cifrado, conjunto que es susceptible de contener una clave correcta, al impedirle diferenciar un resultado de descifrado que tiene sentido de un resultado aleatorio (pero gramaticalmente correcto) obtenido mediante una clave equivocada.
Al garantizar mediante la observancia de la gramática (semántica) del lenguaje del código que los descifrados de toda cadena de caracteres son códigos ejecutables válidos, se obliga al atacante a efectuar un análisis semántico caso por caso para intentar autenticar el código fuente original (sin que esté garantizado que el atacante consiga efectuar tal análisis). En efecto, para poder realizar tal análisis, el atacante debe verificar el funcionamiento del soporte lógico obtenido mediante este código. Esto significa que, por cada descifrado (cada cadena obtenida mediante una operación de descodificación), el atacante debe compilar opcionalmente ese descifrado (cuando se trata de código fuente) e implantarlo en el seno del dispositivo con el fin de verificar el funcionamiento del mismo. Se comprende que, cuando hay un considerable número de claves, estas operaciones de verificación son complejas y lentas de realizar. A partir de ese momento, no es en absoluto seguro que el atacante consiga sus fines de manera rápida.
De manera teórica, se plantea Sx el código ensamblador de un programa embebido que se pretende proteger cifrándolo (se obtiene un código cifrado Cx). Como anteriormente se ha hecho explícito, la clave de descifrado Kx no se puede encomendar a un Tercero de confianza (pues el producto no necesariamente está en línea en el momento de la actualización), por lo que debe emplazarse en (o dentro de) el producto que ha de protegerse (por ejemplo, en o dentro del terminal de pago). Para confundir al atacante, se introduce asimismo, en o dentro del producto, cierto número de claves erróneas (Ky, Kz, etc.). De este modo, merced a la técnica descrita, aunque un atacante lograra obtener una clave (e incluso más, o todas las claves), le resulta más complicado determinar si esa clave es o no una clave válida.
Supongamos que, en efecto, un atacante es capaz de recoger la totalidad o parte del conjunto de las claves disponibles (Kx, Ky, Kz). De manera tradicional (es decir, sin emplear la técnica objeto de la presente), descifrando el código cifrado Cx con cada clave recogida, el atacante obtiene, bien Sx si se trata de la clave acertada, o bien algo aleatorio (Ry, Rz) si se trata de la clave equivocada. En este caso, la distinción entre lo aleatorio (Ry, Rz) y el código correcto Sx es fácil para el atacante, con escasa inversión de tiempo y/o de dinero: en efecto, bien el atacante obtiene un código (por ejemplo, ensamblador) correcto, identificable de inmediato, o bien obtiene un ruido aleatorio, que no se asemeja en nada a un código ensamblador. El atacante, cuando obtiene un ruido aleatorio, sabe que la clave utilizada no es la acertada y puede pasar directamente a la siguiente clave.
Por el contrario, con la técnica descrita, el atacante dispone, al término del descifrado con una cualquiera de las claves (Kx, Ky, Kz), de una cadena de caracteres que es preciso descodificar pasándola por un descodificador adecuado (denominado descodificador reversible). El descodificador reversible está diseñado de tal modo que cualquier entrada produce un código descifrado correcto. Esto se debe al hecho de que el descodificador, como el codificador, integra un conocimiento de la gramática del código del programa y de que la codificación y la descodificación se realizan en función de esta gramática. De este modo, cualquiera que sea la entrada del descodificador, se produce un código ensamblador (o intermedio en el caso del bytecode). A un atacante, a partir de ese momento, le resulta muy difícil distinguir un código producido con la clave correcta Kx de un código producido con un señuelo (es decir, una clave introducida para engañar al atacante, Ky, Kz).
El procedimiento de cifrado de la presente técnica se describe en relación con la figura 1. Este procedimiento de cifrado comprende:
- una etapa de obtención (10) de un código que ha de cifrarse (Sx); este código que ha de cifrarse es, por ejemplo, un código ensamblador o un código intermedio (bytecode);
- una etapa de obtención (11) de una gramática descriptiva (Gd) del lenguaje del código que ha de cifrarse;
- una etapa de obtención (12) de un conjunto de claves de cifrado (Kx, Ky, Kz);
- una etapa de codificación (13) del código que ha de cifrarse (Sx) con el concurso de la gramática descriptiva (Gd) que entrega una cadena de caracteres (CdC) en cuyo seno al menos una instrucción de partida (InstrD) del código que ha de cifrarse (Sx) está codificada en una representación (RInstrD) en la cadena de caracteres (CdC). La representación (RInstrD) es el resultado de un cálculo operado a partir de la instrucción y de parámetros relacionados con la instrucción en el seno de la gramática;
- una etapa de cifrado (14) de la cadena de caracteres (CdC) con el concurso de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz), que entrega una cadena cifrada (Cx).
De este modo, la codificación que se hace del código de entrada tiene en cuenta la gramática del propio código. Esto permite introducir una cierta inteligencia en la codificación y desmarcarse de los métodos básicos existentes, que muchas veces consisten en codificar realizando una transformación a base 16 o a base 64. Por el contrario, la técnica descrita introduce una cierta comprensión de aquello que se codifica. Subsidiariamente, en una forma específica de realización, la codificación se realiza de manera recursiva. Tal codificación no es obligatoria, pero permite asegurarse de que el conjunto del proceso de codificación tenga un resultado que sea descodificable de manera recursiva y, por tanto, más seguro por cuanto que es absolutamente necesario realizar una descodificación completa de la cadena antes de poder verificar si esta cadena puede corresponder eventualmente al código fuente correcto. Esto evita que el atacante descodifique una primera palabra, luego una segunda, etc. (cosa que sería posible en caso de codificación iterativa).
El procedimiento de descifrado de la presente técnica se describe en relación con la figura 2. Es el inverso del procedimiento de cifrado. Este procedimiento de descifrado comprende:
- una etapa de obtención (20) de una cadena cifrada (Cx); esta cadena de caracteres cifrada resulta, a priori, de un cifrado realizado con el concurso del procedimiento anteriormente presentado;
- una etapa de obtención (21) de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz ); puede tratarse de las mismas claves que las que han servido para la realización del cifrado (caso de un cifrado simétrico), o bien de claves públicas o privadas en el caso de un cifrado asimétrico;
- una etapa de descifrado (22) de la cadena cifrada (Cx) con el concurso de la clave de cifrado (Kx), que entrega una cadena de caracteres (CdC);
- una etapa de obtención (23) de una gramática descriptiva (G d) del lenguaje del código que ha de cifrarse;
- una etapa de descodificación (24) de la cadena de caracteres (CdC) con el concurso de la gramática descriptiva (G d) que entrega una cadena de caracteres descodificada (CdDC) en cuyo seno al menos una representación (RInstrD) en la cadena de caracteres (CdC) está descodificada en una instrucción (InstrD) cadena de caracteres descodificada (CdDC); la instrucción obtenida es representativa de un cálculo operado a partir de la representación (RInstrD) y de parámetros relacionados con las instrucciones en el seno de la gramática y especialmente con las instrucciones descodificadas anteriormente: las instrucciones descodificadas anteriormente son utilizadas para permitir determinar un encadenamiento de instrucciones (y de parámetros de instrucciones) que sea lógico en consideración a la gramática.
Por supuesto, las claves de cifrado (y, eventualmente, de descifrado cuando son diferentes) se escogen para que, en la operación de cifrado o en la operación de descifrado, se preserve el tipo de la cadena de caracteres. Por ejemplo, cuando el módulo de descodificación espera, como entrada, una cadena de caracteres que comprende un único entero, todas las claves de descifrado se escogen para producir, al término del descifrado, un gran entero contenido en una cadena de caracteres. De este modo, no es posible distinguir directamente entre una clave válida y una clave no válida, ya que el resultado obtenido (por ejemplo, un entero) se corresponde con un resultado esperado que es válido para el módulo de descodificación. El módulo de descodificación, al tener como entrada un parámetro correcto (por ejemplo, un entero) y la gramática descriptiva, siempre está en condiciones de producir, como salida, un código correcto.
5.2. Forma de realización
En esta forma de realización, se hacen explícitos un método de codificación y un método de descodificación particulares. Más en particular, el codificador produce un entero de gran tamaño (representado, por ejemplo, en forma de una cadena de caracteres numéricos). Por el contrario, el descodificador acepta un entero de gran tamaño y proporciona, como resultado, un código ensamblador.
Se supone, en esta forma de realización, un código compilado (código ensamblador) que comprende cierto número de instrucciones, siendo cada instrucción una instancia. Estas instrucciones son conocidas por el codificador (y, consiguientemente, por el descodificador) en forma de una gramática. Esta gramática comprende, por una parte, la lista de las instrucciones posibles y, por otra, los eventuales tipos de argumentos de estas instrucciones cuando los tienen. Así, por ejemplo, una instrucción “movb”, que es una instrucción de escritura de un valor en un registro, comprende dos parámetros que son un valor (por ejemplo, $0x61) y un registro de destino (por ejemplo, “%al”). Dicho de otro modo, un código ensamblador se materializa en forma de instrucciones de un tamaño dado, siendo una parte de la instrucción la operación y, el resto, sus argumentos. Por lo tanto, se puede desglosar un código ensamblador, incluso en forma binaria, en “palabras” o “tokens”. El código se representa entonces como una sucesión de palabras o de tokens. Cada palabra tiene un “tipo” (instrucción, dirección, constante) que permite conocer la semántica del código binario que la representa. Supuesto un código ensamblador de origen, es la semántica (gramática) del lenguaje ensamblador utilizado la que proporciona las instrucciones de descodificación. Cada tipo tiene un número finito de instancias (por ejemplo, el número de instrucciones posibles es finito). A cada instancia de un tipo se le asocia un identificador (no nulo) en el seno de este tipo.
Así:
- Se señala con v la palabra vacía;
- Sea una palabra no vacía m (esto es, una instrucción, una dirección, un valor, un número de registro, etc.);
- T(m) es el cardinal del tipo de m (es decir, el número de tipos de palabras no vacías);
- l(m) es el identificador de m (este identificador puede estar comprendido entre 0 y T(m)-1);
- Sx es el código de origen (por ejemplo, ensamblador) que ha de transformarse; y
- Sx = m S'x, lo que significa que el código de origen que ha de transformarse Sx es igual a una palabra no vacía m seguida del resto del código de origen que ha de transformarse S'x.
En esta forma de realización, la técnica es puesta en práctica por mediación de un módulo de lógica. Este módulo de lógica se utiliza de manera recursiva. El módulo de lógica de codificación está designado con las letras “CRP’. El módulo de lógica de descodificación está designado con las letras “ CRP-1”. Por supuesto, el módulo “CRP’ y el módulo “CRP-1” pueden ser un solo y mismo módulo, actuando como un codificador o como un descodificador en función de una adecuada parametrización.
Como consecuencia de ello, la codificación (la transformación a entero) del código de origen Sx a entero de (muy) gran tamaño se efectúa (recursivamente) de la siguiente manera:
- CRP(v) = 0 ; y
- CRP(m S'x) = T(m)*(CRP(S'x)) l(m).
Se hace notar en la expresión precedente la llamada recursiva efectuada a “CRP’ en S'x.
De este modo, el resultado de CRP(m S'x) es un entero resultante de la multiplicación del cardinal del tipo de m [T(m)] por el entero CRP(S'x), multiplicación a la que se añade el identificador de m [I(m)].
De este modo, por ejemplo, el siguiente código:
mov eax, 4
mov ebx, 1
int 80h
genera el siguiente entero:
2(2(3(2(2(3(2(3 x 0 2) 1) 1) 1) 0) 0) 0) 0 = 792
Tomando en consideración los siguientes elementos (arbitrariamente, para los requerimientos del ejemplo dado y considerando que el codificador “CRP’ tan solo conoce tres tipos y los valores considerados):
- mov e int son dos tipos de instrucciones: el cardinal del tipo de mov e int es 2. El identificador de mov es 0 y el identificador de int es 1;
- eax y ebx son tipos de registro. El cardinal del tipo de eax y ebx es 2. El identificador de eax es 0 y el identificador de ebx es 1;
- 4, 1 y 80h son tipos de valores. El identificador de 4 es 0 y el identificador de 1 es 1 y el identificador de 80h es 2. Se comprende, como es lógico, con la lectura de las explicaciones facilitadas, que entre los elementos importantes para el cálculo de este entero tenemos T(m) e l(m). Estos valores se adquieren mediante la utilización de la gramática descriptiva.
En función de un identificador, con tipo implícito, hallamos la palabra correspondiente (es decir, una instrucción de partida). De este modo, en la descodificación, se hace intervenir asimismo la gramática; esto garantiza que, para una cadena a la entrada, descifrada con anterioridad, siempre se encontrará una cadena descodificada que es gramaticalmente correcta. Dicho de otro modo, siempre se encontrará una sucesión de palabras de códigos de lenguaje que significa algo. Para hacer esto, el cardinal de un tipo de palabra y el identificador de una palabra en este cardinal permiten a un mismo tiempo calcular un entero (como se ha hecho explícito con anterioridad) y, a partir de un entero dado, encontrar una sucesión de palabras del lenguaje de origen (como se hará explícito en lo sucesivo).
Esto es claramente diferente de los métodos de codificación y de descodificación basados, por ejemplo, en una transformación a base 16 o a base 64, en los que no importa el significado de la cadena que se codifica.
Por el contrario, para descodificar un número natural n, se recurre a CRP-1 que utiliza recursivamente una función de descodificación D que toma como argumento un tipo esperado T (de cardinal |T|) y un entero natural n :
- D(0) = v; y
- D(n,T) = I-1 (n mod ¡T¡) D(n/ ¡T¡, T').
donde se utiliza la división entera y donde T viene dado por la gramática del lenguaje.
De este modo, para el ejemplo precedente:
792 = 2(2(3(2(2(3(2(3 x 0 2) 1) 1) 1) 0) 0) 0) 0
Se obtiene, pues, el código de origen a partir de los tipos y de los identificadores dados con anterioridad. Se hace notar, por ejemplo, que el número 793 no daría el mismo código. En efecto:
793 = 2(2(3(2(2(3(2(3 x 0 2) 1) 1) 1) 0) 0) 0) 1
Esto es, el siguiente código:
int eax, 4
mov ebx, 1
int 80h
Se hace notar, por ejemplo, que el número 795 no daría el mismo código. En efecto:
795 = 2(2(3(2(2(3(2(3 x 0 2) 1) 1) 1) 0) 0) 1) 1
Esto es, el siguiente código:
int ebx, 4
mov ebx, 1
int 80h
Se comprende así un aspecto importante de la técnica que se propone: cuando un atacante posee un código cifrado (Cx) y asimismo posee al menos dos claves (Kx, Ky) del conjunto de claves, aplica las dos claves sobre el código cifrado (Cx) con el fin de descifrar este código cifrado. La utilización de una u otra clave permite descifrar el código cifrado (Cx) y obtener un número (por ejemplo, 795 y 792). Se supone ahora que el atacante posee asimismo el módulo de descodificación (el módulo “CRP’ o módulo “CRP-1”). Si el atacante aplica el módulo sobre cada uno de los dos números 795 y 792, no obtiene el mismo código ensamblador al término de la descodificación. Le resulta entonces mucho más complicado al atacante distinguir cuál es el acertado de entre los dos códigos obtenidos. Estos ejemplos, por supuesto, son meramente ilustrativos y tan solo se proponen para la debida comprensión de la técnica que se propone. Se comprende, para una integración completa de un lenguaje como el ensamblador:
- que los tipos de instrucción son más numerosos (cosa que ocurre asimismo con la cardinalidad y con los identificadores);
- que el número de registros es mayor (cosa que ocurre asimismo con la cardinalidad y con los identificadores de estos registros);
- más que listar los valores posibles de los argumentos de las instrucciones (4, 1 y 80h en el ejemplo) y determinar el cardinal y el identificador de los mismos (lo cual es audaz e incluso subóptimo), es preferible realizar una transformación directa de estos valores de argumentos en enteros en el seno del módulo de codificación;
- que los separadores (salto de línea, espacio “ ”, coma “,”, punto y coma “;”, etc.) igualmente pueden ser objeto de una integración con el fin de facilitar la codificación y la descodificación (en nexo con la gramática).
5.3. Dispositivo de puesta en práctica
Se describe, en relación con la figura 3, un dispositivo que comprende medios que permiten la ejecución del procedimiento descrito con anterioridad.
Por ejemplo, el dispositivo comprende una memoria 31 constituida a partir de una memoria intermedia, poniendo en práctica una unidad de procesamiento 32, equipada, por ejemplo, con un microprocesador y pilotada por el programa de ordenador 33, las etapas necesarias para el cifrado y/o para el descifrado y/o para la codificación y/o para la descodificación tales y como se han descrito con anterioridad.
Con la inicialización, las instrucciones de código del programa de ordenador 33 se cargan, por ejemplo, en una memoria, antes de ser ejecutadas por el procesador de la unidad de procesamiento 32. La unidad de procesamiento 32 recibe como entrada, por ejemplo, un código ensamblador o un código intermedio que ha de cifrarse o de codificarse. El microprocesador de la unidad de procesamiento 32 pone en práctica las etapas del procedimiento de cifrado y/o de codificación, según las instrucciones del programa de ordenador 33, para efectuar una transformación del código ensamblador o del código intermedio.
Para ello, el dispositivo comprende, aparte de la memoria intermedia 31, unos medios de cálculo de cadena de caracteres de gran longitud y/o unos medios de cálculo de enteros de gran longitud y, eventualmente, un procesador de cifrado y, eventualmente, unos medios de comunicación, tales como módulos de comunicación en red, aunque los mismos no sean imprescindibles. Estos medios pueden estar pilotados por el procesador de la unidad de procesamiento 32 en función del programa de ordenador 33. Estos medios se materializan asimismo en forma de módulos, de soporte lógico o físico, dedicados específicamente o no a la puesta en práctica de la presente técnica. Por otro lado, el procesador a cargo puede ser un procesador seguro que permite precaverse contra un ataque durante las fases de cifrado o de descifrado.

Claims (9)

REIVINDICACIONES
1. Procedimiento de cifrado de un código que ha de cifrarse ( Sx ) de un programa informático con el concurso de una clave de cifrado (Kx) seleccionada de entre al menos dos claves de cifrado (Kx, Ky , Kz), materializándose el código que ha de cifrarse (Sx) en forma de un código compilado o de un código intermedio, comprendiendo el procedimiento:
- una etapa de obtención (11) de una gramática descriptiva (G d) del lenguaje del código que ha de cifrarse; procedimiento caracterizado por comprender:
- una etapa de codificación (13) del código que ha de cifrarse (Sx) con el concurso de la gramática descriptiva (G d) que entrega una cadena de caracteres (CdC) en cuyo seno al menos una instrucción de partida (InstrD) del código que ha de cifrarse (Sx) está codificada en una representación (RInstrD) en la cadena de caracteres (CdC), dicha etapa de codificación (13) se pone en práctica de manera recursiva, calculándose una representación (RInstrDi) de una instrucción de partida (InstrDi) al término de un cálculo previo de una representación (RInstrDi+1) de una instrucción siguiente (InstrDi+1) del código que ha de cifrarse;
- una etapa de cifrado (14) de la cadena de caracteres (CdC) con el concurso de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz), que entrega una cadena cifrada (Cx).
2. Procedimiento de cifrado según la reivindicación 1, caracterizado por que dicha etapa de codificación (13) comprende, para una instrucción de partida (InstrD) del código que ha de cifrarse (Sx), una etapa de obtención, en el seno de dicha gramática descriptiva (G d), de un tipo de la instrucción de partida (InstrD) y una etapa de obtención, en el seno de dicha gramática descriptiva (G d), de un identificador de la instrucción de partida (InstrD) en el seno de un cardinal del tipo de la instrucción de partida (InstrD).
3. Procedimiento de cifrado según la reivindicación 2, caracterizado por que dicha etapa de codificación (13) comprende, para una instrucción de partida (InstrD) del código que ha de cifrarse (Sx), una etapa de cálculo de dicha representación (RInstrD) en función de dicho tipo de la instrucción de partida (InstrD) y de dicho identificador de la instrucción de partida (InstrD) en el seno del cardinal del tipo y de la instrucción de partida (InstrD).
4. Procedimiento de cifrado según la reivindicación 1, caracterizado por que dicha etapa de codificación (13) del código que ha de cifrarse (Sx) entrega una cadena de caracteres (CdC) que comprende un único entero.
5. Dispositivo de cifrado de un código que ha de cifrarse (Sx) de un programa informático con el concurso de una clave de cifrado (Kx) seleccionada de entre al menos dos claves de cifrado (Kx, Ky, Kz), materializándose el código que ha de cifrarse (Sx) en forma de un código compilado o de un código intermedio, comprendiendo el dispositivo:
- unos medios de obtención (11) de una gramática descriptiva (G d) del lenguaje del código que ha de cifrarse; dispositivo caracterizado por comprender:
- un módulo de codificación (13) del código que ha de cifrarse (Sx) con el concurso de la gramática descriptiva (G d) que entrega una cadena de caracteres (CdC) en cuyo seno al menos una instrucción de partida (InstrD) del código que ha de cifrarse (Sx) está codificada en una representación (RInstrD) en la cadena de caracteres (CdC), el módulo de codificación (13) se pone en práctica de manera recursiva, calculándose una representación (RInstrDi) de una instrucción de partida (InstrDi) al término de un cálculo previo de una representación (RInstrDi+1) de una instrucción siguiente (InstrDi+1) del código que ha de cifrarse;
- unos medios de cifrado (14) de la cadena de caracteres (CdC) con el concurso de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz), que entregan una cadena cifrada (Cx).
6. Producto de programa de ordenador descargable desde una red de comunicación y/o almacenado en un soporte legible por ordenador y/o ejecutable por un microprocesador, caracterizado por comprender instrucciones de código de programa para la ejecución de un procedimiento de cifrado según la reivindicación 1, cuando se ejecuta en un procesador.
7. Procedimiento de descifrado de un código de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado, materializándose el código en forma de un código compilado o de un código intermedio, procedimiento caracterizado por comprender:
- una etapa de obtención (20) de una cadena cifrada (Cx);
- una etapa de obtención (21) de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz);
- una etapa de descifrado (22) de la cadena cifrada (Cx) con el concurso de la clave de cifrado (Kx), que entrega una cadena de caracteres (CdC);
- una etapa de obtención (23) de una gramática descriptiva (G d) del lenguaje del código que ha de cifrarse;
- una etapa de descodificación (24) de la cadena de caracteres (CdC) con el concurso de la gramática descriptiva (G d) que entrega una cadena de caracteres descodificada (CdDC) en cuyo seno al menos una representación (RInstrD) en la cadena de caracteres (CdC) está descodificada en una instrucción (InstrD) cadena de caracteres descodificada (CdDC), dicha etapa de descodificación (24) se pone en práctica de manera recursiva.
8. Dispositivo de descifrado de un código de un programa informático con el concurso de una clave de cifrado seleccionada de entre al menos dos claves de cifrado, materializándose el código en forma de un código compilado o de un código intermedio, caracterizado el dispositivo por comprender:
- unos medios de obtención (20) de una cadena cifrada (Cx);
- unos medios de obtención (21) de una clave de cifrado (Kx) perteneciente al conjunto de claves de cifrado (Kx, Ky, Kz);
- unos medios de descifrado (22) de la cadena cifrada (Cx) con el concurso de la clave de cifrado (Kx), que entregan una cadena de caracteres (CdC);
- unos medios de obtención (23) de una gramática descriptiva (G d) del lenguaje del código que ha de cifrarse;
- unos medios de descodificación (24) de la cadena de caracteres (CdC) con el concurso de la gramática descriptiva (G d) que entregan una cadena de caracteres descodificada (CdDC) en cuyo seno al menos una representación (RInstrD) en la cadena de caracteres (CdC) está descodificada en una instrucción (InstrD) cadena de caracteres descodificada (CdDC), poniéndose en práctica los medios de descodificación (24) de manera recursiva.
9. Producto de programa de ordenador descargable desde una red de comunicación y/o almacenado en un soporte legible por ordenador y/o ejecutable por un microprocesador, caracterizado por comprender instrucciones de código de programa para la ejecución de un procedimiento de descifrado según la reivindicación 8, cuando se ejecuta en un procesador.
ES16728907T 2015-06-05 2016-06-06 Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes Active ES2855749T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR1555173A FR3037173B1 (fr) 2015-06-05 2015-06-05 Procede de chiffrement, procede de chiffrement, dispositifs et programmes correspondants
PCT/EP2016/062766 WO2016193493A1 (fr) 2015-06-05 2016-06-06 Procédé de chiffrement, procédé de chiffrement, dispositifs et programmes correspondants

Publications (1)

Publication Number Publication Date
ES2855749T3 true ES2855749T3 (es) 2021-09-24

Family

ID=54366286

Family Applications (1)

Application Number Title Priority Date Filing Date
ES16728907T Active ES2855749T3 (es) 2015-06-05 2016-06-06 Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes

Country Status (6)

Country Link
US (1) US10666421B2 (es)
EP (1) EP3304531B1 (es)
CA (1) CA2988357C (es)
ES (1) ES2855749T3 (es)
FR (1) FR3037173B1 (es)
WO (1) WO2016193493A1 (es)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
CN113505280B (zh) * 2021-07-28 2023-08-22 全知科技(杭州)有限责任公司 一种通用场景的敏感密钥信息识别提取技术

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003090021A2 (en) * 2002-04-15 2003-10-30 Core Sdi, Incorporated Security framework for protecting rights in computer software
US8667600B2 (en) * 2011-06-30 2014-03-04 International Business Machines Corporation Trusted computing source code escrow and optimization

Also Published As

Publication number Publication date
WO2016193493A1 (fr) 2016-12-08
EP3304531B1 (fr) 2020-12-02
FR3037173A1 (fr) 2016-12-09
CA2988357C (fr) 2024-04-16
US10666421B2 (en) 2020-05-26
CA2988357A1 (fr) 2016-12-08
EP3304531A1 (fr) 2018-04-11
US20180359080A1 (en) 2018-12-13
FR3037173B1 (fr) 2018-04-06

Similar Documents

Publication Publication Date Title
Bortolozzo et al. Attacking and fixing PKCS# 11 security tokens
Lazar et al. Why does cryptographic software fail? A case study and open problems
JP6545136B2 (ja) ウェブページの暗号化送信のためのシステム及び方法
EP2711858B1 (en) Method and system for securely updating firmware in a computing device
KR101256149B1 (ko) 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
Parno et al. Bootstrapping trust in modern computers
KR101091465B1 (ko) 프로세서의 가상 머신 내 기밀 콘텐츠의 보안 처리를 위한 방법 및 장치
US9602289B2 (en) Steganographic embedding of executable code
US8958546B2 (en) Steganographic messaging system using code invariants
RU2541196C2 (ru) Способ обеспечения целостности программного обеспечения
CN109075976A (zh) 取决于密钥认证的证书发布
US9892661B2 (en) Steganographic embedding of hidden payload
US20110296192A1 (en) Information processing device, program developing device, program verifying method, and program product
US20110271350A1 (en) method for protecting software
JP2013175179A (ja) 少なくとも1つの暗号化された命令を備えるソフトウェアアプリケーションの協調実行のためのシステム、デバイスおよび方法
Sebastian et al. A study & review on code obfuscation
US8694548B2 (en) Defense-in-depth security for bytecode executables
ES2855749T3 (es) Procedimiento de cifrado, procedimiento de cifrado, dispositivos y programas correspondientes
US11042610B1 (en) Enabling integrity and authenticity of design data
US11126992B2 (en) Method for facilitating transactions, computer program product and mobile device
JP2007515723A (ja) アクティブなエンティティを使用するソフトウェア実行保護
US11947665B2 (en) Secured computer code and systems, methods, and storage media for creating the secured computer code from original computer code
CN114139117A (zh) 应用程序加固方法、装置、电子设备及存储介质
Kumbhar et al. Hybrid Encryption for Securing SharedPreferences of Android Applications
JP2021093101A (ja) 同型暗号化方法を用いて電子文書ファイルの内部に含まれた悪性コードを探知する方法