SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Blockchain em IoT
Desafios e
considerações numa
abordagem prática
Prof. André Márcio de Lima Curvello
contato@andrecurvello.com.br
Sobre mim
André Márcio de Lima Curvello
▪ Engenheiro de Computação com Ênfase em
Sistemas Embarcados – USP São Carlos
▪ MBA em Gestão de TI – UNIFRAN
▪ Mestrado em Processamento de Sinais e
Instrumentação – USP São Carlos
▪ Analista de Tecnologia – Padtec S/A
▪ Professor de Graduação e Pós-Graduação
2
“ Tecnologia deve
empoderar as
pessoas
Satya Nadella, Microsoft CEO
3
“
4
! Blockchain
Muito além do Bitcoin
Blockchain – Por Wikipedia
▪ Uma Blockchain é uma lista de registros
continuamente crescente, que são interligados
e protegidos usando criptografia.
▪ Cada bloco tipicamente contém um pointeiro
criptográfico hash como link para o bloco
anterior, um timestamp e dados de transação.
6
Aviso – Não é um Motivacional Bitcoin!
7
X
Blockchain - Conceitos Gerais
▪ Blockchain é uma forma de armazenar dados
digitais.
▪ Os dados podem literalmente ser qualquer coisa.
▪ Para o Bitcoin, são as transações
▫ Transferências de Bitcoin de uma conta para
outra
▪ Mas podem ser arquivos – não importa.
8
Blockchain - Conceitos Gerais
▪ Os dados são armazenados na forma de
blocos, que são conectados entre si usando
“hashes”.
▪ Dessa forma vem o nome “blockchain”
▫ Cadeia de Blocos.
9
▪ Toda a mágica está na forma como esses dados
são adicionados e armazenados na blockchain.
▪ A blockchain tem algumas características muito
interessantes:
▫ Imutabilidade da história
▫ Sistema não-hackeável
▫ Persistência dos dados
▫ Nenhum ponto de falha
10
Blockchain - O Segredo
▪ Block (Bloco): A block is a unique record in the blockchain which contains
transactions, timestamp, index, hash, etc. broadly 3 types of Block –
▫ Bloco Gênesis – primeiro bloco da blockchain
▫ Bloco Corrente – ultimo bloco da blockchain
▫ Bloco Órfão – bloco válido que não é parte da blockchain
▪ Mining (Mineração): Método de criar novos blocos.
▪ Proof Of Work (Prova de Trabalho): número difícil de gerar, mas fácil de verificar.
▪ Node (Nó): Servidor que se comporta como nó na blockchain.
▪ Consensus (Consenso): algoritmo de acordo para inserção de novos blocos aos nós.
11
Blockchain - Terminologias
1 – Transações em Blocos
▪ Vamos armazenar os dados na nossa blockchain em um formato
que é amplamente usado: JSON!
▪ O termo genérico “dado” (ou data) é geralmente substituído por
transações.
▪ Para manter consistência com o padrão… vamos adotar
“transação” para referenciar nossos dados postados na
aplicação.
12
1 – Transações em Blocos
▪ As transações são empacotadas em blocos.
▪ Cada bloco pode conter uma ou mais transações.
▪ Os blocos contend as transações são frequentemente gerados e
adicionados à blockchain.
▪ Como há múltiplos blocos…
Cada bloco deve ter uma identificação única!
13
2 – Tornando o blocos imutáveis
▪ Nós gostaríamos de detector qualquer tipo de
modificação nos dados armazenados dentro do
bloco.
▪ Em blockchain, isso é feito usando funções
hash.
14
2 – Tornando o blocos imutáveis
▪ Uma função hash é uma função que recebe
dados de qualquer tamanho e produz dados de
um tamanho fixo a partir disso, o que
normalmente serve para identificar a entrada.
▪ Exemplo em Python usando a função de
hashing sha256.
15
2 – Tornando o blocos imutáveis
▪ Deve ser computacionalmente fácil de
calcular.
▪ Mesmo a mudança de um único bit nos dados
deve fazer a hash mudar por completo.
▪ Não deve ser possível adivinhar a entrada pelo
hash gerado na saída.
16
3 – Ligando os Blocos
▪ A blockchain deve ser uma coleção de blocos.
▪ Devemos armazenar todos os blocos numa lista em Python
(equivalente a um array).
▪ Mas isso não é o suficiente… E se alguém
intencionalmente substitui um bloco atrás na coleção?
▪ Criar um novo bloco com transações alteradas, computar o
hash, e substituir qualquer bloco mais velho não é
problema no nosso caso.
▪ Porque iremos manter a imutabilidade e a ordem dos
blocos.
17
3 – Ligando os Blocos
▪ Nós precisamos de uma forma de garantir que qualquer
mudança no passado invalide a cadeira inteira.
▪ Uma forma de fazer isso é juntar os blocos pela hash.
▪ Então ligando assim, nós vamos incluir a hash do bloco
anterior no bloco corrente.
▪ Então, se o conteúdo do bloco anterior muda, a hash desse
bloco também irá mudar, levando a um desencontro com o
campo “previous_hash” do próximo bloco/bloco seguinte.
18
3 – Ligando os Blocos
▪ Cada bloco está ligado ao anterior pelo campo
“previous_hash”, mas… e o primeiro de todos os
blocos?
▪ O primeiro de todos os blocos é chamado de
“genesis block” (bloco genesis).
▪ É gerado manualmente ou por uso de alguma
lógica única, em alguns casos.
19
3 – Ligando os Blocos
▪ Vamos adicionar o campo
“previous_hash” à classe do nosso bloco
e vamos implementar a estrutura inicial
da nossa classe Blcokchain.
20
3 – Ligando os Blocos
21
4 – Implementando o Proof of Work (POW)
22
4 – Implementando o Proof of Work (POW)
▪ Todavia, ainda há um problema…
▪ Se nós mudarmos o bloco anterior, nós podemos
recomputar as hashes de todos os blocos seguintes
de forma fácil, criando uma diferente, porém válida,
blockchain.
▪ Para prevenir isso, nós devemos tornar a tarefa de
computar a hash difícil e aleatória.
23
4 – Implementando o Proof of Work (POW)
▪ Em vez de aceitar qualquer hash para o bloco, nós
adicionamos algumas restrições.
▪ Vamos adicionar uma restrição em que nossa hash
deve começar com 2 zeros.
▪ Também, nós sabemos que há não ser que
mudemos o conteúdo do bloco, a hash não irá
mudar.
24
4 – Implementando o Proof of Work (POW)
▪ Então nós vamos adicionar um novo campo no nosso bloco
chamado nonce.
▪ O nonce é um número que iremos alterar até encontrarmos uma
hash que atenda à nossa restrição.
▪ O número de zeros iniciais (2, no nosso caso) decide a
dificuldade do nosso algoritmo de “Prova de Trabalho”.
▪ Você deve ter percebido que nosso algoritmo Proof of Work é
difícil de computer, mas fácil de verificar, uma vez que
encontramos o nonce.
▪ Para verificar, basta você rodar o cálculo de hash novamente. 25
5 – Adicionando Blocos à cadeia
▪ Para adicionar um bloco à cadeia
▫ Primeiro temos que verificar se o Proof of
Work provido pelo bloco está correto
▫ E se o campo previous_hash do bloco a
ser adicionado aponta para a hash do
último bloco da nossa cadeia.
26
6 - Mineração
27
6 - Mineração
▪ Na maior parte das criptomoedas, incluindo
Bitcoin, mineradores são premiados com
algumas criptomoedas como recompensa pelo
poderio computacional despendido para
computar a Proof of Work.
28
7 – Tenha Interfaces
▪ Vamos criar interfaces para o nosso Nó
interagir com outros Peers assim como
também com a aplicação que iremos
construir.
▪ Iremos usar Flask para criar uma API REST
para interagir com nosso nó.
29
8 – Consenso e Descentralização
▪ O código que implementamos até agora é feito para
rodar em um único computador.
▪ Mesmo que estejamos conectando blocos com
hashes, ainda não podemos confiar uma única
entidade.
▪ Nós precisamos de vários nós para manter nossa
blockchain.
▪ Então, vamos criar um endpoint para permitir a um nó
conhecer outros peers na rede. 30
8 – Consenso e Descentralização
▪ Há um problema com múltiplos nós.
▪ Devido a manipulações intencionais ou razões
não-intencionais
▫ A cópia de cadeias de alguns nós podem
divergir.
▪ Precisamos concordar sobre alguma versão da
cadeia de forma a manter a integridade do
sistema como um todo.
▫ Nós precisamos alcançar o consenso. 31
8 – Consenso e Descentralização
▪ Um algoritmo simples de consenso:
▫ Concordar com a maior cadeia válida,
quando as cadeias de diferentes
participantes na rede parecem divergir.
▪ A razão por trás dessa abordagem é que a maior
cadeia é uma boa estimativa da maior parte do
trabalho feito. 32
8 – Consenso e Descentralização
▪ Precisamos desenvolver uma forma para que qualquer
nó anuncie à rede que minerou um bloco
▪ Assim todos podem atualizar suas cadeias de blocos
▪ E continuar a minerar outras transações.
▪ Outros nós podem simplesmente verificar a Proof of
Work e adicionar ela a suas respectivas cadeias.
33
Demonstração
Vamos completar nossa aplicação!
34
Fontes
https://github.com/satwikkansal/ibm_blockchain
35
36
Blockchain
Internet das
Coisas
37
Brasil e o Blockchain
CPBA
2018
38
39
Obrigado!
Perguntas?
Contato
40
@andremlcurvello
http://youtube.com/profandrecurvello
http://andrecurvello.com.br
contato@andrecurvello.com.br
http://facebook.com/profandrecurvello

