Os programadores de computador costumam recitar o mantra de que as instruções x86 são totalmente opacas: a Intel nos diz que estão fazendo alguma coisa, mas não há esperança de que alguém possa verificar o que está acontecendo; portanto, se a NSA lhes disser para backdoor seus RNGs, não podemos realmente faça qualquer coisa sobre isso.
Bem, acredito que programadores de computador não podem fazer nada sobre esse problema. Mas como um engenheiro elétrico o atacaria? Existem técnicas que um engenheiro elétrico poderia usar para verificar se um circuito realmente executa as operações descritas em suas especificações e nenhuma outra operação?
cpu
reverse-engineering
user14717
fonte
fonte
Respostas:
O melhor artigo que li sobre o assunto é "Trojan de hardware furtivo em nível de dopante" (Becker et al) de 2014.
O documento descreve como a alteração é feita, como é extremamente difícil detectar a inspeção do silício, técnicas para ocultá-lo do teste de produção e como pode ser feito para reduzir a segurança de uma criptografia de hardware RNG ou para vazar informações importantes através de um canal lateral do trilho de força de uma implementação do AES.
Canais laterais são um campo de interesse emergente. A Intel foi atormentada por problemas relacionados à execução especulativa que vazavam informações da memória que nem estavam sendo usadas pelo programa. Isso poderia ter sido uma falha de design deliberada? É quase impossível dizer.
fonte
Existem técnicas que um engenheiro elétrico poderia usar para verificar se um circuito realmente executa as operações descritas em suas especificações e nenhuma outra operação?
Em teoria, sim, acho que isso é possível. No entanto, para uma CPU complexa, será necessário muito tempo e dinheiro. Além disso, se você não conhecer e entender completamente o design, não poderá julgar se alguma atividade é "legítima" ou não.
Uma CPU é "apenas" um circuito digital complexo que consiste em muitas células lógicas.
É possível fazer engenharia reversa do chip e reconstruir o projeto observando as conexões de metal. Pode haver muitas dessas camadas de conexão, como até 8 camadas ou mais.
Você precisará de especialistas na área para reconhecer as células lógicas e, talvez, algum software possa descobrir como elas estão conectadas, para que você possa reconstruir a netlist.
Depois de ter a netlist, você "conhece" o design. Isso não significa que agora você também sabe como funciona!
Pode ser que uma determinada função ative 2 seções do design enquanto você acha que uma deve ser suficiente, para que você suspeite de alguma atividade suspeita. No entanto, o design faz alguns truques inteligentes que você não conhece para acelerar as operações.
Sem conhecer e entender o design, qualquer conclusão que você tire ainda pode estar errada. Somente os engenheiros que projetaram a CPU têm todas as informações de projeto e têm a melhor chance de descobrir ou adivinhar o que realmente acontece ou deveria acontecer em uma CPU.
fonte
Não há boas maneiras de encontrar portas traseiras, uma maneira de encontrar uma porta traseira de hardware seria testar combinações ou instruções não documentadas. Aqui está uma boa conversa sobre alguém que realmente faz isso e faz auditorias no hardware x86 . Isso pode ser feito sem quebrar o chip. Um problema com a intel (não tenho certeza sobre outros chips) é que, na verdade, ele possui um processador com o Linux sendo executado, então também há software sendo executado em alguns processadores e você não tem acesso a isso supostamente.
Existem maneiras de testar o uso do próprio hardware para testar a funcionalidade. Como o x86 possui uma parte não documentada de seu conjunto de instruções, seria incomum introduzir backdoors em instruções normais, porque isso apresentaria a possibilidade de erros (como se você tivesse um backdoor em uma instrução add ou mult), portanto, o primeiro lugar para procurar estaria nas instruções não documentadas.
Se você precisou testar a funcionalidade das instruções regulares, pode observar o tempo necessário para executar as instruções, observe a quantidade de energia necessária para executar as instruções para verificar se existem diferenças em relação ao que você esperaria.
fonte
A única maneira seria desmontar a camada de chip por camada e registrar todos os transistores com um microscópio eletrônico, inseri-lo em algum tipo de programa de simulação e depois vê-lo funcionar.
Este é essencialmente o problema da Caixa Preta, no qual você tenta reconstruir os internos a partir da medição de entradas e saídas. Uma vez que a complexidade dos internos, ou número de E / S, ultrapassa o trivial, ocorre uma explosão combinatória em que o número de possíveis estados internos se torna astronômico. Onde números como o Googol são divulgados .
fonte
Provar que a CPU não está fazendo algo furtivo é extraordinariamente difícil. O exemplo clássico é uma máquina de votação. Se houver um único pedaço que exija uma cópia do seu voto e depois o esclareça para algum ditador, pode ser vida ou morte para você em alguns lugares. E provar que não há nada disso entre os bilhões é bastante difícil.
Você pode pensar em isolar o chip fisicamente, por isso é prático verificar que não há conexões de fio impróprias para ele. E colocar outro chip, ou mais de um chip em série (de fontes diferentes) em sua conexão de rede que garante que ele se conecte apenas ao lugar certo. Depois, desligue e ligue novamente após o seu voto. E esperando que não haja bits não voláteis lá. Ou conexões sem fio sorrateiras. Mas você confiaria sua vida nisso?
fonte
A transmissão de todos os dados para a NSA exigirá acesso à rede, por isso será muito fácil identificar esse backdoor executando um sistema operacional com os serviços de rede desativados e verificando o tráfego nas interfaces de rede. Para um sistema operacional de código-fonte aberto, é possível executar com suporte total à rede e localizar conexões não autorizadas pelo IP de destino, que não corresponde a nenhum endereço que o sistema operacional possa acessar legitimamente.
Um backdoor baseado em RNG sem transmissão de dados terá utilidade muito limitada. A menos que o RNG da CPU seja a única fonte de entropia, as chances de que esse backdoor forneçam alguma vantagem ao invasor, embora não sejam óbvias ao mesmo tempo, são praticamente nulas . A menos que você insista que o bule de chá de Russel esteja lá fora, apesar de não haver boas razões para existir, você poderá aplicar o mesmo argumento às backdoors de RNG de hardware.
fonte
rdrand
ourdseed
como a Intel sugeriu: como a única fonte de entropia para uma semente PRNG. Linux (kernel) optou por não fazer isso para/dev/random
, mas glibc / libstdc ++ 's atualstd::random_device
faz uso apenasrdrand
se estiver disponível em tempo de execução em vez de abrir/dev/random
. Entre na chamada da biblioteca padrão com godboltstd::random_device
não é um RNG criptograficamente forte. O padrão C ++ permite implementá-lo com um PRNG, retornando efetivamente a mesma sequência todas as vezes , portanto é óbvio que ninguém deve usá-lo para criptografia.