LusoRobótica - Robótica em Português

Electrónica => Electrónica Geral => Tópico iniciado por: luisjustin em 03 de Junho de 2013, 00:18

Título: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 00:18
Olá a todos no forum, queria saber se existe algum jeito de eu mandar a Firmware(OS) para o cliente sem que ele tenha o código fonte.
Algum outro jeito não precisa nem ser usando o arduino IDE sim outro programa que se comunica direto com o Atmel algo assim.

Codigo Criptografada -> Interpretador ou Uploader -> Arduino
Título: Re: Arduino - Criptografia de Código
Enviado por: senso em 03 de Junho de 2013, 00:36
A maneira mais segura é se for um micro DIP num socket, é mandar outro micro já com o código gravado via ISP e com os fuses de modo a que não seja possivel ler de novo o código, se não, tens de lhe mandar o .hex que é facilmente convertido em assembly(se bem que assembly compilado não seja lá muito legivel...) e ele tem de usar avrdude para programar o micro que ele tem(isto se tiver bootloader)..
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 00:45
O que seria o micro DIP ? que as fotos que achei é de umas mine chaves isto ? Vamos dizer algum equipamento, acho que PS3 ou Xbox, como eles fazem a atualização ? eu sei que é via internet em PHP sou profissional.

Mas fugindo um pouco do assunto, queria saber como fazer os meus códigos ficarem dentro do SD, por exemplo o meu código é muito grande dai eu crio um código menor coloco dentro do Arduíno que ele interpreta o que está no SD existe possibilidades ?
Título: Re: Arduino - Criptografia de Código
Enviado por: metRo_ em 03 de Junho de 2013, 00:54
É possivel fazer o que queres mas duvido seriamente que compense mas vou explicar a minha ideia. Basicamente encriptas o código usando uma criptografia qualquer, por exemplo criptografia assimétrica. No firmware do microcontrolador vais ter que desenvolver um bootloader em que para alem de ler o que vem da porta serie e gravar na flash vai antes desencriptar.

Compilar=>Hex=>encriptar=>Hex encriptado
Hex encriptado=>bootloader=>desencriptar=>flash

Suponho que seja possivel fazer algo deste genero num bootloader. Os recursos de um arduino não devem ser muitos para implementar um metodo de criptografia muito complexo.
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 01:03
Sim, mas saindo do assunto de criptografia, eu tenho um projeto que é criar uma especia de um OS para meu Arduíno mas para isto queria que dentro do CHIP do popio Arduíno ficasse apenas o codigo para dar o boot no cartão SD existe isso tem algum exemplo ? Porque se tiver quer começar a criar um OS simples somente para controlar minha casa mas para isto eu escreveria um código normal de Arduíno dentro de um cartão SD.

Exemplo:

Boot(Arduino Ligando) -> Abri o SD lê o código -> Executa o código como se fosse dele ou melhor como se estivesse nele, porque não sei até quanto pode chegar pesar esse meu sistema..
Título: Re: Arduino - Criptografia de Código
Enviado por: tarquinio em 03 de Junho de 2013, 03:12
Não percebi bem o objectivo do que tu queres fazer... A idéia da criptografia é que as pessoas não consigam copiar o projecto, ou é mais para não conseguirem interferir com o sistema.

Em relação à questão do OS, não me parece que de para fazer o que tu queres... O arduino é muito limitado a nível de recursos para esse tipo de coisas. Aliás, mesmo que a memória não fosse uma limitação, nem sei se seria possível fazer isso.

Eu estou a desenvolver um projecto parecido, que permite criar projectos com arduino com interface web sem sem preciso programar (configura-se tudo atraves da interface web). Como disseste que percebias de programação web, provávelmente seria uma boa opção para ti fazer algo do genero tambem, podes ter toda a interface num browser e apenas as coisas mais simples no arduino.
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 03:30
Sim, mas tecnicamente é isto que estou fazendo, mas queria algo mais tipo interfaces usando Arduíno e eu achei uns códigos em uns sites:
Esses sites mostraram códigos para dar o boot do Arduíno em um SD alguém pode me ajudar a entender como se usa ?

https://github.com/thseiler/embedded/tree/master/avr/2boots (https://github.com/thseiler/embedded/tree/master/avr/2boots)

http://baldwisdom.com/bootdrive/ (http://baldwisdom.com/bootdrive/)

https://github.com/osbock/Baldwisdom/tree/master/BootDrive (https://github.com/osbock/Baldwisdom/tree/master/BootDrive)
Título: Re: Arduino - Criptografia de Código
Enviado por: tarquinio em 03 de Junho de 2013, 04:04
Esses projectos não são para correr código que está no SD, são é para fazer upload de programas para o arduino a partir de um cartão. Podes programar no PC, copiar o programa para um SD card, depois programar o arduino com o cartão sem precisar de estar ao pé do PC, por exemplo... Mas o código não é executado directamente do SD, a unica vantagem parece-me mesmo ser não precisares do PC... Mas isso não parece ter muito a ver com o que tu querias fazer.
Título: Re: Arduino - Criptografia de Código
Enviado por: senso em 03 de Junho de 2013, 04:16
Porquê a obsessão com codificar o programa?
Se não queres que ninguem tenha (fácil) acesso é activar os lock fuses, impedem que o programa seja lido, se usas um bootloader genérico(principalmente) os de Arduino é muito facil ler de novo o código que já lá está, e se realmente for um produto que venda a pontapé tens serviços na China e na Russia que por 1000-1500€ fazem um decap ao chip, rebentam com os transistores que controlam os lock-fuses e fazem dump ao código ou simplesmente lêem o código directamente da flash com meia duzia de needle probes no sitio certo, podes ir ao extremo de se ler os bits 1 a 1 com um microscópio de eletrões, nada é realmente seguro...

