BR112017013083B1 - Sistema para ocultar uma alteração e método para ocultar uma alteração - Google Patents

Sistema para ocultar uma alteração e método para ocultar uma alteração Download PDF

Info

Publication number
BR112017013083B1
BR112017013083B1 BR112017013083-1A BR112017013083A BR112017013083B1 BR 112017013083 B1 BR112017013083 B1 BR 112017013083B1 BR 112017013083 A BR112017013083 A BR 112017013083A BR 112017013083 B1 BR112017013083 B1 BR 112017013083B1
Authority
BR
Brazil
Prior art keywords
representation
action
variables
variable
condition
Prior art date
Application number
BR112017013083-1A
Other languages
English (en)
Other versions
BR112017013083A2 (pt
Inventor
Hendrik Jan Jozef Hubertus Schepers
Paulus Mathias Hubertus Mechtildis Antonius Gorissen
Original Assignee
Koninklijke Philips N.V.
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 Koninklijke Philips N.V. filed Critical Koninklijke Philips N.V.
Priority claimed from PCT/EP2015/078894 external-priority patent/WO2016102180A1/en
Publication of BR112017013083A2 publication Critical patent/BR112017013083A2/pt
Publication of BR112017013083B1 publication Critical patent/BR112017013083B1/pt

Links

Images

Abstract

SISTEMA PARA OCULTAR UMA ALTERAÇÃO E MÉTODO PARA OCULTAR UMA ALTERAÇÃO. É apresentado um sistema para ocultar uma alteração a um conjunto de variáveis de um programa. Um meio de representação de valor (902) representa um valor wi de uma variável vi das variáveis v1, v2, ..., vn, sendo que w é um elemento de um conjunto W, por meio de uma representação ri, sendo que ri = E(wi,(sigma)i), e ri é um elemento de um conjunto de representações omega (wi) = {E (wi,s) | s pertence sigma}, sendo que (sigma)i é uma variável de estado que é um elemento de um conjunto sigma e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um-para-um de W x sigma para um conjunto predeterminado. Um meio de representação de ação (903) representa uma ação sobre valores de variáveis em um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', para obter representações atualizadas. A ação sobre V' altera a representação rj de cada variável Vj no conjunto de variáveis.

Description

CAMPO DA INVENÇÃO
[001] A invenção se refere à ocultação de detalhes da execução de um programa. Mais particularmente, a invenção se refere à ocultação de uma operação condicional. Mais particularmente, a invenção se refere à ocultação de um fluxo de programa e de fluxos de dados em um programa contendo uma computação condicional.
ANTECEDENTES DA INVENÇÃO
[002] A computação com valores criptografados, sem usar operadores que revelem sua funcionalidade, pode ser realizada com uma abordagem baseada em tabelas. O código de programa, isto é, sua operação, pode ser oculto mediante o uso de tabelas de consulta. A aplicação dessas tabelas a dados criptografados fornece um resultado criptografado, o resultado da operação oculta. Entretanto, o reconhecimento de operadores como comparações (<, =, ...) é razoavelmente fácil, já que tais instruções são em número limitado, tipicamente resultam em uma alteração no fluxo de controle, e seu resultado é do tipo booleano criptografado. Se esse booleano criptografado proteger uma operação condicional, por exemplo no caso de um construto “if-then” (se-então) ou “if-then- else” (se-então-se_não), um invasor poderia reconhecer aspectos da operação a partir do fluxo de controle. Adicionalmente, um invasor poderia criar um ordenamento nos valores criptografados que foram comparados. Por fim, isso poderia levar à quebra da criptografia.
[003] Em um programa de software é frequentemente necessário executar uma comparação. Por exemplo, para verificar se um certo valor-limite foi atingido ou se alguma entrada é igual a um valor predeterminado. Em programas ofuscados, essas comparações podem ajudar um invasor a decifrar a codificação.
[004] O documento US 7.809.135 B2 revela métodos e sistemas relacionados a aumentar a segurança criptográfica de chaves usadas por software com funções criptográficas. Isso é feito mediante o aumento da complexidade matemática do software. Os componentes e funções usados pelo software são primeiro determinados e, usando esses componentes, funções e dados trocados entre eles, o software é tornado mais resistente à análise. Os métodos usados para aumentar a resistência à análise são agrupados em 3 tipos gerais: ajustar as informações trocadas entre os componentes, substituir alguns componentes por componentes diferentes porém relacionados, e ajustar o fluxo de dados entre os componentes.
SUMÁRIO DA INVENÇÃO
[005] Seria vantajoso ter um método e um sistema aprimorados para impedir que as informações vazem de um programa durante sua execução.
[006] Para resolver essa questão, em um primeiro aspecto é apresentado um sistema para ocultar uma alteração a um conjunto de variáveis V = {v1, v2, ..., vn} de um programa. O sistema compreende:
[007] um meio de representação de valor para representação de um valor wi de uma variável vi das variáveis v1, v2, ., vn, sendo que wi é um elemento de um conjunto W, por meio de uma representação ri, sendo que ri = E( wi, Oi), e ri é um elemento de um conjunto de representações Q( wi) = {E( wi, s )| s e ∑}, sendo que OÍ é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[008] um meio de representação de ação para representar uma ação sobre valores de um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', sendo que
[009] a ação sobre V' altera a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado w'j da variável vj, de modo que rj = E'(w'j,oj), sendo que E' é um mapeamento criptográfico um-para- um de W x ∑ para um conjunto predeterminado, e
[0010] sendo que a ação sobre V\V' altera a representação rk de cada variável vk em V\V' de acordo com um valor alterado o'k de ok, de modo que rk = E'(wk,o'k).
[0011] Usando esse sistema, é difícil para um invasor descobrir quais das variáveis foram realmente alteradas no programa, pois as representações das variáveis que não foram alteradas também são alteradas, mediante a alteração da variável de estado o.
[0012] Por exemplo, a ação compreende uma declaração “if”, que define uma ação sobre um conjunto de variáveis V1 se uma condição for válida, e uma ação sobre um conjunto de variáveis V2 se a condição não for válida, sendo que o conjunto de variáveis V é a união de V1 e V2, de modo que V = V1 U V2, e o meio de representação de ação é configurado para usar o conjunto de variáveis V1 ou o conjunto de variáveis V2 como o conjunto de variáveis V' de acordo com a validade da condição. Isso ajuda a evitar o vazamento de informações sobre a condicional, e sobre qual ramificação de um segmento de código condicional foi escolhida. O meio de representação de ação pode usar o conjunto escolhido V' ao representar a ação sobre o subconjunto V' por meio da ação sobre V' e da ação sobre V\V', conforme descrito acima.
[0013] O conjunto de variáveis V1 e o conjunto de variáveis V2 podem ter uma intersecção V3 de variáveis que são afetadas por ambas as ações, de modo que V3 = V1 n V2, sendo que a ação altera cada variável vm do conjunto V3 de acordo com uma função f se a condição for válida, e de acordo com uma função g se a condição não for válida, sendo que o meio de representação de ação é configurado para determinar a representação r'm = E ' (w'm, o'm) de cada variável vm do conjunto V3 de modo que, com base na validade ou não da condição de acordo com a entrada, ou:
[0014] w'm = fm (wm) e 0 'k = gm(hm(wm,0m)), ou
[0015] w'm = gm (wm) e 0 ' k = fm (h m ( Wm, Om) ) ,
[0016] em que hm é um mapeamento de W x ∑ para W.
[0017] Usando esse recurso, é difícil para um invasor descobrir se fm foi realmente aplicada a uma variável wm ou se gm foi aplicada a uma variável wm.
[0018] O meio de representação de ação pode ser configurado para causar uma consulta das representações r'i correspondente a uma entrada referente à condição e às representações ri usando ao menos uma tabela de consulta que mapeia uma tupla da entrada referente à condição e às representações ri para as representações r'i correspondentes. A entrada pode, por exemplo, compreender uma variável booleana (opcionalmente criptografada). Alternativamente, a entrada pode compreender variáveis que ocorrem em um predicado que define a condição. Esse predicado e as ações reais podem estar ocultos na ao menos uma tabela de consulta.
[0019] Em um exemplo específico, |∑| = | W|, e o meio de representação de ação (103) é configurado para identificar uma ou mais variáveis de entrada que determinam a condição b, e sendo que o meio de representação de ação (103) compreende uma unidade de troca (305) para executar uma operação de troca oculta, com base em ao menos uma representação r, sendo que r = ri, de uma variável vi no conjunto V, e as uma ou mais variáveis de entrada, como aquela para p E W e q E W com r = E (p, q) ,
Figure img0001
[0020] sendo que E" é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, sendo que E" é diferente de E, sendo que r" é uma representação,
[0021] e/ou uma unidade de troca (306) para executar uma operação de troca oculta, com base em uma representação rm e nas uma ou mais variáveis, de modo que para p E W e q E W com r'" = E"' (p,q) ,
Figure img0002
[0022] sendo que Em é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, sendo que Em é diferente de E ', e r' é a representação atualizada r'i.
[0023] Essas operações de troca podem ser usadas como etapas de pré-processamento e/ou pós-processamento, respectivamente, ao computar a representação r', de modo que a implementação oculta das funções reais f e/ou g possa ser simplificada. Se apenas uma das unidades de troca for usada, o papel de w e o antes e depois da ação pode ser intercambiado. Isso pode ser resolvido sendo levado em consideração no restante do sistema, por exemplo por meio de código de programa adequado que presume que a codificação E tenha sido alterada.
[0024] O meio de representação de ação pode compreender adicionalmente uma unidade de avaliação de função para computar uma função para obter a representação r"' com base na representação r", de modo que para p e W e q e W com r" = E"(p,q),
[0025] r" = E" (f(p) , g (q) ) ,
[0026] sendo que f é um mapeamento definido em W e g é um mapeamento definido em W.
[0027] Desse modo, as funções f e g podem ser aplicadas ao aspecto w ou o da representação r", dependendo da operação de troca executada antes, de modo que a implementação oculta de f e g possa ser a mesma, independentemente de a condição ser válida. A operação de troca que pode ser executada depois disso troca de volta os aspectos w e o dependendo da condição, para desfazer a operação de troca executada pela primeira operação de troca.
[0028] Em um exemplo específico, E" = E. Isso significa que as duas operações de troca usam codificações criptográficas idênticas. Dessa forma, pode-se reutilizar o mesmo código e/ou as mesmas tabelas para ambas as operações de troca.
[0029] Em um exemplo, hm (w, o) = o, para todos os valores de w e o e ao menos um m em {1,2,3,.., n}. Isso pode proporcionar uma implementação simplificada e/ou mais simétrica.
[0030] Em um exemplo, a ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de modo que w'j = fj (wj) e o'j = oj, e
[0031] sendo que a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de modo que w'k = wk e o'k = fk(hk(wk,ok));
[0032] sendo que fi, para i = 1,2, ., n, é uma função definida em W e hk, para cada variável vk em V\V', é uma função mapeando elementos de W x ∑ para W.
[0033] Esse é um exemplo de que alterações fazer às representações.
[0034] O sistema de acordo com a reivindicação 2 ou 3 compreende adicionalmente um meio de representação condicional aninhado para representar uma operação condicional aninhada que envolve uma primeira pluralidade de condições aninhadas em uma sequência funcionalmente equivalente de operações condicionais não aninhadas envolvendo uma segunda pluralidade de condições.
[0035] O sistema pode compreender adicionalmente uma unidade conversora para converter uma operação condicional aninhada que envolve uma primeira pluralidade de condições aninhadas em uma sequência funcionalmente equivalente de operações condicionais não aninhadas envolvendo uma segunda pluralidade de condições. Isso ajuda a aprimorar a prevenção de vazamentos de informações, pois cada uma das operações condicionais não aninhadas é avaliada, por exemplo por meio do código gerado pela primeira e pela segunda unidades geradoras, de modo que todas as expressões que ocorrem nas operações condicionais são avaliadas e podem influenciar a representação r'. Menos ramificações são ignoradas.
[0036] Por exemplo, a unidade conversora pode ser configurada para: combinar as respectivas expressões das respectivas ramificações condicionais da operação condicional aninhada em termos de uma expressão auxiliar, sendo que as respectivas expressões estão associadas a valores alternativos a serem atribuídos a uma variável específica; repetir a etapa para combinar as respectivas expressões das respectivas ramificações condicionais em termos de uma expressão auxiliar, de modo que seja gerada uma pluralidade de expressões auxiliares nas quais os termos são combinados de diferentes maneiras, gerar código para avaliar as expressões auxiliares e armazenar seus resultados; e gerar código para combinar os resultados das expressões auxiliares em dependência de uma condição combinada, sendo que a condição combinada é uma combinação da pluralidade de condições, de modo que se cancelem os termos correspondentes a ramificações que não sejam relevantes em vista da condição. Tal sistema pode ser usado para ocultar declarações “if” aninhadas mediante o achatamento (operação de “flattening”) das mesmas em uma sequência de declarações “if” que não são aninhadas. Mediante a combinação de expressões que ocorrem em diferentes ramificações condicionais para formar expressões auxiliares e, então, a combinação das expressões auxiliares de tal modo que se cancelam as expressões que não sejam relevantes em vista das condições, muitas das expressões são avaliadas no programa e podem influenciar o resultado criptografado, tornando difícil analisar quais expressões realmente influenciam o valor descriptografado w' correspondente ao resultado criptografado.
[0037] O meio de representação de ação pode ser configurado para identificar ao menos uma operação condicional da sequência de operações condicionais não aninhadas e a correspondente condição da segunda pluralidade de condições, e sendo que o meio de representação de ação é configurado para usar a operação condicional identificada como a ação e a condição identificada correspondente como a condição da declaração “if”. Tal combinação fornece uma ocultação particularmente boa do que ocorre em um trecho de código condicional. Adicionalmente, a unidade identificadora pode ser configurada para identificar cada operação condicional da sequência de operações condicionais não aninhadas e cada condição correspondente da segunda pluralidade de condições, sendo que a primeira unidade geradora e a segunda unidade geradora estão configuradas para processar cada operação condicional identificada e condição correspondente.
[0038] Em um outro aspecto, é apresentado um método para ocultar uma alteração a um conjunto de variáveis V = {vi, v2, ..., vn} de um programa, sendo que o método compreende:
[0039] representar um valor wi de uma variável vi das variáveis v1, v2, ..., vn, sendo que w é um elemento de um conjunto W, por meio de uma representação ri, sendo que ri = E(wi, oi), e ri é um elemento de um conjunto de representações Q(wi) = {E(wi, s)| s e ∑}, sendo que oi é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi , e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[0040] representar uma ação sobre valores de um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', para obter representações atualizadas r'i = E ’ (w'i, o'i), para i =1,2, ..., n, sendo que E ' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, e sendo que:
[0041] a ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado w'j da variável vj, e
[0042] a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de acordo com um valor alterado o'k de ok.
[0043] De acordo com um outro aspecto, é apresentado um sistema para ocultar uma operação condicional, sendo que o sistema compreende:
[0044] uma unidade de representação para representar um valor w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w,o), e r é um elemento de um conjunto de representações Q(w) = {E(w, s) |s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[0045] a unidade de derivação para derivar uma representação r' de um valor w' a partir da representação r com base em uma entrada referente a uma condição, sendo que w' é um elemento do conjunto W, sendo que r' é um elemento de um conjunto de representações Q'(w') = {E'(w', s)|s e ∑}, sendo que r' = E'( w', o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, sendo que, com base na validade de uma condição de acordo com a entrada, ou w' é associado a f (w) ou o' é associado a f (h (w, o)), sendo que f é um mapeamento não trivial definido em W, e h é um mapeamento de W x ∑ para W.
[0046] A unidade de representação fornece uma representação r que é uma representação redundante do valor w. Ou seja, qualquer valor singular de w tem muitas representações r diferentes, pois r pode ser qualquer elemento de Q(w). Isso significa que uma alteração de r não significa necessariamente uma alteração de w, pois r poderia ser apenas alterado para um elemento diferente de Q(w) para o mesmo valor de w. Tal representação permite que fique oculta uma operação condicional; por exemplo, se a condição b for válida, então atualizar w para w' = f(w). Ou seja, se a condição for de fato válida, a representação r é atualizada para se tornar uma representação r' que é uma representação de f(w), isto é, um membro do conjunto Q'(f(w)). Por outro lado, se a condição não for válida, a representação r ainda é atualizada, mas para uma representação diferente do mesmo valor w, isto é, um membro (diferente) do conjunto Q1(w). Como, nesse último caso, a função f é usada para selecionar o membro específico do conjunto Q' (w), a mesma função baseada em f influencia a operação que é executada e aplicada à representação r independentemente de a condição ser válida ou não. Qualquer efeito de entropia proporcionado pela função f é, portanto, propagado na representação w' independentemente de a condição ser válida ou não. Ou seja, mesmo que um invasor alterasse o valor r ou a condição b e observasse quaisquer efeitos disso sobre o resultado r', ainda seria difícil extrair informações sobre o programa e suas variáveis. Adicionalmente, também é difícil pra um observador malicioso descobrir se a função f foi ou não aplicada ao valor w.
[0047] A unidade determinadora pode ser configurada para determinar a representação r' = E'(w', o') de modo que, com base na validade ou não da condição de acordo com a entrada, ou w' é associado a f(w) e o' é associado a g(h(w,o)), ou w' é associado a g(w) e o' é associado a f(h(w,o)), sendo que g é um mapeamento (não trivial) definido em W. Isso é particularmente útil para criar uma implementação oculta de, por exemplo, uma declaração “if” que tem uma parte “else”: if b then w=f(w) else w=g(w). Ambas as funções f e g influenciam o resultado final r', embora somente uma dessas funções influencie a porção w, ou o conjunto Q' a partir do qual a representação r' é selecionada. A outra função meramente influencia qual elemento de Q' é selecionado. Portanto, somente uma dentre as funções f e g (conforme determinado pela condição) determina o valor descriptografado subjacente w' da representação r'.
[0048] A unidade de derivação pode ser configurada para consultar a representação r' correspondente à entrada referente à condição e à representação r, usando ao menos uma tabela de consulta que mapeia uma tupla da entrada e da representação r à correspondente representação r'. A implementação por meio de tabelas de consulta permite evitar o vazamento de quaisquer informações envolvidas na computação da condição a partir das variáveis de entrada e da função f. Além disso, pode ser evitada qualquer declaração “if” ou instrução de salto que dependa da condição.
[0049] Por exemplo, | ∑ | = | W|. A unidade de derivação pode ser configurada para identificar uma ou mais variáveis que determinam a condição b, e a unidade de derivação pode compreender uma unidade de troca para executar uma operação de troca oculta, com base na representação r e nas uma ou mais variáveis, de modo que para p e W e q e W com r = E(p,q) ,
Figure img0003
[0050] sendo que E" é um mapeamento criptográfico um-para-um de Wx ∑ para um conjunto predeterminado, sendo que E" é diferente de E, sendo que r" é uma representação,
[0051] e/ou executar uma operação de troca oculta, com base em uma representação r'" e nas uma ou mais variáveis, de modo que para p e W e q e W com r'" = Em(p,q) ,
Figure img0004
[0052] sendo que Em é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado,
[0053] sendo que E"' é diferente de E ' .
[0054] Essas operações de troca podem ser usadas como etapas de pré e/ou pós-processamento, respectivamente, ao computar a representação r', de modo que a implementação oculta das funções reais f e/ou g possa ser simplificada.
[0055] A unidade de derivação pode compreender adicionalmente uma unidade de avaliação de função para computar uma função para obter a representação r”' com base na representação r", de modo que para p e W e q e W com r" = E"(p,q),
[0056] r”’ = E”’(f(p) , g(q)),
[0057] sendo que g é um mapeamento definido em W.
[0058] Desse modo, as funções f e g podem ser aplicadas ao aspecto w ou o da representação r", dependendo da operação de troca executada antes, de modo que a implementação oculta de f e g possa ser a mesma, independentemente de a condição ser válida.
[0059] Por exemplo, h(w,o) = o, para todos os valores de w e o. Nesse exemplo, quando a condição não é verdadeira, o aspecto o da representação não é influenciado pelo aspecto w da representação. Isso aprimora a simetria do esquema.
[0060] A unidade determinadora pode ser configurada para determinar a representação E'(w',o') de modo que, com base na condição, ou: w' = f(w) e o' = o, ou w' = w e o' = f(h(w,o)). Isso pode ser usado para criar uma implementação oculta de, por exemplo, uma declaração “if” que não tem uma parte “else”: if b then w=f(w).
[0061] De acordo com um outro aspecto da invenção, é fornecido um método para executar condicionalmente uma operação. O método compreende as etapas de:
[0062] representar um valor w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w, o), e r é um elemento de um conjunto de representações Q(w) = {E(w, s)| s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[0063] derivar uma representação r' de um valor w' a partir da representação r com base em uma entrada referente a uma condição, sendo que w' é um elemento do conjunto W, sendo que r' é um elemento de um conjunto de representações Q'(w')={E'(w', s )|s e ∑}, sendo que r' = E'(w', o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, sendo que, com base na validade de uma condição de acordo com a entrada, ou w' é associado a f (w) ou o' é associado a f (h (w, o)), sendo que f é um mapeamento não trivial definido em W, e h é um mapeamento de W x ∑ para W.
[0064] De acordo com um outro aspecto da invenção, é fornecido um sistema para criar código de computador para executar condicionalmente uma operação. O sistema compreende:
[0065] uma unidade identificadora para identificar uma condição e uma operação condicional f destinada a ser executada em uma variável w de modo que, se a condição for válida, a variável w' é computada de modo que w' = f(w), sendo que w' é um elemento do conjunto W, e sendo que f é um mapeamento definido em W;
[0066] uma primeira unidade geradora para gerar um primeiro código de computador, sendo que o primeiro código de computador é configurado para, quando executado, representar a variável w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w, o) e r é um elemento de um conjunto de representações Q(w) = {E(w, s) |s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[0067] uma segunda unidade geradora para gerar um segundo código de computador, sendo que o segundo código de computador é configurado para, quando executado, determinar uma representação r' do valor w' com base em uma entrada referente à condição, sendo que r' é um elemento de um conjunto de representações Q ' (w') = {E'(w',s) |s e ∑}, sendo que r' = E'(w',o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e sendo que, se a condição for válida de acordo com a entrada, w' = f(w), e se a condição não for válida de acordo com a entrada, o' = f (h (w, o)), sendo que h é um mapeamento de W x ∑ para W.
[0068] Tal sistema pode ser usado para converter operações simples (não ocultas) em código oculto. Por exemplo, o sistema pode ser implementado como parte de um compilador que gera código oculto. Por exemplo, o código de computador gerado pode compreender código de máquina, pseudocódigo, ou código de máquina virtual.
[0069] De acordo com um outro aspecto, é fornecido um método de criação de código de máquina para executar condicionalmente uma operação, sendo que o método compreende:
[0070] identificar uma condição e uma operação condicional f destinada a ser executada em uma variável w de modo que, se a condição for válida, a variável w' é computada de modo que w' = f(w), sendo que w' é um elemento do conjunto W, e sendo que f é um mapeamento definido em W;
[0071] gerar um primeiro código de computador, sendo que o primeiro código de computador é configurado para, quando executado, representar a variável w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w,o) e r é um elemento de um conjunto de representações Q(w) = {E(w, s)| s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e
[0072] gerar um segundo código de computador, sendo que o segundo código de computador é configurado para, quando executado, determinar uma representação r' do valor w' com base em uma entrada referente à condição, sendo que r' é um elemento de um conjunto de representações Q' (w') = {E ' (w', s )| s e ∑}, sendo que r' = E ' (w', o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e sendo que, se a condição for válida de acordo com a entrada, w' = f(w), e se a condição não for válida de acordo com a entrada, o' = f (h (w, o)), sendo que h é um mapeamento de W x ∑ para W.
[0073] De acordo com um outro aspecto, é fornecido um produto de programa de computador que compreende instruções para fazer com que um processador execute um ou mais dentre os métodos apresentados acima.
[0074] Será reconhecido pelos versados na técnica que duas ou mais dentre as modalidades, implementações e/ou aspectos da invenção mencionados acima podem ser combinados de qualquer forma considerada útil.
[0075] As modificações e variações dos métodos e/ou do produto de programa de computador que correspondem às modificações e variações descritas dos sistemas podem ser executadas por um versado na técnica com base na presente descrição.
BREVE DESCRIÇÃO DOS DESENHOS
[0076] Esses e outros aspectos da presente invenção ficarão evidentes e serão elucidados pelas modalidades descritas a seguir.
[0077] A Figura 1 é um diagrama de blocos de um sistema para executar uma transformação dependendo de uma condição.
[0078] A Figura 2 é um diagrama de blocos de um sistema para ocultar uma operação condicional.
[0079] A Figura 3 é um diagrama de blocos de uma unidade de derivação para ocultar uma operação condicional.
[0080] A Figura 4 é um fluxograma de um método de ocultação de uma operação condicional.
[0081] A Figura 5 é um diagrama de blocos de um sistema para criar código de máquina para executar condicionalmente uma operação.
[0082] A Figura 6 é um diagrama de blocos de um outro sistema para criar código de máquina para executar condicionalmente uma operação.
[0083] A Figura 7 é um fluxograma de um método de conversão de uma operação condicional aninhada.
[0084] A Figura 8 é um fluxograma de um método de criação de código de máquina para executar condicionalmente uma operação oculta.
[0085] A Figura 9 é um diagrama de blocos de um sistema para ocultar uma alteração em um conjunto de variáveis.
[0086] A Figura 10 é um fluxograma de um método de ocultação de uma alteração a um conjunto de variáveis.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[0087] A seguir, é apresentada uma descrição de como aprimorar a criptografia de valores de dados e ocultar o funcionamento interno de um programa. Tais técnicas poderiam ser aplicadas para criar uma máquina virtual segura, por exemplo. Além disso, outros tipos de sistemas podem ser protegidos contra vazamento de informações mediante o uso das técnicas aqui reveladas. Por todo este documento, a palavra “ocultar” é usada para indicar que uma funcionalidade de um programa é difícil de descobrir, por exemplo mediante engenharia reversa. “Ofuscação” é outro termo usado para indicar que é difícil descobrir quais operações funcionais são executadas em um código de programa.
[0088] A Figura 1 ilustra um sistema que compreende uma unidade de transformação 101 configurada para executar uma operação condicional. Ou seja, a unidade de transformação 101 recebe um valor w e uma condição b, e resulta em w' dependendo de b. Se a condição b for verdadeira, a unidade de transformação resulta em w' = f (w). Se a condição b for falsa, a unidade de transformação 101 resulta em w' = g(w). Aqui, f e g são funções diferentes. Em uma disposição alternativa, a unidade de transformação 101 é configurada para receber algumas variáveis (não mostradas) em vez da condição propriamente dita, e a unidade de transformação 101 primeiro avalia uma expressão para determinar se a condição b é verdadeira, com base nessas variáveis. Depois disso, a unidade de transformação 101 produz w' = f(w) (se a condição for verdadeira) ou w' = g(w) (se a condição for falsa). A seguir, serão reveladas modalidades nas quais os valores de w e w', e possivelmente de b, são criptografados.
[0089] A Figura 2 ilustra um sistema para executar uma transformação condicional de maneira oculta. O sistema compreende uma unidade de representação 102 para identificar uma representação criptográfica de um valor w. Por exemplo, o valor de w é fornecido em uma entrada 105 da unidade de representação 102, e a unidade de representação 102 é configurada para criptografar o valor de w para gerar a representação criptografada r de w. Alternativamente, a unidade de representação 102 pode ser configurada para receber a representação r como um valor de entrada 101, e enviar a representação r à unidade de derivação 103. Em qualquer desses casos, um exemplo de relação entre o valor w e sua representação criptográfica r pode ser explicado conforme exposto a seguir.
[0090] Faz-se com que W denote um conjunto de operandos (valores de entrada de uma operação) que precisam ser codificados. Define-se um conjunto finito ∑ de estados e um conjunto finito V com cardinalidade igual ao produto das cardinalidades de W e ∑ . Os elementos de W x ∑ são mapeados de maneira um-para-um para V por uma função de codificação secreta E. Os representantes codificados do elemento w e W são os membros do conjunto
[0091] Q(w) = {E(w, o) | o e ∑}.
[0092] O número de representantes de cada elemento w e W é, dessa forma, igual à cardinalidade de ∑. Como resultado, trajetórias de dados transportando símbolos provenientes de V são iguais (cardinalidade de ∑ = 1) ou mais amplas (cardinalidade de ∑ > 1) que as trajetórias de dados para transportar símbolos provenientes de W. Em outras palavras, quando a cardinalidade de ∑ é maior que um, há mais valores que podem representar qualquer valor específico de w, pois a representação E(w,o) depende não só de w, como também de uma variável de estado o que não necessariamente tem qualquer significado, mas que pode ser escolhida aleatoriamente. Essa variável de estado o é introduzida meramente para criptografar o valor de w e ocultar quaisquer operações executadas em w. De preferência, W = ∑, ou ao menos a cardinalidade de W é igual à cardinalidade de ∑. Isso, porém, não é uma limitação.
[0093] Considere-se a função f: W ^ W a ser codificada (ou oculta) . Construir uma função F: V ^ V de modo que V w e W e o e ∑ temos F (E( w, o)) e Q( f (w)). Portanto F mapeia um representante de w para um representante de f(w). Uma definição geral poderia ser:
[0094] F(E(w,o)) = E(f(w), g(w,o)). (Equação 1)
[0095] Nesse exemplo, o representante E(f(w), g(w,o)) de f(w) é em parte determinado por uma função g(w,o). Ou seja, o valor de estado associado ao representante de f(w) pode depender tanto do valor w como do estado o associado ao representante de w, usando uma relação g: W x ∑ ^ ∑. Em um exemplo específico, g depende apenas de o, de modo que g: ∑ ^ ∑. Entretanto, o exposto a seguir não se limita a esse exemplo específico.
[0096] A representação de valor E(w,o) e a codificação de uma operação f(w) conforme definido na Equação 1 é, dessa forma, adicionalmente oculta mediante o uso de algum mapeamento g. Esse mapeamento g pode ser diferente para cada uma das operações que ocorrem em um programa. Consequentemente, uma pluralidade de instruções com as respectivas operações fi introduz uma correspondente pluralidade de instruções com, respectivamente, relações gi. A ordem de execução das instruções com operações fi pode induzir uma ordem de execução nas instruções com as relações gi. De fato, além do cálculo constituído pelas operações fi, um novo cálculo passa a existir para computar gi. Esse último cálculo é chamado, deste ponto em diante, de cálculo o ou de trajetória o. De modo similar, a função de criptografia E pode ser diferente para cada uma das operações no programa, mediante a introdução de uma sequência das respectivas funções de criptografia Ei(w,o), de modo que a representação de qualquer valor w pode ser diferente após cada operação. Nesse caso, a Equação 1 generaliza para a Equação 1a:
[0097] Fi (E i (w, o)) = E i+i( fi (w), gi (w, o)). (Equação 1a)
[0098] Para a descrição de uma instrução, pode ser usada uma generalização simétrica da Equação 1. Considere-se uma função q0: W x ∑ ^ W, uma relação q1: W x ∑ ^ ∑. A Equação 1 pode ser generalizada para:
[0099] F(E(w,o)) = E(q0 (w,o), q1 (w,o)) (Equação 2)
[00100] Nesse caso, informações possivelmente parciais de f(w) na Equação 1 podem ser passadas como parte de q0 ou q1. Duas observações podem ser feitas. A primeira observação é que em um exemplo específico, tanto q0 como q1 poderiam ser criptografias, e que E “somente” combina os valores. A segunda observação é que o papel de w como valor e o de o como estado poderia ser visto como diminuindo. Basta ser capaz de determinar f(w) ou w, g(o) ou o.
[00101] Para obscurecer o fluxo de programa, as operações de salto podem ser eliminadas e substituídas por operações alternativas nas representações acima descritas. Entretanto, ao contrário do que ocorre no caso dos recursos de conversão de “if” das arquiteturas de processador modernas, essa conversão de “if” não é feita para impedir uma dispendiosa perturbação de pipeline, mas para remover quaisquer alterações observáveis no fluxo de controle. Desse modo, uma análise do fluxo de controle não revela quaisquer seleções feitas no programa. Adicionalmente, na codificação de um programa condicional como “if booleana b for verdadeira, then operação F else operação G”, pode-se assegurar por meio das técnicas aqui reveladas que ambas as ramificações (“operação F” e “operação G”) contribuem para E(w, o), independentemente do resultado da condição (“if booleana b for verdadeira”). Ao fazer isso, pode ser obtido um espalhamento estatístico da condição sobre o total do programa. Por exemplo,
[00102] • o desenvolvimento de w é determinado pela ramificação que corresponde ao resultado da condição,
[00103] • o desenvolvimento de o é determinado pela ramificação que não corresponde ao resultado da condição.
[00104] Tanto w como o podem ser computados ao mesmo tempo e/ou podem ser inseparavelmente conectados um ao outro por meio de E. Mediante análise dos dados resultantes, nem a ramificação tomada, nem o valor da condição pode ser determinado. A operação de salto que seria implementada na técnica anterior com base no resultado da condicional pode ser eliminada, dificultando assim a extração de informações do fluxo de controle do programa. O valor E(w,o) pode ser tornado dependente de ambas as ramificações de uma construção “if-then-else”. Em termos de teoria da informação, a entropia de w e o é muito bem espalhada.
[00105] Por exemplo, uma representação de programa da transformação executada pela unidade de transformação 101 da Figura 1 pode ser conforme exposto a seguir:
[00106] if b then w' : = f (w) else w' : = g (w).
[00107] Na modalidade exemplificadora mostrada na Figura 2, a unidade de derivação 103 recebe uma representação criptografada r de um valor w, conforme explicado acima, e insere informações referentes a uma condição b 104. Essas informações de entrada poderiam ser uma variável booleana ou uma variável booleana criptografada. Alternativamente, as informações de entrada poderiam compreender uma ou mais variáveis que podem ser combinadas, por exemplo, pela unidade de transformação 101, em um predicado que define a condição.
[00108] O programa condicional da Figura 1, acima, pode ser reprogramado mediante a introdução de redundância usando a variável de estado conforme descrito acima, com r = Ei (w,o) sendo a representação do operando w, e r' é a representação do resultado w', de modo que r' = Ei+1(w',o'), para alguns valores de o e o'. A saída da unidade de derivação 103 pode ser resumida conforme exposto a seguir:
[00109] if b
[00110] then r' : = E i+i( f (w), g (o));
[00111] else r' := E i+1( g (w), f (o)).
[00112] Cada uma das operações Ei+1(f(w), g(o)) e Ei+1(g(w), f(o)) pode ser implementada sob a forma de uma tabela de consulta. Entretanto, para evitar a execução da declaração “if” e da correspondente operação de salto condicional dentro da unidade de derivação 103, é possível implementar a unidade de derivação 103 por meio de uma tabela de consulta que mapeia combinações de b e da representação r diretamente para valores correspondentes de r'. No presente documento, b pode ser uma variável booleana criptografada. Além disso, b pode ser substituída por uma ou mais variáveis de entrada, sendo que a condição b é uma função daquelas variáveis. Nesse caso, combinações dessas variáveis e da representação r podem ser mapeadas por uma tabela de consulta para valores correspondentes de r'. Nesse caso, a função definindo a condição b pode ser codificada juntamente com f e g na tabela de consulta. Em vez de uma tabela de consulta, pode ser usada uma rede de tabelas de consulta. As maneiras de implementar uma função como uma rede de tabelas de consulta são conhecidas na técnica por si só.
[00113] Conforme pode ser visto a partir do exposto acima, ambas as operações f e g têm uma influência sobre a representação r' independentemente do resultado da condicional (“if b”). Portanto, tanto f como g contribuem para a “entropia” de r', tornando difícil extrair informações dessas operações condicionais.
[00114] A Figura 3 ilustra um exemplo de implementação da unidade de derivação 103. Nesta implementação específica, a declaração “if” (ou a operação de salto condicional) é substituída por duas operações de troca 305 e 306. Tal operação de troca pode ser implementada, por exemplo, sob a forma de uma tabela de consulta. As operações descritas em cada uma das respectivas linhas dentre as seguintes três linhas podem ser implementadas, por exemplo, por meio de uma respectiva tabela de consulta.
[00115] Entrada: b e r, sendo que r = Ei (w, o) .
[00116] linha 1: if b then r' : = Ei+1(w, o) else r' : = Ei+1(o,w) fi
[00117] linha 2: r" := E i+2( fi(p), g i(q)).
[00118] linha 3: if b then r": = Ei+3(u,v) else r": = Ei+3(v,u) fi
[00119] Saída: r", sendo que r"=Ei+3(fi(w), gi (o)) ou r" = Ei+3 (fi (o), gi (w))
[00120] A linha 1 do fragmento de código acima explica a funcionalidade da operação de troca 305, que troca condicionalmente as partes de valor (w) e estado (o) da representação r = Ei (w,o), com base na condição b (número 104). A linha 2 do fragmento de código acima explica como as funções f e g são aplicadas à representação r' no bloco 307. A linha 3 explica a funcionalidade da operação de troca 306, que novamente troca condicionalmente as partes de valor (w) e estado (o) da representação r = Ei(w,o), com base na condição b (número 104).
[00121] Note-se que, após a linha 1, r' pode ser ou Ei+1(w,o) ou Ei+1(o,w), dependendo de b. Na linha 2, os símbolos p e q são definidos de modo que r' = Ei+1(p,q). Na linha 2, a função f é efetivamente aplicada a w caso b seja verdadeiro. Entretanto, se b não for verdadeiro, a função g é aplicada eficazmente a w, mas devido à operação de troca anterior da linha 1, w se tornou parte do ‘estado’ ou da porção ‘o’ da representação r'. Portanto, uma operação de troca adicional é fornecida na linha 3 para intercâmbio das porções ‘w’ e ‘o’ de r'. Na linha 3, os símbolos u e v são definidos de modo que r" = Ei+2(u,v) . Ou seja, u = fi (p) e v = gi(q). Na linha 3, se b não for verdadeiro, o valor desejado, que foi capturado na porção de ‘estado’ ou ‘o’ da representação r", é movido para a porção ‘w’ da representação r".
[00122] Cada uma das linhas 1 e 3 denota uma função de troca. Tal função de troca pode ser implementada como uma tabela de consulta, sendo que o valor correto é consultado com base no valor de b e na representação r (ou r", respectivamente) . É possível usar a mesma tabela de consulta tanto para a linha 1 como para a linha 3, mediante a seleção de Ei, Ei+1, Ei+2, e Ei+3 de modo que Ei = Ei+2 e Ei+1 = Ei+3. Também é possível codificar o resultado das linhas de 1 a 3 em uma única tabela de consulta que mapeia diretamente os valores de r e b para os valores correspondentes de r'”.
[00123] Com referência à Figura 2, a unidade de derivação 103 que executa uma computação oculta correspondente a esse fragmento de código pode ser configurada também para determinar a saída, conforme exposto a seguir:
[00124] Entrada: condição b e representação r, sendo que r = Ei(w, o).
[00125] if b
[00126] then r' : = E i+1( f (w), g (h( w, o)));
[00127] else r' : = E i+1( g (w), f (h (w, o))).
[00128] Aqui, h é um mapeamento de W x ∑ para W. Nenhuma operação de troca é usada nesse caso. Além disso, essa implementação é adequada para casos onde W Φ ∑, ou quando a cardinalidade de W difere da cardinalidade de ∑. É possível implementar ambas as ramificações da cláusula “if” sob a forma de uma tabela de consulta, e aplicar uma das tabelas de consulta dependendo da condição b. As funções f e g influenciarão o resultado r' independentemente da condição b. Alternativamente, pode ser implementada uma tabela de consulta que mapeia tuplas de b (ou variáveis que determinam b) e r sobre representações r' correspondentes.
[00129] Um caso especial é aquele onde não há ramificação else na versão não oculta do programa, isto é, considere-se um programa
[00130] if b then w' : = f(w) end.
[00131] Nesse caso, a função g(w) dos exemplos anteriores é igual à identidade. Ou seja, a unidade determinadora 103 é configurada para determinar a representação E'(w', o') de modo que, com base na condição, ou:
[00132] w' = f (w) e o' = o (quando a condição é verdadeira), ou
[00133] w' = w e o' = f(h(w,o)) (quando a condição é falsa).
[00134] Isso não representa um risco de segurança em si, já que há sempre algum desenvolvimento e o espalhamento entrópico é mantido mediante aplicação da função f ou a w ou ao estado o do domínio criptografado. Entretanto, essa situação pode ser adicionalmente otimizada pelo balanceamento de ambas as ramificações mediante a inserção de operações simuladas (“dummy”) para as variáveis que não são afetadas. Considere-se uma operação “Balance” (balanceamento), cujo propósito é ocultar adicionalmente o programa mediante o balanceamento de qualquer declaração “if”, onde diferentes variáveis podem ser afetadas na dependência de uma condição.
[00135] Balance(if b then Assgn1 else Assgn2 fi;)
[00136] if b then Balance(Assgn1,Assgn2) else Balance(Assgn2,Assgn1) fi;
[00137] sendo que, por exemplo, Balance(x:= x+1, y:= f (5)) significa x: = x +1; Dummy(y) . No presente documento, Dummy(y) pode representar qualquer operação em uma variável que não altera essa variável. Por exemplo, Dummy(y) pode significar qualquer um dentre: y: = y * 1, y: = y+0, y: = 5*y/2+3. Outras operações simuladas ficarão evidentes ao versado na técnica mediante a leitura da presente revelação.
[00138] Em outras palavras, um segmento de código condicional compreendendo uma pluralidade de ramificações, sendo que cada ramificação é condicionalmente executada dependendo de uma condição, pode ser ‘balanceado’ mediante as seguintes etapas:
[00139] • determinar uma variável que é alterada em ao menos uma ramificação das ramificações condicionais, mas não em ao menos uma outra ramificação das ramificações condicionais;
[00140] • criar uma operação simulada para aquela variável determinada;
[00141] • incluir a operação simulada na ao menos uma outra ramificação das ramificações condicionais.
[00142] As três etapas acima podem ser repetidas para cada variável envolvida nas ramificações condicionais.
[00143] A Figura 4 ilustra um método para executar condicionalmente uma operação. Na etapa 401, um valor w, sendo que w é um elemento de um conjunto W, é representado por meio de uma representação r, sendo que r = E(w, o), e r é um elemento de um conjunto de representações Q(w) = {E(w, s) |s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico de W x ∑ para um conjunto predeterminado. Essa representação r poderia ser recebida, por exemplo. Alternativamente, a representação pode ser gerada a partir de um valor de entrada w mediante a determinação de uma variável de estado o como um número aleatório e a computação, ou consulta, de E(w,o).
[00144] Na etapa 402, é determinada uma representação r' de um valor w', sendo que w' é um elemento do conjunto W, sendo que r' é um elemento de um conjunto de representações Q ' (w') = {E ' (w', s)| s e ∑}, sendo que r' = E'(w',o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado. Por exemplo, o valor de r' é consultado em uma tabela de consulta com base em uma ou mais variáveis de entrada que determinam a condição b e a representação r. Opcionalmente, é realizada uma sequência de pesquisas em tabela, conforme anteriormente descrito neste documento, envolvendo uma operação de troca, uma operação de função e uma outra operação de troca. As tabelas são projetadas de tal modo que, dependendo da condição b, ou w' é associado a f (w) ou o' é associado a f (h(w,o)) . No presente documento, f é um mapeamento definido em W, e h é um mapeamento de W x ∑ para W.
[00145] Em um exemplo específico, o método supracitado aplica f à porção ‘w’ da representação criptografada r = E(w,o), de modo que r' = E'(f(w),o) com base na condição, por exemplo se a condição for verdadeira. Caso contrário, f é aplicado à porção ‘o’ de r = E(w, o), de modo que r' = E ' (w, f (h (w, o))), por exemplo se a condição for falsa. Variantes adicionais do método podem ser fornecidas, conforme explicado acima com referência às Figuras de 1 a 3. Por exemplo, variantes com uma ramificação ‘else’ podem ser feitas de modo que, com base na condição, ou r' = E'(f(w),g(o)) ou r' = E'(g(w),f(o)).
[00146] A Figura 5 ilustra um sistema para criação de código de máquina para executar condicionalmente uma operação. O sistema compreende uma unidade identificadora 501 para identificar uma condição e uma operação condicional f destinada a ser executada em uma variável w de modo que, se a condição for válida, uma variável w' se destina a ser computada de modo que w' = f(w), sendo que w' é um elemento do conjunto W, e sendo que f é um mapeamento definido em W. Por exemplo, a unidade identificadora 501 pode ser conectada a um módulo analisador de um compilador (não mostrado), que extrai expressões de um programa de computador de modo a identificar a condição e a operação condicional.
[00147] A unidade identificadora 501 pode fornecer as informações referentes à condição identificada e à operação condicional a uma primeira unidade geradora 502 que gera código de máquina. O código de máquina gerado, quando executado, representa a variável w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w,o) e r é um elemento de um conjunto de representações Q(w) = {E(w, s)| s e ∑}, sendo que o é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado. Por exemplo, o código de máquina pode gerar a representação r a partir do real valor de entrada w e um número aleatório o. Alternativamente, o código de máquina gerado pela primeira unidade geradora 502 pode, quando executado, fazer referência a um local de memória no qual a representação está armazenada, ou receber a representação r de outro componente de software ou dispositivo de entrada.
[00148] O sistema compreende adicionalmente uma segunda unidade geradora 503. A segunda unidade geradora 503 gera código de máquina para determinar uma representação r' do valor w', com base na representação r e uma entrada referente a uma condição, sendo que r' é um elemento de um conjunto de representações Q'(w') = {E'(w',s)|s e ∑}, sendo que r' = E'(w',o'), sendo que o' é uma variável de estado que é um elemento do conjunto ∑ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado. Se a condição for válida, w' = f(w), e se a condição não for válida, o' = f(h(w, o)), sendo que h é um mapeamento de W x ∑ para W. A unidade geradora 503 pode compreender um gerador de tabelas (não mostrado) que gera uma ou mais das tabelas de consulta, conforme descrito acima, as quais podem ser usadas para implementar a função. O sistema pode ser estendido para gerar o código de máquina necessário para executar os cálculos ou consultas a tabelas, conforme descrito acima.
[00149] A Figura 6 ilustra uma modalidade adicional do sistema destinado a gerar código de máquina para executar condicionalmente uma operação. Os itens que são similares aos da Figura 5 receberam os mesmos números de referência e não precisam ser novamente discutidos com detalhes. O sistema compreende uma unidade conversora 601 para converter uma operação condicional aninhada envolvendo uma pluralidade de condições em uma sequência de operações condicionais não aninhadas. Especificamente, a sequência de operações condicionais não aninhadas com condições correspondentes é equivalente às operações condicionais aninhadas, no sentido de que o valor de saída é o mesmo. Adicionalmente, as operações condicionais não aninhadas com condições correspondentes podem ser processadas pela unidade identificadora 501, e as unidades geradoras de código 502 e 503.
[00150] A Figura 7 ilustra um exemplo de método para converter uma operação condicional aninhada envolvendo uma pluralidade de condições em uma sequência de operações condicionais não aninhadas. A unidade conversora 601 da Figura 6 pode ser configurada para executar o método ilustrado na Figura 7.
[00151] Na etapa 701, as respectivas expressões das respectivas ramificações condicionais da operação condicional aninhada são convertidas em termos de uma expressão auxiliar. Essas respectivas expressões são associadas a valores alternativos a serem atribuídos a uma variável específica, dependendo da condição. Ou seja, as expressões estão destinadas a serem atribuídas à mesma variável do código gerado, mas as condições determinam qual expressão será finalmente atribuída a uma variável. Na etapa 702, se for determinado que a etapa 701 precisa ser repetida, o fluxo retorna à etapa 701, de modo que é gerada uma pluralidade de expressões auxiliares nas quais os termos são combinados de diferentes maneiras. Se na etapa 702 for determinado que foram geradas suficientes expressões auxiliares, de modo que cada operação condicional seja equivalente a uma combinação específica dos termos auxiliares, o método prossegue a partir da etapa 703. Na etapa 703 é gerado código para avaliar as expressões auxiliares e armazenar seus resultados. Essa etapa pode envolver a geração de código para avaliar uma combinação de ao menos uma dentre a pluralidade de condições. Em seguida, na etapa 704, é gerado código para combinar os resultados das expressões auxiliares em dependência de uma condição combinada, sendo que a condição combinada é uma combinação da pluralidade de condições, de modo que se cancelem os termos correspondentes a ramificações que não sejam relevantes em vista da condição.
[00152] Considere-se novamente o segmento de código condicional “if b then F else G fi”. As ramificações condicionais F e G de tal declaração podem compreender múltiplas expressões, por exemplo uma sequência de operações denotadas, por exemplo, como “F1; F2”, conter “loops”, recursão ou um segmento de código condicional adicional, como uma declaração “if” adicional. Essa última situação apresenta uma seleção booleana aninhada protegida.
[00153] Define-se o programa P como:
Figure img0005
[00154] Agora, há quatro alternativas (F, G, H e J), das quais apenas uma deverá ser executada. Quando as técnicas acima descritas são aplicadas a P1 e P2, a ramificação principal que depende de b1 ainda não tem necessariamente cobertura total pela técnica de ocultação.
[00155] Um modo de solucionar isso consiste em substituir declarações “if” aninhadas por uma sequência de declarações “if” não aninhadas, e fazê-lo de modo que as expressões de cada ramificação (F, G, H, J) sejam todas avaliadas no processo de execução dessa sequência de declarações “if” não aninhadas.
[00156] Para transformar dessa maneira um programa, as expressões podem ser primeiro balanceadas mediante a inserção de operações simuladas.
[00157] Um método sistemático pode ser aplicado para achatar o programa, de modo que já não contenha cláusulas “if” aninhadas.
[00158] Conforme foi visto antes, nosso método funciona melhor criptograficamente se o programa for entropicamente totalmente balanceado, especialmente o par de ramificações de uma cláusula “if”. Caso uma ramificação contenha tanto atribuições (incondicionais) como uma ou mais cláusulas “if” aninhadas, pode-se “achatá-las” mediante a distribuição de uma cópia dessas atribuições em cada ramificação da cláusula “if”, conforme exposto a seguir:
[00159] Achatar(if b then F else G f i; x: = x+1) if b then F; x: = x+1 else G; x: = x+1 fi;
[00160] Achatar(x: = x+1; if b then F else G fi) if b then x: = x+1; F else x: = x+1; G fi;
[00161] Considere-se a seguinte cláusula “if” aninhada que é, de preferência, balanceada em relação a uma variável x:
Figure img0006
[00162] Aqui, exp0, exp1, exp2, e exp3 são expressões que dependem de x.
[00163] Introduzindo-se p:= expi + expi+1 e q:= expi − expi+1 como variáveis auxiliares, esse programa pode ser transformado em:
Figure img0007
[00164] Como as continuações após as duas cláusulas “if” de segundo nível agora se tornaram idênticas, o programa pode ser ‘achatado’ em:
Figure img0008
Figure img0009
[00165] ou, usando uma variante multiplicativa:
Figure img0010
[00166] As duas declarações “if” resultantes podem ser implementadas mediante o uso das técnicas referentes a representações criptografadas r = E(w,o)), acima. Por exemplo, para a primeira declaração “if” do programa 1 acima, uma representação r pode ser usada para representar a entrada variável x, e as representações r1 e r2 podem ser usadas para representar p e q. Uma representação adicional pode ser usada para representar a saída x da segunda declaração “if” do Programa 1.
[00167] Quando declarações “if” estão aninhadas em um nível mais profundo, então técnicas similares podem ser aplicadas para convertê-las em uma série de declarações “if” sequenciais. Por exemplo, considere-se o exemplo de programa a seguir, no qual declarações “if” são duplamente aninhadas:
Figure img0011
Figure img0012
[00168] Esse exemplo de programa pode ser convertido em uma série de declarações “if” não aninhadas. pode-se adotar uma abordagem em duas etapas. similar ao caso de declarações “if” com aninhamento as continuações a partir das cláusulas “if” de terceiro nível podem ser unificadas mediante a introdução de variáveis auxiliares p e q, conforme exposto a seguir: p:= expi + expi+1, e q:= expi - expi+1. Isso é ilustrado com mais detalhes no seguinte código:
Figure img0013
Figure img0014
[00169] Esse programa pode ser achatado para se obter o seguinte código sem quaisquer cláusulas “if” aninhadas:
Figure img0015
Figure img0016
[00170] O procedimento de conversão supracitado para converter um programa com cláusulas “if” com aninhamento duplo em um programa com cláusulas “if” não aninhadas sequenciais pode ser aplicado a qualquer programa que tenha o formato acima, para quaisquer expressões de exp0 a exp7.
[00171] A Figura 8 ilustra um método para criação de código de computador para executar condicionalmente uma operação. A etapa 801 envolve identificar uma condição e uma operação condicional ƒ destinada a ser executada em uma variável w de modo que, se a condição for válida, uma variável w' é computada de modo que w' = ƒ(w), sendo que w' é um elemento do conjunto W, e sendo que ƒ é um mapeamento definido em W. A etapa 802 envolve gerar um primeiro código de computador, sendo que o primeiro código de computador é configurado para, quando executado, representar uma variável w, sendo que w é um elemento de um conjunto W, por meio de uma representação r, sendo que r = E(w,σ) e r é um elemento de um conjunto de representações Ω(w) = {E(w,s)|s ϵ Σ}, sendo que σ é uma variável de estado que é um elemento de um conjunto Σ e que fornece uma redundância à representação r de w, e E é um mapeamento criptográfico um-para-um de W × Σ para um conjunto predeterminado. A etapa 803 envolve gerar um segundo código de computador, sendo que o segundo código de computador é configurado para, quando executado, determinar uma representação r' do valor w' com base em uma entrada referente à condição, sendo que r' é um elemento de um conjunto de representações Ω'(w') = {E'(w',s)|s ϵ Σ}, sendo que r' = E'(w',σ'), sendo que σ' é uma variável de estado que é um elemento do conjunto Σ e que fornece uma redundância à representação r' de w', sendo que E' é um mapeamento criptográfico um-para-um de W × Σ para um conjunto predeterminado; e sendo que, se a condição for válida de acordo com a entrada, w' = ƒ(w), e se a condição não for válida de acordo com a entrada, σ' = ƒ(h(w,σ)), sendo que h é um mapeamento de W × Σ para W.
[00172] A remoção de saltos em um programa pode ser usada para impedir a análise do fluxo de controle ou dos valores envolvidos. Computar as computações feitas em todas as ramificações de uma declaração “if”, mesmo as ramificações que não sejam relevantes em vista da condição, e combinar os resultados daquelas computações em um elemento de dados, pode ajudar a alcançar esse objetivo.
[00173] Um sistema de máquinas baseadas em tabelas, no qual os saltos são suprimidos, pode ser criado para remover alterações no fluxo de controle de um programa, sendo que a codificação sob a forma de E(w,o) no caso de uma seleção booleana protegida se desenvolve ao longo da ramificação não tomada por no máximo o e ao longo da ramificação tomada por no mínimo w.
[00174] A Figura 9 ilustra um sistema para ocultar uma alteração a um conjunto de variáveis V = {v1, v2, ..., vn} de um programa. O sistema compreende um meio de representação de valor 902 para representar um valor wi de uma variável vi das variáveis v1, v2, ..., vn, sendo que w é um elemento de um conjunto W, por meio de uma representação ri, sendo que n = E(wi, OÍ), e ri é um elemento de um conjunto de representações Q( wi) = {E( wi, s )| s e ∑}, sendo que OÍ é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado. Esse meio de representação de valor 902 pode ser implementado com o uso de técnicas reveladas anteriormente neste documento. O meio de representação de valor 902 pode ser configurado para representar todas as variáveis v1, v2, ..., vn por meio das respectivas representações w1, W2, ..., wn da maneira especificada. Os valores de O1, 02, ..., On podem ser selecionados aleatoriamente, por exemplo. O meio de representação de valor 902 pode ser configurado para computar as representações ri com base nos valores subjacentes wi. O meio de representação de valor 902 pode também ser configurado para receber as representações ri de um outro dispositivo ou de um outro componente do sistema. n é um número inteiro positivo. Ou seja, em geral o conjunto de variáveis V contém ao menos uma variável.
[00175] O sistema pode compreender adicionalmente um meio de representação de ação 903 para representar uma ação sobre valores de variáveis em um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', para obter representações atualizadas r'i = E'( w'i, O'Í), para i = 1,2, ..., n, sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado. E ' pode ser igual a E. Alternativamente, E' pode ser um mapeamento criptográfico que é diferente de E. Dessa forma, é possível alterar o mapeamento criptográfico quando se altera a representação.
[00176] Adicionalmente, o meio de representação de ação pode ser configurado para executar a ação sobre V' e a ação sobre V\V'. Alternativamente, o meio de representação de ação pode ser configurado para meramente representar essas ações mediante a geração de código de programa que, quando executado, executa as ações. Nesse último caso, o meio de representação de ação 903 pode ser configurado para identificar (por exemplo por meio de um analisador) o código de programa que define a ação sobre os valores das variáveis no subconjunto V', e transformar aquele código de programa em um código de programa que define a ação sobre V' e a ação sobre V\V'.
[00177] A ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado w'j da variável vj, e a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de acordo com um valor alterado o'k da variável de estado ok. Em particular, a representação rk de cada variável vk em V\V' é alterada para uma representação que representa o mesmo valor de wk. A representação rj de cada variável vj no conjunto de variáveis V' pode ser alterada de acordo com um valor alterado w'j da variável vj, mantendo o mesmo valor de oj (ou, opcionalmente, um valor diferente de oj).
[00178] A ação pode compreender uma declaração “if”, que define uma ação sobre um conjunto de variáveis V1 se uma condição for válida, e uma ação sobre um conjunto de variáveis V2 se a condição não for válida, sendo que tanto V1 como V2 são subconjuntos de V. Em outras palavras, o conjunto de variáveis V compreende a união de V1 e V2, de modo que V1 U V2 c V. O meio de representação de ação 903 pode ser configurado para usar o conjunto de variáveis V1 como o conjunto de variáveis V' se a condição for válida. Isso significa que o meio de representação de ação 903 executa a ação sobre V1 mediante a alteração da representação rj de cada variável vj no conjunto de variáveis V1 de acordo com um valor alterado w'j da variável vj, e executa a ação sobre V\V1 mediante a alteração da representação rk de cada variável vk em V\V1 de acordo com um valor alterado o'k da variável de estado ok.
[00179] Adicionalmente, o meio de representação de ação 903 pode ser configurado para usar o conjunto de variáveis V2 como o conjunto de variáveis V' se a condição não for válida. Isso significa que o meio de representação de ação 903 executa a ação sobre V2 mediante a alteração da representação rj de cada variável vj no conjunto de variáveis V2 de acordo com um valor alterado w'j da variável vj , e executa a ação sobre V\V2 mediante a alteração da representação rk de cada variável vk em V\V2 de acordo com um valor alterado o'k da variável de estado ok.
[00180] Algumas das variáveis podem ser alteradas por um segmento de código condicional, seja a condição válida ou não. Nesse caso, o conjunto de variáveis V1 e o conjunto de variáveis V2 têm uma intersecção V3, sendo que V3 = V1 n V2. A ação altera o valor de cada variável vm do conjunto V3 de acordo com uma função fm se a condição for válida, e de acordo com uma função gm se a condição não for válida. O meio de representação de ação é configurado para representar essas ações por meio de uma ação que determina a representação r'm = E' (w'm, o'm) de cada variável alterada vm do conjunto V3 de modo que, se a condição for válida, w'm = fm (wm) e o'k = gm (hm (wm, Om)), mas se a condição não for válida, w'm = gm (wm) e o'k = fm (hm (wm, Om)) . No presente documento, hm é um mapeamento de W x ∑ para W.
[00181] O meio de representação de ação 903 pode ser implementado por meio de operações de consulta. Para essa finalidade, uma ou mais tabelas de consulta podem ser preparadas e armazenadas em uma memória do sistema. A validade da condição não precisa ser explicitamente determinada pelo sistema. Ao invés disso, pode ser recebida uma entrada de valores que determinam a condição. As uma ou mais tabelas de consulta podem mapear esses valores de entrada, juntamente com as representações, para as representações alteradas correspondentes. O meio de representação de ação 903 pode, dessa forma, ser configurado para causar uma consulta das representações r'i correspondente a uma entrada referente à condição e às representações ri usando ao menos uma tabela de consulta que mapeia uma tupla da entrada referente à condição e às representações ri para as representações ri correspondentes.
[00182] O meio de representação de ação 903 pode também ser implementado por meio de uma ou mais operações de troca que foram descritas acima com referência à Figura 3. O meio de representação de ação 903 pode ser configurado para identificar uma ou mais variáveis de entrada que determinam a condição b, e pode conter uma primeira unidade de troca 305, uma unidade de avaliação de função 307, e/ou uma segunda unidade de troca 306, conforme descrito acima, para cada uma das variáveis no conjunto de variáveis V = {v1, v2, ..., Vn} .
[00183] O meio de representação de valor 902 e o meio de representação de ação 903, descritos acima, podem ser operacionalmente acoplados à unidade conversora 601 descrita acima. A unidade conversora 601 representa uma operação condicional aninhada que envolve uma primeira pluralidade de condições aninhadas por meio de uma sequência funcionalmente equivalente de operações condicionais não aninhadas envolvendo uma segunda pluralidade de condições. Por exemplo, a sequência de operações condicionais não aninhadas pode ser gerada pela unidade conversora 601 mediante o processamento da operação condicional aninhada. Cada uma das operações condicionais não aninhadas resultantes pode ser individualmente representada pelo meio de representação de ação 903 da maneira apresentada.
[00184] A Figura 10 ilustra um método para ocultar uma alteração a um conjunto de variáveis V = {v1, v2, ., vn} de um programa. Na etapa 1001, um valor wi de uma variável vi das variáveis v1, v2, ., vn, sendo que w é um elemento de um conjunto W, é representado por uma representação ri, sendo que ri = E( wi, OÍ ), e ri é um elemento de um conjunto de representações Q( wi) = {E( wi, s) | s e ∑}, sendo que oi é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um-para-um de Wx∑ para um conjunto predeterminado. Na etapa 1002, uma ação sobre valores de um subconjunto V' de V é representada por uma ação sobre V' e uma ação sobre V\V', para obter as representações atualizadas r'i = E'( w'i, o'i), para i = 1,2,..., n, sendo que E' é um mapeamento criptográfico um-para-um de Wx∑ para um conjunto predeterminado, e sendo que a ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado wj da variável vj, e a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de acordo com um valor alterado o'k de Ok.
[00185] Deve-se entender que a invenção se aplica também a programas de computador, particularmente a programas de computador em uma portadora, adaptados para colocar a invenção em prática. Uma modalidade relacionada a um produto de programa de computador compreende instruções executáveis por computador que correspondem a cada uma das etapas de processamento de pelo menos um dos métodos apresentados na presente invenção. Essas instruções podem ser subdivididas em sub-rotinas e/ou armazenadas em um ou mais arquivos que podem estar estática ou dinamicamente ligados. Uma outra modalidade relacionada a um produto de programa de computador compreende instruções executáveis por computador correspondentes a cada unidade de ao menos um dentre os sistemas e/ou produtos aqui apresentados. Essas instruções podem ser subdivididas em sub-rotinas e/ou armazenadas em um ou mais arquivos que podem estar estática ou dinamicamente ligados.
[00186] A portadora de um programa de computador pode ser uma entidade ou um dispositivo capaz de portar o programa. Por exemplo, a portadora pode incluir uma mídia de armazenamento, como uma memória de somente leitura (ROM), por exemplo um CD-ROM ou uma memória ROM baseada em semicondutor, ou uma mídia de gravação magnética. Além disso, a portadora pode ser uma portadora transmissível, como um sinal óptico ou elétrico, que pode ser transportado através de cabo óptico ou elétrico, ou por rádio ou outros meios. Quando o programa é incorporado nesse sinal, a portadora pode ser constituída por um cabo ou outro dispositivo ou meio. Alternativamente, a portadora pode ser um circuito integrado no qual o programa está incorporado, sendo que o circuito integrado é adaptado para executar o, ou para ser usado na execução do, método relevante.
[00187] Deve-se observar que as modalidades mencionadas ilustram a invenção ao invés de limitá-la, e que os versados na técnica serão capazes de projetar muitas modalidades alternativas, sem se afastarem do escopo das reivindicações anexas. Nas reivindicações, quaisquer sinais de referência colocados entre parênteses não devem ser interpretados como limitadores da reivindicação. O uso do verbo “compreender” e suas conjugações não exclui a presença de elementos ou etapas além daquelas mencionadas em uma reivindicação. O artigo indefinido “um” ou “uma” que precede um elemento não exclui a presença de uma pluralidade de tais elementos. A invenção pode ser implementada por meio de hardware que compreende vários elementos distintos, e por meio de um computador programado adequadamente. Na reivindicação de dispositivo que enumera vários meios, vários desses meios podem ser incorporados por um único item de hardware. O simples fato de certas medidas serem mencionadas em reivindicações dependentes mutuamente diferentes não indica que uma combinação dessas medidas não possa ser usada com vantagem.

Claims (13)

1. SISTEMA PARA OCULTAR UMA ALTERAÇÃO, a um conjunto de variáveis V = {v 1, v2, ..., vn} de um programa, sendo o sistema caracterizado por compreender: um meio de representação de valor (902) para representar um valor wi de uma variável vi das variáveis v1, v2, ., vn, sendo que w é um elemento de um conjunto W, por meio de uma representação ri, sendo que ri = E( wi, Oi), e ri é um elemento de um conjunto de representações Q( wi) = {E(wi, s)| s e ∑}, sendo que Oi é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um- para-um de W x ∑ para um conjunto predeterminado; e um meio de representação de ação (903) para representar uma ação sobre valores de variáveis em um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', para obter representações atualizadas r'i = E'(w'i,Oi), para i = 1,2, ., n, sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, e sendo que a ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado w'j da variável vj, e a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de acordo com um valor alterado O'k de variável de estado Ok.
2. SISTEMA, de acordo com a reivindicação 1, caracterizado pela ação sobre os valores das variáveis no subconjunto V' compreender uma declaração “if”, que define uma ação sobre um conjunto de variáveis V1 se uma condição for válida, e uma ação sobre um conjunto de variáveis V2 se a condição não for válida, sendo que o conjunto de variáveis V1 é um subconjunto do conjunto de variáveis V e o conjunto de variáveis V2 é também um subconjunto do conjunto de variáveis V, e o meio de representação de ação (903) é configurado para usar o conjunto de variáveis V1 como o conjunto de variáveis V' se a condição for válida, e para usar o conjunto de variáveis V2 como o conjunto de variáveis V' se a condição não for válida.
3. SISTEMA, de acordo com a reivindicação 2, caracterizado pelo conjunto de variáveis V1 e o conjunto de variáveis V2 terem uma intersecção V3 de variáveis que são afetadas tanto pela ação sobre o conjunto de variáveis V1 como pela ação sobre o conjunto de variáveis V2, de modo que V3 = V1 n V2, sendo que a ação altera cada variável vm do conjunto V3 de acordo com uma função fm se a condição for válida, e de acordo com uma função gm se a condição não for válida, sendo que o meio de representação de ação é configurado para determinar a representação r'm = E ' (w'm, o'm) de cada variável vm do conjunto V3 de modo que, com base na validade ou não da condição, ou: W'm = fm ( Wm) e O‘m = gm (hm ( Wm, Om)), ou W‘m = gm ( Wm) e O‘ m = f m ( hm ( Wm, Om)), sendo que hm é um mapeamento de W x ∑ para W.
4. SISTEMA, de acordo com a reivindicação 1, caracterizado pelo meio de representação de ação (903) ser configurado para causar uma consulta das representações r'i correspondente a uma entrada referente à condição e às representações ri usando ao menos uma tabela de consulta que mapeia uma tupla da entrada referente à condição e às representações ri para as representações r'i correspondentes.
5. SISTEMA, de acordo com a reivindicação 1, caracterizado por |∑| =| W|, e sendo que o meio de representação de ação (903) é configurado para identificar uma ou mais variáveis de entrada que determinam a condição b, e sendo que o meio de representação de ação (103) compreende uma primeira unidade de troca (305) para executar uma operação de troca oculta, com base em ao menos uma representação r, sendo que r = ri, de uma variável vi no conjunto V, e as uma ou mais variáveis de entrada, de modo que para p E W e q E W com r = E(p,q),
Figure img0017
sendo que E" é um mapeamento criptográfico um-para- um de W x ∑ para um conjunto predeterminado, sendo que E" é diferente de E, sendo que r" é uma representação, e/ou uma segunda unidade de troca (306) para executar uma operação de troca oculta, com base em uma representação rm e nas uma ou mais variáveis, de modo que para p E W e q E W com rm = Em (p,q),
Figure img0018
sendo que E" é um mapeamento criptográfico um-para- um de W x ∑ para um conjunto predeterminado, sendo que E" é diferente de E', e r' é a representação atualizada r'i.
6. SISTEMA, de acordo com a reivindicação 5, caracterizado pelo meio de representação de ação (103) compreender uma unidade de avaliação de função (307) para computar uma função de modo a obter a representação r" com base na representação r", de modo que para p e W e q e W com r " = E " (p,q), r "' = E" (f(p), g (q)), sendo que f é um mapeamento definido em W e g é um mapeamento definido em W.
7. SISTEMA, de acordo com a reivindicação 5 ou 6, caracterizado por E"' = E e E" = E '.
8. SISTEMA, de acordo com a reivindicação 3, caracterizado por hm (w, o) = o, para todos os valores de w e o_e ao menos um valor de m em {1,2,3, ..., n}.
9. SISTEMA, de acordo com a reivindicação 1, caracterizado pela ação sobre V' ser configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de modo que w'j = fj(wj) e o'j = oj, e sendo que a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de modo que w'k = wk e o'k = fk (hk(wk,ok)); sendo que fi, para i = 1,2, ..., n, é uma função definida sobre W e hk, para cada variável vk em V\V', é uma função mapeando elementos de W x ∑ para W.
10. SISTEMA, de acordo com a reivindicação 2 ou 3, caracterizado por compreender adicionalmente uma unidade conversora (601) para representar uma operação condicional aninhada que envolve uma primeira pluralidade de condições aninhadas por meio de uma sequência funcionalmente equivalente de operações condicionais não aninhadas envolvendo uma segunda pluralidade de condições.
11. SISTEMA, de acordo com a reivindicação 10, caracterizado pela unidade conversora (601) ser configurada para: combinar (701) as respectivas expressões das respectivas ramificações condicionais da operação condicional aninhada em termos de uma expressão auxiliar, sendo que as respectivas expressões estão associadas a valores alternativos a serem atribuídos a uma variável específica; repetir (702) a etapa para combinar as respectivas expressões das respectivas ramificações condicionais em termos de uma expressão auxiliar, de modo que seja gerada uma pluralidade de expressões auxiliares nas quais os termos são combinados de diferentes maneiras, gerar código (703) para avaliar as expressões auxiliares e armazenar seus resultados; e gerar código (704) para combinar os resultados das expressões auxiliares em dependência de uma condição combinada, sendo que a condição combinada é uma combinação da pluralidade de condições, de modo que se cancelem os termos correspondentes a ramificações que não sejam relevantes em vista da condição.
12. SISTEMA, de acordo com a reivindicação 10, caracterizado pelo meio de representação de ação (903) ser configurado para identificar ao menos uma operação condicional da sequência de operações condicionais não aninhadas e a correspondente condição da segunda pluralidade de condições, e sendo que o meio de representação de ação (903) é configurado para usar a operação condicional identificada como a ação e a condição identificada correspondente como a condição da declaração “if”.
13. MÉTODO PARA OCULTAR UMA ALTERAÇÃO, a um conjunto de variáveis V = {vi, V2, ..., vn} de um programa, sendo o método caracterizado por compreender as etapas de: representar (1001) um valor wi de uma variável vi das variáveis v1,v2, .,vn, sendo que w é um elemento de um conjunto W, por uma representação ri, sendo que ri = E( wi, OÍ ), e ri é um elemento de um conjunto de representações Q( wi) = {E( wi, s )| s e ∑}, sendo que OÍ é uma variável de estado que é um elemento de um conjunto ∑ e que fornece uma redundância à representação ri de wi, e E é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado; e representar (1002) uma ação sobre valores de um subconjunto V' de V por meio de uma ação sobre V' e uma ação sobre V\V', para obter representações atualizadas r'i = E'(w'i,o'i), para i = 1,2, ., n, sendo que E' é um mapeamento criptográfico um-para-um de W x ∑ para um conjunto predeterminado, e sendo que a ação sobre V' é configurada para alterar a representação rj de cada variável vj no conjunto de variáveis V' de acordo com um valor alterado w'j da variável vj, e a ação sobre V\V' é configurada para alterar a representação rk de cada variável vk em V\V' de acordo com um valor alterado o'k de ok.
BR112017013083-1A 2014-12-22 2015-12-08 Sistema para ocultar uma alteração e método para ocultar uma alteração BR112017013083B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP14199750.2 2014-12-22
EP14199750 2014-12-22
PCT/EP2015/078894 WO2016102180A1 (en) 2014-12-22 2015-12-08 Hiding of a program execution

Publications (2)

Publication Number Publication Date
BR112017013083A2 BR112017013083A2 (pt) 2018-01-02
BR112017013083B1 true BR112017013083B1 (pt) 2023-05-23

Family

ID=

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
CN104919750B (zh) 计算关于函数‑输入值的数据函数的计算设备和方法
Brenner et al. Secret program execution in the cloud applying homomorphic encryption
KR101597251B1 (ko) 소프트웨어 애플리케이션들의 화이트­박스 구현들을 생성하는 시스템 및 방법
CN104539432B (zh) 一种对文件进行签名的方法和装置
CN104380244B (zh) 存储用于计算函数的查找表的计算设备
JP7132926B2 (ja) コンパイルデバイス及びコンパイル方法
CN111512307B (zh) 编译设备和方法
US20190287427A1 (en) Device and method for performing obfuscated arithmetic
CN111819542A (zh) 编译设备和方法
CN104392154B (zh) 一种加密方法
JP2021530057A (ja) マスク関数を用いるコンパイラデバイス
Manikyam Program protection using software based hardware abstraction
CN110088728A (zh) 用于编码加法的计算设备
WO2015082212A1 (en) A computing device for iterative application of table networks
JP2020510935A (ja) プログラムコードのコンピュータ支援難読化方法
BR112017013083B1 (pt) Sistema para ocultar uma alteração e método para ocultar uma alteração
EP3238113B1 (en) Hiding of a program execution
CN104050399B (zh) 用户验证方法和装置以及盗版追踪方法和装置
NL2015955B1 (en) Calculating device and method.
Dunaev Complexity of a special deobfuscation problem
Wilhoite Code Obfuscation: methods and practicality within automation