Mais conteúdo relacionado

Semelhante a Blockchain em IoT - Desafios e considerações numa abordagem prática

Blockchain Simplificado
Blockchain SimplificadoBlockchain Simplificado
Blockchain SimplificadoAdriano Faria
 
Cryptography Oracle Attacks
Cryptography Oracle AttacksCryptography Oracle Attacks
Cryptography Oracle AttacksDiego Mariano
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVAMarcio Palheta
 
Blockchain como serviço no azure
Blockchain como serviço no azureBlockchain como serviço no azure
Blockchain como serviço no azureVagner Oliveira
 
Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2Riad Vargas
 
Guia Básico - RaiBlocks (Nano):
Guia Básico - RaiBlocks (Nano):Guia Básico - RaiBlocks (Nano):
Guia Básico - RaiBlocks (Nano):Jefferson Tavares
 
Zamus - Music Trends Brasil - Blockchain no mercado da música
Zamus - Music Trends Brasil - Blockchain no mercado da músicaZamus - Music Trends Brasil - Blockchain no mercado da música
Zamus - Music Trends Brasil - Blockchain no mercado da músicaGuilherme Sampaio
 
Apresentação sobre blockchain, executada no mestrado de ciencia da computação
Apresentação sobre blockchain, executada no mestrado de ciencia da computaçãoApresentação sobre blockchain, executada no mestrado de ciencia da computação
Apresentação sobre blockchain, executada no mestrado de ciencia da computaçãoManoelGuilherme2
 