Ler um programa de um cartão SD ou de qualquer outra memória externa tem o inconveniente de estar sempre a usar a memória flash, que tem um ciclo tipicamente de 10-100 mil escritas e erases, não me parece que vá durar muito tempo se a cada boot vais re-programar.

Outra opção é programar um interpretador e ter código no cartão que é interpretado, por exemplo á lá picaxe que tem(pelo menos os antigos era assim), um interpretador de Basic no micro e o teu código era lá metido e executado, a questão é que isso torna-se lento, e perdes recursos no micro assim como flexibilidade.

O mais simples é um one time pad, agarras no .hex original, fazes um XOR com um valor qualquer(de preferência 8 ou 16 bits) e está feito, impossivel de ter os dados originais de novo, sim com 8 bits é relativamente rápido de se ter a solução na mão, a questão é que fazendo isso vais ter muitos falsos positivos, mas é facil de lá chegar, algo muito mais pesado que isso não deve caber no tamanho máximo de boot dos atmega que penso ser 8Kb nos 1280/1284/2560/2564.

O que eu disse inicialmente é que se o micro-controlador for DIP e tiver num socket e não soldado directamente, podes enviar updates, enviando um chip novo, tira o velho, mete o novo, feito, cliente nunca vê sequer um hex.

Mas fazer um SO?
Já existe uma duzia deles só para atmegas, mas para mim é overkill, e consumo desnecessário de recursos..
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 04:33
Desculpe, é que eu estou complicando mesmo pensei sim nisto de enviar o chip novo para o cliente sempre que preciso é mais fácil, é que quero criar um OS mas tecnicamente ele não é um OS ou SO, é que tenho um projeto de automoção mas ao mesmo tempo quero algo multi ponto em todos lados da casa com um servidor central pensei em fazer tudo em um programa o Arduíno apenas como hardware vai ser melhor, eu aqui tenho um rack de telecomunicações com 2 servidores e alguns switchs e equipamentos da cisco, poderia interligar todos arduinos com Ethernet ? Isto teria como controlar tudo com um servidor central desculpe posso ter deixado vocês confusos mas só consigo falar explicando com voz, mas meu intuito da criptografia não é vender o código só que ninguém altere-o mas nem vou mais criptografar porque o que vou criptografar é o programa do servidor, mas obrigado a todos e desculpe pelo texto gigante que pode estar confundindo vocês.
Título: Re: Arduino - Criptografia de Código
Enviado por: tarquinio em 03 de Junho de 2013, 06:02
Se o que tu queres é apenas ter vários Arduinos a comunicarem entre si por ethernet n é nada de muito complicado. Os proprios exemplos que vem com a library Ethernet do arduino chegam para fazer isto.
Podes ter um como servidor que comunica com a interface que tiveres implementada, e depois outros como clientes, que comunicam com o servidor... Isto não é dificil de fazer. Mas não sai muito barato teres arduinos ethernet espalhados por todo o lado
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 06:29
Sim, entendo, eu tenho uma placa de ethernet do arduino mas nunca fiz funcionar ela não é a shield é aquelas que vem em um bloquinho tipo modulo essa aqui:

http://img1.mlstatic.com/modulo-ethernet-shield-enc28j60-arduino-pic-atmel-avr-id870_MLB-O-3224159870_102012.jpg (http://img1.mlstatic.com/modulo-ethernet-shield-enc28j60-arduino-pic-atmel-avr-id870_MLB-O-3224159870_102012.jpg)

aqui no brasil essas placas são baratas, custam em torno de 20 a 30 reais, ou em euros é 7 a 10 euros cada uma delas mas esse modelo ai.
Título: Re: Arduino - Criptografia de Código
Enviado por: dio123 em 03 de Junho de 2013, 10:10
para isso pegas no chip  apagas as letras, assim a pessoa não sabe que  integrado é, e já é mais difícil.
Título: Re: Arduino - Criptografia de Código
Enviado por: tarquinio em 03 de Junho de 2013, 14:43
Essas placas não usam o mesmo chip de ethernet que os arduinos... Já tenho visto dessas, mas nunca usei. Imagino que nesse caso seja necessário utilizar uma library diferente da que vem com o arduino, deves ter de uasr uma que seja compatível com esses módulos.
Título: Re: Arduino - Criptografia de Código
Enviado por: luisjustin em 03 de Junho de 2013, 18:56
Sim, só que a dela é muito mais complicada por isso vou trocar por outra placa.