[RESOLVIDO] CI com ID code fixo para, para evitar clonagem de projetos em Arduíno ?

Olá Galera,

    Essa semana tivemos um usuário questionando a licença open do arduino, e o que percebemos é que a melhor forma de evitar problemas em projetos comerciais é evitando a clonagem do codigo.  Afinal, sem ele, qualquer projeto baseado em microcontrolador é só um monte de componentes sem utilidade.

   Parti para ler sobre o bloqueio de leitura e gravação dos atmegas atraves de fuse bits, e o que descobri é que esse método não é totalmente confiável, podendo ser possível sim, ler o codigo hex do microcontrolador ainda que os fuse bits tenham sido bloqueador, devendo-se para isso entretanto ter hardware especifico a esse fim,  mas que é possível é.

   Logo, em foruns vi que a duvida era pertinente, e que muitos procuravam uma forma de bloqueio.

   Como os CIs atmegas não possuem IDs,  individuais, não dá pra bloquear usando esse método.

   Dai sobraria a anexação ao projeto de Componentes externos que pudessem ser identificados e sem eles mesmo copiando o codigo hex, o projeto não executaria.

   O primeiro pensamento seria colocar um EEPROM com um code gravado,  porem, esse tambem poderia ser copiado e clonado.

   Logo a minha duvida é:    Vocês conhecem algum CI que possua um ID code fixo do hardware que possa ser acessado pelo microcontrolador,  de tal forma que somente aquele componente estando na placa o code principal seria executado ?

Exibições: 1307

Responder esta

Respostas a este tópico

Oi WD, este projeto que falei , era detectar se tinha equipamento conectado na fonte ou não

Tinha uma lista de equipamentos por fonte.

JGAM

Neste caso é possível o uso de uma EEPROM no lugar do DS2401, mas bem complexo.

O protocolo de comunicação 1-Wire, procura um serial number especificado em um dispositivo 

durante a sua inicialização. E este não é um protocolo padrão de EEPROM.

Uma vez que o protocolo de comunicação gravado no arduino, não encontre este numero de serie,

ele "abenda"  a inicialização .

Para clonar você terá que  "simular " um dispositivo que responda no mesmo formato do protocolo 1Wire

e envie o numero de serie que você terá que descobrir no DS2401 original.

Rui

Graaaande Rui,   é exatamente isso ai que eu tava tentando explicar, só que não sabia colocar tão bem as palavras como você.

Aê rui,  adorei seu Garfield de óculos doidão kkk

Eu tb acho que clonar um DS desses é simples, como foi dito. Vc substitui ele por um microcontrolador gerando o mesmo codigo.

Como é OneWire um arduino rodando (não sei se é essa lib, pode ser outra):

http://playground.arduino.cc/Learning/OneWire

Deve fazer a função do DS.

O codigo vc usa a propria biblioteca pra descobrir, anota e muda de escravo pra mestre, devolvendo o codigo. Nem precisa de analisador lógico.

Acredito que senhas boas sejam do tipo equação com tabela.

Vc manda um numero e o integrado devolve outro, que é uma resposta.

Apenas a equação tem um grau de dificuldade.

Equação+tabela (pega o numero, faz uma equação, pega parte do resultado e troca numa tabela) dificulta mais.

Pra ferrar de vez, só fazendo uns aleatorios.

Por ex: Vc tem 128 bits de chave, dos quais 8 são aleatórios (desprezados), inseridos no meio. E saber quais faz parte da brincadeira (pode ser tabela). 

Assim se vc vai ouvir a comunicação alem de dificilmente ser feita a mesma pergunta quando vem a resposta nem sempre vem a mesma. Em outras palavras, é uma chave de 120 bits "só", mas isso dificulta a vida de quem quer achar o padrão.

Essa é uma discussão bastante interessante e útil hoje em dia, porem, ao meu ver devemos analisar até que ponto vale a pena aumentar a complexar do projeto a nível de hardware para se ter esse resultado, uma vez que isso implica em um aumento de custo tanto em fabricação, manutenção e consumo energético.