Blockchain - O que é, como é e para onde vai?
Blockchain - O que é, como é e para onde vai?Blockchain - O que é, como é e para onde vai?
Blockchain - O que é, como é e para onde vai?Jessica Mota
 
Blockchain para quem é de humanas (Digital Summit)
Blockchain para quem é de humanas (Digital Summit)Blockchain para quem é de humanas (Digital Summit)
Blockchain para quem é de humanas (Digital Summit)deboradom
 
Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Alisson Solitto
 
Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Jeff Prestes
 

Semelhante a Blockchain em IoT - Desafios e considerações numa abordagem prática (20)

Acompanhamento - IC - Levindo GTN [02]
Acompanhamento - IC - Levindo GTN [02]Acompanhamento - IC - Levindo GTN [02]
Acompanhamento - IC - Levindo GTN [02]
 
Blockchain Simplificado
Blockchain SimplificadoBlockchain Simplificado
Blockchain Simplificado
 
Cryptography Oracle Attacks
Cryptography Oracle AttacksCryptography Oracle Attacks
Cryptography Oracle Attacks
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVA
 
Fiqueemcasa.conf
Fiqueemcasa.confFiqueemcasa.conf
Fiqueemcasa.conf
 
Blockchain como serviço no azure
Blockchain como serviço no azureBlockchain como serviço no azure
Blockchain como serviço no azure
 
Blockchain Day RJ
Blockchain Day RJBlockchain Day RJ
Blockchain Day RJ
 
Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2
 
Guia Básico - RaiBlocks (Nano):
Guia Básico - RaiBlocks (Nano):Guia Básico - RaiBlocks (Nano):
Guia Básico - RaiBlocks (Nano):
 
Zamus - Music Trends Brasil - Blockchain no mercado da música
Zamus - Music Trends Brasil - Blockchain no mercado da músicaZamus - Music Trends Brasil - Blockchain no mercado da música
Zamus - Music Trends Brasil - Blockchain no mercado da música
 
Apresentação sobre blockchain, executada no mestrado de ciencia da computação
Apresentação sobre blockchain, executada no mestrado de ciencia da computaçãoApresentação sobre blockchain, executada no mestrado de ciencia da computação
Apresentação sobre blockchain, executada no mestrado de ciencia da computação
 
Blockchain - O que é, como é e para onde vai?
Blockchain - O que é, como é e para onde vai?Blockchain - O que é, como é e para onde vai?
Blockchain - O que é, como é e para onde vai?
 
AZURE BLOCKCHAIN
AZURE BLOCKCHAINAZURE BLOCKCHAIN
AZURE BLOCKCHAIN
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Blockchain para quem é de humanas (Digital Summit)
Blockchain para quem é de humanas (Digital Summit)Blockchain para quem é de humanas (Digital Summit)
Blockchain para quem é de humanas (Digital Summit)
 
Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#
 
Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
NovaGenesis: Visão Geral
NovaGenesis: Visão GeralNovaGenesis: Visão Geral
NovaGenesis: Visão Geral
 
Blockchain
BlockchainBlockchain
Blockchain
 

Mais de André Curvello

Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19André Curvello
 
Arquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureArquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureAndré Curvello
 
Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!André Curvello
 
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...André Curvello
 
Internet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaInternet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaAndré Curvello
 
Pilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasPilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasAndré Curvello
 
IoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoIoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoAndré Curvello
 
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaIoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaAndré Curvello
 
Linux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasLinux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasAndré Curvello
 
Rede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasRede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasAndré Curvello
 
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...André Curvello
 
TDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGATDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGAAndré Curvello
 
TDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeTDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeAndré Curvello
 
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.André Curvello
 
Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?André Curvello
 
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosLinux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosAndré Curvello
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueAndré Curvello
 
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016André Curvello
 
Sistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoSistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoAndré Curvello
 
IoT - Além da Telemetria
IoT - Além da TelemetriaIoT - Além da Telemetria
IoT - Além da TelemetriaAndré Curvello
 

Mais de André Curvello (20)

Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19
 
Arquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureArquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com Azure
 
Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!
 
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
 
Internet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaInternet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetria
 
Pilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasPilares da Computação para Internet das Coisas
Pilares da Computação para Internet das Coisas
 
IoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoIoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de Computação
 
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaIoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
 
Linux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasLinux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das Coisas
 
Rede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasRede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações Conectadas
 
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
 
TDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGATDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGA
 
TDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeTDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device Tree
 
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
 
Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?
 
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosLinux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino Due
 
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
 
Sistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoSistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento Assimétrico
 
IoT - Além da Telemetria
IoT - Além da TelemetriaIoT - Além da Telemetria
IoT - Além da Telemetria
 

Blockchain em IoT - Desafios e considerações numa abordagem prática

  • 1. Blockchain em IoT Desafios e considerações numa abordagem prática Prof. André Márcio de Lima Curvello contato@andrecurvello.com.br
  • 2. Sobre mim André Márcio de Lima Curvello ▪ Engenheiro de Computação com Ênfase em Sistemas Embarcados – USP São Carlos ▪ MBA em Gestão de TI – UNIFRAN ▪ Mestrado em Processamento de Sinais e Instrumentação – USP São Carlos ▪ Analista de Tecnologia – Padtec S/A ▪ Professor de Graduação e Pós-Graduação 2
  • 3. “ Tecnologia deve empoderar as pessoas Satya Nadella, Microsoft CEO 3
  • 6. Blockchain – Por Wikipedia ▪ Uma Blockchain é uma lista de registros continuamente crescente, que são interligados e protegidos usando criptografia. ▪ Cada bloco tipicamente contém um pointeiro criptográfico hash como link para o bloco anterior, um timestamp e dados de transação. 6
  • 7. Aviso – Não é um Motivacional Bitcoin! 7 X
  • 8. Blockchain - Conceitos Gerais ▪ Blockchain é uma forma de armazenar dados digitais. ▪ Os dados podem literalmente ser qualquer coisa. ▪ Para o Bitcoin, são as transações ▫ Transferências de Bitcoin de uma conta para outra ▪ Mas podem ser arquivos – não importa. 8
  • 9. Blockchain - Conceitos Gerais ▪ Os dados são armazenados na forma de blocos, que são conectados entre si usando “hashes”. ▪ Dessa forma vem o nome “blockchain” ▫ Cadeia de Blocos. 9
  • 10. ▪ Toda a mágica está na forma como esses dados são adicionados e armazenados na blockchain. ▪ A blockchain tem algumas características muito interessantes: ▫ Imutabilidade da história ▫ Sistema não-hackeável ▫ Persistência dos dados ▫ Nenhum ponto de falha 10 Blockchain - O Segredo
  • 11. ▪ Block (Bloco): A block is a unique record in the blockchain which contains transactions, timestamp, index, hash, etc. broadly 3 types of Block – ▫ Bloco Gênesis – primeiro bloco da blockchain ▫ Bloco Corrente – ultimo bloco da blockchain ▫ Bloco Órfão – bloco válido que não é parte da blockchain ▪ Mining (Mineração): Método de criar novos blocos. ▪ Proof Of Work (Prova de Trabalho): número difícil de gerar, mas fácil de verificar. ▪ Node (Nó): Servidor que se comporta como nó na blockchain. ▪ Consensus (Consenso): algoritmo de acordo para inserção de novos blocos aos nós. 11 Blockchain - Terminologias
  • 12. 1 – Transações em Blocos ▪ Vamos armazenar os dados na nossa blockchain em um formato que é amplamente usado: JSON! ▪ O termo genérico “dado” (ou data) é geralmente substituído por transações. ▪ Para manter consistência com o padrão… vamos adotar “transação” para referenciar nossos dados postados na aplicação. 12
  • 13. 1 – Transações em Blocos ▪ As transações são empacotadas em blocos. ▪ Cada bloco pode conter uma ou mais transações. ▪ Os blocos contend as transações são frequentemente gerados e adicionados à blockchain. ▪ Como há múltiplos blocos… Cada bloco deve ter uma identificação única! 13
  • 14. 2 – Tornando o blocos imutáveis ▪ Nós gostaríamos de detector qualquer tipo de modificação nos dados armazenados dentro do bloco. ▪ Em blockchain, isso é feito usando funções hash. 14
  • 15. 2 – Tornando o blocos imutáveis ▪ Uma função hash é uma função que recebe dados de qualquer tamanho e produz dados de um tamanho fixo a partir disso, o que normalmente serve para identificar a entrada. ▪ Exemplo em Python usando a função de hashing sha256. 15
  • 16. 2 – Tornando o blocos imutáveis ▪ Deve ser computacionalmente fácil de calcular. ▪ Mesmo a mudança de um único bit nos dados deve fazer a hash mudar por completo. ▪ Não deve ser possível adivinhar a entrada pelo hash gerado na saída. 16
  • 17. 3 – Ligando os Blocos ▪ A blockchain deve ser uma coleção de blocos. ▪ Devemos armazenar todos os blocos numa lista em Python (equivalente a um array). ▪ Mas isso não é o suficiente… E se alguém intencionalmente substitui um bloco atrás na coleção? ▪ Criar um novo bloco com transações alteradas, computar o hash, e substituir qualquer bloco mais velho não é problema no nosso caso. ▪ Porque iremos manter a imutabilidade e a ordem dos blocos. 17
  • 18. 3 – Ligando os Blocos ▪ Nós precisamos de uma forma de garantir que qualquer mudança no passado invalide a cadeira inteira. ▪ Uma forma de fazer isso é juntar os blocos pela hash. ▪ Então ligando assim, nós vamos incluir a hash do bloco anterior no bloco corrente. ▪ Então, se o conteúdo do bloco anterior muda, a hash desse bloco também irá mudar, levando a um desencontro com o campo “previous_hash” do próximo bloco/bloco seguinte. 18
  • 19. 3 – Ligando os Blocos ▪ Cada bloco está ligado ao anterior pelo campo “previous_hash”, mas… e o primeiro de todos os blocos? ▪ O primeiro de todos os blocos é chamado de “genesis block” (bloco genesis). ▪ É gerado manualmente ou por uso de alguma lógica única, em alguns casos. 19
  • 20. 3 – Ligando os Blocos ▪ Vamos adicionar o campo “previous_hash” à classe do nosso bloco e vamos implementar a estrutura inicial da nossa classe Blcokchain. 20
  • 21. 3 – Ligando os Blocos 21
  • 22. 4 – Implementando o Proof of Work (POW) 22
  • 23. 4 – Implementando o Proof of Work (POW) ▪ Todavia, ainda há um problema… ▪ Se nós mudarmos o bloco anterior, nós podemos recomputar as hashes de todos os blocos seguintes de forma fácil, criando uma diferente, porém válida, blockchain. ▪ Para prevenir isso, nós devemos tornar a tarefa de computar a hash difícil e aleatória. 23
  • 24. 4 – Implementando o Proof of Work (POW) ▪ Em vez de aceitar qualquer hash para o bloco, nós adicionamos algumas restrições. ▪ Vamos adicionar uma restrição em que nossa hash deve começar com 2 zeros. ▪ Também, nós sabemos que há não ser que mudemos o conteúdo do bloco, a hash não irá mudar. 24
  • 25. 4 – Implementando o Proof of Work (POW) ▪ Então nós vamos adicionar um novo campo no nosso bloco chamado nonce. ▪ O nonce é um número que iremos alterar até encontrarmos uma hash que atenda à nossa restrição. ▪ O número de zeros iniciais (2, no nosso caso) decide a dificuldade do nosso algoritmo de “Prova de Trabalho”. ▪ Você deve ter percebido que nosso algoritmo Proof of Work é difícil de computer, mas fácil de verificar, uma vez que encontramos o nonce. ▪ Para verificar, basta você rodar o cálculo de hash novamente. 25
  • 26. 5 – Adicionando Blocos à cadeia ▪ Para adicionar um bloco à cadeia ▫ Primeiro temos que verificar se o Proof of Work provido pelo bloco está correto ▫ E se o campo previous_hash do bloco a ser adicionado aponta para a hash do último bloco da nossa cadeia. 26
  • 28. 6 - Mineração ▪ Na maior parte das criptomoedas, incluindo Bitcoin, mineradores são premiados com algumas criptomoedas como recompensa pelo poderio computacional despendido para computar a Proof of Work. 28
  • 29. 7 – Tenha Interfaces ▪ Vamos criar interfaces para o nosso Nó interagir com outros Peers assim como também com a aplicação que iremos construir. ▪ Iremos usar Flask para criar uma API REST para interagir com nosso nó. 29
  • 30. 8 – Consenso e Descentralização ▪ O código que implementamos até agora é feito para rodar em um único computador. ▪ Mesmo que estejamos conectando blocos com hashes, ainda não podemos confiar uma única entidade. ▪ Nós precisamos de vários nós para manter nossa blockchain. ▪ Então, vamos criar um endpoint para permitir a um nó conhecer outros peers na rede. 30
  • 31. 8 – Consenso e Descentralização ▪ Há um problema com múltiplos nós. ▪ Devido a manipulações intencionais ou razões não-intencionais ▫ A cópia de cadeias de alguns nós podem divergir. ▪ Precisamos concordar sobre alguma versão da cadeia de forma a manter a integridade do sistema como um todo. ▫ Nós precisamos alcançar o consenso. 31
  • 32. 8 – Consenso e Descentralização ▪ Um algoritmo simples de consenso: ▫ Concordar com a maior cadeia válida, quando as cadeias de diferentes participantes na rede parecem divergir. ▪ A razão por trás dessa abordagem é que a maior cadeia é uma boa estimativa da maior parte do trabalho feito. 32
  • 33. 8 – Consenso e Descentralização ▪ Precisamos desenvolver uma forma para que qualquer nó anuncie à rede que minerou um bloco ▪ Assim todos podem atualizar suas cadeias de blocos ▪ E continuar a minerar outras transações. ▪ Outros nós podem simplesmente verificar a Proof of Work e adicionar ela a suas respectivas cadeias. 33
  • 37. 37
  • 38. Brasil e o Blockchain CPBA 2018 38