Respostas:
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 .
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.
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.
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.
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.
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.
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.