Acredito que dificilmente uma 'solução' utilizando CI`s externos seja confiável pois hoje em dia podemos reproduzir o funcionamento de praticamente qualquer CI utilizando um microcontrolador precisando apenas de um pouco de estudo sobre o componente (o datasheet ja nos ajuda bastante nesse ponto).

Essa discussão me lembrou de uma companhia de engenharia reversa que vi um dia no qual o lema era "Everything they make, We can break!", ou seja, dificilmente seu código estará 100% seguro contra cópia.

Concluindo minha linha de pensamento, acredito que devemos buscar essa proteção apenas até certo ponto e utilizando principalmente algo interno aos microcontroladores, já em casos onde necessita-se de mais segurança contra cópia (como em uma industria específica), a alternativa mais viável seria o projeto de um CI específico, uma vez que o alto volume de produção diminuiria o preço do projeto (antes que alguém aqui me critique, isso é sim utilizado)

Aêe tô adorando o debate,  isso é o que faz esse forum tão maravilhoso e de tão alto nível.

Ao Marcondes,

    Cara, veja bem, a coisa não é assim tão simples, como sei que você tem uma boa base de conhecimento em microcontroladores você deve saber que existem componentes de entrada de dados passivos e ativos,  tipo,  uma eeprom, um sdcard são componentes passivos,  eles estão lá parados com os dados fixos dentro deles em endereços específicos, dai pra acessar eles, seu microcontrolador  tem que ir até lá, buscar no endereço especifico e pegar o dado.   Já em componentes ativos, como sensores ou outros microcontroladores fornecendo dados, você não vai lá buscar o dados,  você simplesmente abre uma porta de leitura e o dado chega pois esta sendo gerado e emitido pelo componente externo, dai você só "ouve".

    Logo, o DS seria como um componente passivo e um microcontrolador um ativo, a menos é claro que você esteja usando apenas a eeprom do microcontrolador,  mas nesse caso ela não seria acessavel pelo protocolo OneWire, o que não adiantaria nada.

    Entendam, as duas únicas formas de quebrar uma proteção com o DS2401 seria:

1- Se você conseguisse Alem de extrair o code HEX do microcontrolador e desasembla-lo ,  passar ele de volta para C, para retirar as travas do codigo,  e isso até o momento, até onde sei não existe.

2- Se você conseguisse uma eeprom que alem de funcionar por OneWire,  tivesse a setagem de endereços exatamente igual a do DS2401, pois ai você copiaria byte a byte e colocaria nela,  coisa que a meu ver também não existe.

    Observem o code para o DS2401 nessa page:   https://forum.sparkfun.com/viewtopic.php?f=32&t=34208

    Vejam que ele tem endereçamentos muito específicos,  metodos de chamada de dados, e fora isso, alem dos 64bits de ID, que nos são entregues em pacotes de bytes(veja o codigo da pagina citado)  dando dessa forma para você utilizar não todo o codigo,  mas apenas os dados de certos endereçamentos, fora tudo isso ele ainda fornece CRC teste ( vide datasheet:  http://pdf1.alldatasheet.com/datasheet-pdf/view/58603/DALLAS/DS2401... ), e ainda por cima ele fornece um 8-bit family code specifies DS2401 communications requirements to reader sabem o que só isso ai quer dizer?

    Logo, você até pode ler os dados dele,  mas colocar em um outro componente OneWire com mesmo endereçamento e mesmo CRC ,  bem... 

Ao João Athur,

    Cara, o DS2401 me custou R$ 6,50  ( http://pt.aliexpress.com/item/Free-Shipping-1PCS-lot-DS2401-IC-SILI... )  logo, a menos que seu projeto seja low cost,  tipo algo abaixo de $ 10,   um componente de seis reais não vai interferir no custo.

   E muito menos ira pesar na programação do code,  como visto no exemplo citado ele é relativamente simples de trabalhar.

    A complexidade na verdade deverá ser criada por vocÊ,  pois como o Marcondes falou, só pegar o dados e comparar abre realmente brechas,  mas se vocÊ faz uma equação com eles, complica um bocado.

   

Ah! ia esquecendo,

   Ao marcondes de novo,

      Com relação a ter que criar equações ao inves de colocar simples leitura direta de codes, torna a segurança muito maior,  só que você esta esquecendo de uma coisa,  se eu coloco todas as minhas variaveis, dados, tabela, etc. dentro do meu code, e ele é copiado,  o clone será igual a ele e terá os mesmos dados e será capaz de responder as mesmas equações.

     No caso do DS2401 com certeza se deverá fazer equações,  porem, os dados estarão vindo de um componente gravado fisicamente a laser que não dá pra reproduzir.

      E é externo ao microcontrolador,  logo,  podem copiar mil vezes, mas sem aquele determinado componente com aqueles dados especificos em endereços especificos, o projeto não roda.

Legal, vejo que vc está empolgado, é muito bom !

Mas li o codigo do link e ele entrega um numero... Não entendi pq não posso tirar o DS do seu circuito, ligar em um Arduino padrão na bancada, ler qual é esse numero e depois por o arduino pra falar o numero de volta, quando perguntado.

Aih para clonar eu colocaria um Arduino (e não eeprom) para gerar esse numero em onewire.

Na verdade é tarefa para um attiny,Holtek ou PIC de 8 pinos, por serem mais baratos. 

Ficaria um segundo microcontrolador na placa, responsável apenas por gerar esse numero.

Mas também, como disse antes, meu ponto é que nem precisa disso. Colocando o DS vc eleva a dificuldade pacas, que é o objetivo. Querer algo absolutamente incopiável é no mínimo desencessário pq de qualquer forma o kra vai copiar a ideia mesmo... 

Oi WD, bom dia.

Usei durante muito tempo o PIC escrevendo code em assembly, usando um assembler

da microchip, e por vezes modifiquei o code em Hexa.

Aí pensei o seguinte:

Este code do WD é uma boa oportunidade pra conhecer melhor o " instrution set"  do Atmega,

e como ele trabalha dentro do chip.

Vou "sugerir" o seguinte:

Escreva um code, se nenhuma função a mais do que a função que está bolando para usar

um DS2401 como proteção, e depois me envie o HEX dele.

Vou tentar entender com funciona o code e testar a "violabilidade" dele.

Ok?

Rui

Rui,

    Comprei 3  DS2401 ontem,  da china,  como compro bastante componente lá,  tem coisas chegando com menos de 30 dias outras com mais de 90 dias,  dai só quando ele chegar pra poder extrair todo o potencial dele, entender como extrair não só a ID, mas o CRC e o codigo de identificação de CI e de familia,   ai com certeza será um prazer ter você como um tester de violação,  vai ser um desafio legal pra nos dois kkk.

Ao Marcondes,

     Sim amigo,  me empolguei pacas com o componente,  na pratica não tô com projeto algum precisando dele agora,  mas como sou um devorador de conhecimento,  vai ser show anexar esse pra coleção mental.

     E como já diria o sabio "Sorte é quando a oportunidade aparece para quem esta preparado para ela"   então nada melhor do que ter o conhecimento.

     Se você tivesse esse componente tambem assim como o rui, adoraria quando os meus  chegarem,  que você tambem participasse do teste de quebra do code.

    Já tô até pensando como fazer,  serial bem simples tipo,  colocar um Led verde e um vermelho,   se o DS estiver presente, o led verde ficaria piscando e o vermelho apagado,  se não achar quem piscaria seria o vermelho,   o desafio seria colocar o led verde pra piscar sem a presença do DS,  o que acham?

Oi WD, 

você tem o DS18b20?

A parte do protocolo ROM dele é igual ao DS2401.

Se você não se preocupar em calcular (internamente no DS18b20)  e ler o valor da

temperatura, o restante é igual ao DS2401.

Pode usa-lo para o seu teste.

Comandos:

DS2401::::

SEARCH ROM [F0h]

READ ROM [33h]

MATCH ROM [55h]

SKIP ROM [CCh]

DS18b20::::

SEARCH ROM [F0h]

READ ROM [33h]

MATCH ROM [55h]

SKIP ROM [CCh]

Comandos desnecessários para o teste.

ALARM SEARCH [ECh]

ALARM SEARCH [ECh]

WRITE SCRATCHPAD [4Eh]

READ SCRATCHPAD [BEh]

COPY SCRATCHPAD [48h]

RECALL E2 [B8h]

Rui

Você sabia que a placa do Arduino possui um ID único, uma espécie de MAC address? É basicamente isso que a biblioteca ArduinoUniqueID faz, ela retorna esse valor de identificação do chip. O mais interessante é que essa característica não está descrita no datasheet do microcontrolador atmega328p

https://www.embarcados.com.br/arduinouniqueid-id-unico-arduino/

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço