Go Down

Topic: Controle por RF (Read 7690 times) previous topic - next topic

ffrizzo

Bom Dia Pessoal,

Estou querendo usar um controle remoto para algumas funções no arduino.
Estive olhando

https://www.adafruit.com/products/1097 e https://www.adafruit.com/products/1095

Mas ele não tem o minimo de segurança.
Qualquer um que tenha um controle igual podera as funcionalidades.

Alguém ai ja fez algo com RF com algum minimo de segurança?
Algum controle que vc consiga identificar que são os seus controles?

mmoscz

Você deve criar o seu próprio Emissor que siga um determinado padrão (codificação), e seu receptor deve reconhecer esse padrão.
Uma coisa no "ar" sempre vai haver insegurança.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

bubulindo

Acho que vais ter de entrar no mundo da criptografia para fazer algo seguro.

Que funções é que pretendes fazer com isto?
This... is a hobby.

ffrizzo

Pretendo fazer algo parecido como a maioria das centrais de alarme disponiveis no mercado hoje.
Queria ativar e desativar por controle o Alarme que estou motando com Arduino.

Também vou ter a opção de digitar senha por teclado.
Porém gostaria de ter algo mais pratico como vejo na maioria dos alarmes.
Mas para isso precisaria de uma segurança.

bubulindo

Algo como isto?

http://pt.wikipedia.org/wiki/MD5
This... is a hobby.

hugo007

Aqui a uns tempos saiu na revista ELEKTOR um circuito para usar num PIC18F qualquer coisa que implementava incryptaçao AES 128 nele.Quando chegar a casa posso la ir ver se tem pagina para poderes ver mais info
Na altura que li o artigo parecia facil de implementar.
Outra forma é, podes criar um array dimensional com valores a teu gosto e apenas conhecido por ti e quando envias dados codificas a mensagem com um valor calculado mediante essa tabela aleatoriamente.Depois no receptor faz o mesmo calculo com base num valor dessa tabela.Pode parecer confuso mas este funcionamente é parecido aos certificados digitais.Apenas a entidade que o gera sabe o algoritmo que é segredo.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

ffrizzo

A idéia do Hugo me parece interessante. Vou dar uma pesquisada a respeito.

Obrigado a todos.

hugo007

aqui tens o link onde é relatado o projecto publicado na revista ELEKTOR
http://pt.scribd.com/doc/96327938/Elektor-21f01071-1858-4a38-ada3-8a3c0be21fed
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

fabio_h

Será que isso aqui resolve?
http://perhof.wordpress.com/2012/10/14/arduino-based-remote-control-for-electric-door/

O cara implementou um tipo de keeloq usando dois arduinos, parece bem seguro. Ninguem conhece a virtualwire, não tem nem forma de onda na internet... :)

bubulindo


Aqui a uns tempos saiu na revista ELEKTOR um circuito para usar num PIC18F qualquer coisa que implementava incryptaçao AES 128 nele.Quando chegar a casa posso la ir ver se tem pagina para poderes ver mais info
Na altura que li o artigo parecia facil de implementar.
Outra forma é, podes criar um array dimensional com valores a teu gosto e apenas conhecido por ti e quando envias dados codificas a mensagem com um valor calculado mediante essa tabela aleatoriamente.Depois no receptor faz o mesmo calculo com base num valor dessa tabela.Pode parecer confuso mas este funcionamente é parecido aos certificados digitais.Apenas a entidade que o gera sabe o algoritmo que é segredo.


O único problema aqui é que serão transmitidos poucos comandos. Ou seja, se estiveres a fazer transmissão de dados, os dados serão diferentes e depois de encriptados com a chave da tabela o resultado será sempre diferente e muito mais difícil de interpretar.
Se apenas vais enviar 4 ou 5 comandos, quem estiver a "ouvir" vai apanhar tudo o que necessita pelo ar, pois se alguém apanhar o comando que enviaste e o re-enviar, a porta não saberá quem é que enviou o comando.

Estás a perceber? Uma coisa é encriptar dados para ninguém ver que dados são. O interesse aqui é ver o que está a ser transmitido. No caso de comandos, não importa minimamente o que está a ser transmitido uma vez que os interessados podem repetir o comando e este ser aceite.

Imagina isto, as nossas garagens são contíguas e tu criaste este sistema com encriptação para abrir a tua garagem.
Eu, tendo reparado no sistema que fizeste, ligo uma antena que funciona na mesma frequência da tua e fico à espera de apanhar algo. Quando chegas a casa, clicas no teu emissor, envias um comando encriptado e o receptor abre a porta. O mesmo acontece para fechares a porta e o meu sistema gravou ambos os comandos.

