Biblioteca de criptografia para Arduino


9

Estou usando um Arduino para ler um teclado e abrir um ataque elétrico na entrada do PIN do teclado. Para esse esboço, eu queria usar algum tipo de criptografia leve para armazenar os PINs no EEProm. Alguém conhece essa biblioteca? Ouvi dizer que pode ser possível usando o TwoFish.

Respostas:


12

Você não deseja criptografar senhas (PINs) - deseja hash- las. Quando alguém digita uma senha, você hash essa senha e compara o hash com o hash armazenado. A vantagem desse método (usado há mais de 30 anos) é que, mesmo que alguém se apossar da fonte e dos hashes, ele ainda não sabe dizer quais PINs correspondem aos hashes, desde que você escolha uma função de hash suficientemente forte .

Você não deseja implementar a criptografia por conta própria - deseja usar a biblioteca de outra pessoa, particularmente uma com uma implementação aberta que foi testada por uma grande comunidade. A criptografia é difícil, o teste é difícil, e a criptografia é muito difícil, então peça a alguém para fazer isso por você.

Você deve fazer o checkout da AVR Crypto Library , licenciada com GPLv3. Há também uma implementação do Skein for AVR .


11
Promovido - Um bom recurso, e isso deve ser definido como a resposta para a pergunta.
Lou

9

Esse link que Hristos postou, embora possivelmente útil, certamente não conta como "criptografia". É realmente apenas "ofuscação".

A criptografia adequada é notoriamente fácil de errar, mesmo para pessoas que conhecem matemática.

Em resposta à postagem original - quais são os métodos de ataque que permitiriam que alguém tivesse acesso aos PINs no EEProm? Certamente, se eles chegaram tão longe na sua eletrônica, podem simplesmente "cortar o fio vermelho" e abrir a porta?

Se você de alguma forma fazer ter um sistema onde os atacantes pode se apossar dos conteúdos EEProm sem já ter acesso suficiente para abrir sua porta, você provavelmente vai querer redesenhá-lo. Você pode olhar para funções de hash unidirecionais semelhantes ao hash de senha do Unix - dessa forma, o EEProm não precisa conter uma chave de descriptografia - o problema é que o espaço de pesquisa de PINs é muito pequeno - se eu puder fazer o download da versão em hash do PIN, posso testar rapidamente todos os 10.000 PINs possíveis, suspeito que qualquer laptop moderno execute todos eles em alguns segundos.


Concordo (e concordei acima), um hash unidirecional seria útil e, se você estiver programando o sistema, poderá fazer o pino pelo tempo que desejar, por exemplo, 8 dígitos fornece 100 000 000 combinações, o que deve demorar muito mais tempo.
Amos

1

O problema que vejo é que, se eles podem ver seus pinos, também podem ver seu programa que criptografa / verifica / descriptografa seus pinos. Além disso, se eles tiverem seu chip, eles não podem apenas alterar o programa para sempre obter um resultado positivo (ignorando efetivamente a verificação) de qualquer pino inserido.


1

Como você planeja decodificar os PINs criptografados para verificar se o usuário digitou um PIN válido? Você precisará armazenar a chave de descriptografia ... Nesse ponto, se o invasor puder ler seu eeprom, ele também poderá ler seu flash para encontrar a chave de criptografia. Basicamente, tornando toda a sua criptografia completamente inútil. Além disso, como as outras pessoas disseram, se ele já tem a capacidade de ler seu chip, ele pode simplesmente escrever um novo programa. Muito mais simples de abrir a porta, duvido que alguém se dê ao trabalho de tentar invadir seu chip.


1

Aqui está um método de inscrição simples em C que pode ser facilmente transportado para o Arduino. Essa parece ser a maneira mais fácil de criptografar dados com os recursos limitados do arduino.

-EDIT- Para manter a chave fora do seu programa, você pode transformar metade do PIN na chave. Isso significa que seu programa usa a metade da chave do PIN para descriptografar o 1/2 PIN criptografado armazenado no EEProm. Se a chave descriptografada do EEProm corresponder à parte do seu pino que não é a chave, a porta será destrancada. Isso funcionaria apenas em uma situação em que não é possível aos invasores arrombar a porta ou reprogramar o Arduino.


Mas se eles não tiverem acesso ao seu chip, você não precisará criptografar o pino.
Amos

1

Eu odeio não responder à pergunta enquanto faz outra, mas ...

Existe algum motivo para o seu dispositivo não ser inviolável? Eu vi interruptores de botão em orifícios de parafuso implementados 'no banco' para detectar o tipo de violação que você está preocupado. Então .. aí vem o garoto com uma microchave de butano que consegue obter seu chip sem desaparafusar nada (ou danificá-lo) .. de alguma forma, ele conhecia o design do seu sistema de prova de violação que (também, espero) inclui a detecção de alterações no luz ambiente e / ou som. Quando a tampa se abre, ambas se tornam bem diferentes .. dia ou noite.

Se for esse o caso, deve ser um sistema de duas partes em que as partes expostas se comunicam com algo em que a criptografia é mais facilmente implementada. Além disso, as somas de verificação (ajuda) representam a criança com a tocha.

Eu acho que você está pedindo uma chave de fenda para ser um martelo.


1

Esses comentários são realmente pontuais. Não há nada errado em tentar aprender sobre criptografia, mas esse não é realmente um bom projeto para aprender essas coisas. Você realmente quer um bom livro e um computador e, como diz @bigiain, a matemática é notoriamente fácil de errar.

Para uma melhor compreensão de como a criptografia funciona e o que você enfrenta, o Handbook of Applied Cryptography é excelente e gratuito:

Se você apenas deseja proteger seu projeto, esta é uma maneira ineficiente de fazê-lo. Se você estiver interessado em criptografia, comece com este livro e um computador.


Entendo criptografia, leio Bruce Schneier e sou programador há mais de vinte anos. Entendo que a ameaça real é apenas arrombar a porta e passar por qualquer tipo de controlador Arduino. Simplesmente não consigo instalá-lo com PINs de texto não criptografado no EEProm, se puder ser evitado. Fly

Existem vários métodos simples de ofuscação que seriam igualmente eficazes nessa função se você quiser evitar o armazenamento de PINs de texto não criptografado. Os respondentes acima estavam apenas tentando ajudá-lo a entender o que a criptografia faz e o que não faz. Aqui está uma biblioteca da AES: hoozi.com/Articles/AESEncryption.htm Eu também gostaria de dizer que só porque você programa há 20 anos, isso não significa que você "entende" a criptografia. É um campo totalmente diferente. Um mecânico de automóveis de 20 anos é uma pessoa qualificada, mas eu não esperaria que ele projetasse um barramento CAN do zero. Verifique sua atitude, por favor.
Lou

Oh Deus ... 20 anos de codificação e você acha que é possível criptografar dados de tempo de execução ????? Sair.
MickLH
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.