Agora, eu chego a casa, vou ver o que a minha antena recebeu e não consigo decifrar o comando que lá está dentro. Não sei sequer se é ASCII, ou que algoritmo de encriptação usaste. No entanto, se quiser abrir e/ou fechar a tua garagem basta-me pegar no meu sistema, ligar lá um emissor e enviar o comando que recebi quando chegaste a casa.
Eu não entendo o que o comando diz, mas sei que aquela sequência de bytes vai abrir a porta... e é tudo o que preciso.

Eu nunca gostei desses sistemas precisamente por isto, a segurança está na potência do transmissor que se for baixa, não chegará a mais lado algum onde alguém possa interceptar o comando e repeti-lo.

Podes é fazer com que a garagem não abra se a chave usada tiver sido usada nas últimas X vezes que abriste a porta. Isto funciona com o algoritmo que o Hugo referiu, mas terias de ter memória em ambos os lados e um número suficiente de valores para não ficares trancado por falta de chaves. LOL
This... is a hobby.

hugo007

Quote
Eu não entendo o que o comando diz, mas sei que aquela sequência de bytes vai abrir a porta... e é tudo o que preciso.

Muito bem pensado :smiley-mr-green:
Outra forma seria assim que o receptor recolhe a mensagem incrementa-se uma varivel que aponta-se para um novo campo na tabela.Na proxima trama recebida tera de receber esse valor na posiçao correcta na trama.Mesmo que alguem intercete aos dados e os repita o receptor nao faz nada e descarta a mensagem.Claro que se escutassem todas as mensagem possiveis poderiam construir ou descobrir como a mensagem é enviada mas seria dificil saber isso.
Por questao de memoria a tabela podia ser gravada com o progmem na flash para nao comer RAM. Eventualmente um byte da eeprom podia ser usado para ir guardando o campo actual tabela em caso de perda de energia.Devia dar para uns anos de funcionamento  :smiley-mr-green:
O que axas da idea?
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

#11
Mar 19, 2013, 04:56 pm Last Edit: Mar 19, 2013, 05:04 pm by bubulindo Reason: 1
Eu não resisto a carregar em botões... se carregasse num botão quando estivesse longe do receptor, perdia-se a sincronização. O emissor tinha incrementado o contador, mas o receptor não.
Não é simples, né?

http://en.wikipedia.org/wiki/Rolling_code

Ou então:

http://auto.howstuffworks.com/remote-entry2.htm

Quote
If you are a mile away from your car and accidentally push the button on the transmitter, the transmitter and receiver are no longer synchronized. The receiver solves this problem by accepting any of the next 256 possible valid codes in the pseudo-random number sequence. This way, you (or your three-year-old child) could "accidentally" push a button on the transmitter up to 256 times and it would be okay -- the receiver would still accept the transmission and perform the requested function. However, if you accidentally push the button 257 times, the receiver will totally ignore your transmitter. It won't work anymore.


Ou isto:

http://www.atmel.com/Images/Atmel-2600-AVR411-Secure-Rolling-Code-Algorithm-for-Wireless-Link_Application-Note.pdf
This... is a hobby.

hugo007

Quote

Eu não resisto a carregar em botões... se carregasse num botão quando estivesse longe do receptor, perdia-se a sincronização. O emissor tinha incrementado o contador, mas o receptor não.

Sim tens toda a razao novamente.Nao deixas passar uma  :smiley-mr-green:  :smiley-mr-green: olho tecnico de aguia
:smiley-mr-green:
As vezes faltam esses promenores que fazem toda a diferença e deitam tudo por terra
Pior que isso é as vezes desenvolver um projecto e nao se preverem coisas desse tipo que sao basicas como carregar nos botoes mais do que previsto
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

ffrizzo

Agora me veio uma pergunta.
Como os alarmes para carro funcionam?

Seria possivel fazer algo parecido?

fabio_h


Eu não resisto a carregar em botões... se carregasse num botão quando estivesse longe do receptor, perdia-se a sincronização. O emissor tinha incrementado o contador, mas o receptor não.
Não é simples, né?

Isso é uma limitação de alguma implementação meia boca... li em algum canto da internet que vem desativada em alguns alarmes, e se você for fazer este projeto, é só deixar esta feature de fora...
Desencanem de fazer uma implementação bullet proof, não é porque o mercado usa algo deste jeito que vocês tem que seguir
Se for para ser roubado, um 38 proximo à janela do carro abre qualquer portão...
Se fosse para meu uso, faria um contador simples, mas com ofuscação(talvez um xor junto um vetor randomico de dezenas de bytes...)
e tripla confirmação, isto é, precisaria de 3 codigos validos em sequencia para abrir o portão, evita o bruteforce...




@ffrizzo: procura por keeloq, que já foi citado na minha mensagem anterior.



Go Up