• Nenhum resultado encontrado

2.3   Soluções Descentralizadas

2.3.2   Identidade Descentralizada

As   técnicas   para   prover   identidades   descentralizadas   buscam construir     identificadores   que   sejam   únicos   e   possam   ser   verificados   de 12 github.com/savoirfairelinux/opendht

13 tox.chat/faq.html#techfaq 14 twister.net.co/?page_id=25 15 yacy.net/en/Technology.html

forma segura, e que não dependam de uma entidade ou organização central para   a   geração   ou   verificação   delas.   Além   disso   essas   técnicas   buscam construir meios para associar a esses identificadores, nomes significativos para humanos e que possam ser lembrados por eles. A base principal para essas técnicas são algoritmos de criptografia (seção 2.3.2.1). Eles proveem os aspectos  de segurança e unicidade dessas identidades. Sobre eles outras soluções são criadas para permitir associar nomes significativos a humanos, como   as   apresentadas   nas   seções  2.3.2.2  e  2.3.2.3.   Além   disso,   são apresentadas algumas técnicas complementares na seção 2.3.2.4.

2.3.2.1  Criptografia para gerenciar identidades descentralizadas

A criptografia pública ou assimétrica é o principal fundamento para a criação   de   identidades   descentralizadas.   Ela   permite   que   usuários   gerem identidades   de   forma   independente,   com   chances   mínimas   de   conflito,   e provê   meios   para   que   essas   identidades   possam   ser   comprovadas,   sem precisar de uma “terceira parte confiável”.

A base da criptografia assimétrica está na capacidade de utilizar pares de chaves, uma chave pública e uma privada, que permitem a dois pares trocarem dados encriptados sem precisar concordar em uma chave secreta previamente.   Além   de   algoritmos   de   encriptação,   duas   outras   classes   de algoritmos   estão   relacionadas   a   esse   tipo   de   criptografia:   algoritmos   de assinatura e algoritmos de troca de chaves (HOUTVEN, 2017). Algoritmos de assinatura permitem utilizar uma chave privada para autenticar uma determinada mensagem. Isto é, um valor (a assinatura) é gerado a partir de uma entrada, de modo que é possível verificar, através da chave pública relacionada e da entrada utilizada, que a assinatura foi gerada a partir daquela chave. Simultaneamente, a assinatura permite verificar a integridade dos dados assinados.

Os   algoritmos   de   troca   de   chaves   permitem   a   dois   pares compartilharem uma chave secreta, de forma confidencial, através de um meio   inseguro.   Eles   devem   ser   utilizados   em   conjunto   com   técnicas   de

autenticação para garantir que a troca de chaves foi efetuada com o par desejado.   Caso   contrário,   ataques   de   interceptação   (man­in­the­middle) poderão ser efetuados. Isto é, um atacante pode interferir na comunicação de dois pares durante a troca de chaves, de modo a permitir monitorar e até alterar os dados enviados.

Além   desses   algoritmos,   o   uso   de   criptografia     pública   requer algoritmos   para   geração   do   par   de   chaves   utilizado.   Esses   algoritmos permitem   gerar   uma   chave   privada   e,   a   partir   dela,   uma   chave   pública matematicamente relacionada. O oposto, entretanto, não deve ser possível. Isto   é,   a  partir   de   uma  chave   pública   não   deve   ser   viável   gerar  a  chave privada   correspondente.   A   geração   dessas   chaves   também   deve   ser resistente   a   colisões,   acidentais   ou   intencionais.   Isto   é,   as   chances   para duas chaves idênticas serem geradas devem ser mínimas. Além disso, uma mesma chave pública não deve poder ser gerada a partir de chaves privadas diferentes.

Um   outro   elemento   importante   utilizado   em   conjunto   com   os algoritmos   descritos,   e   como   base   de   alguns   deles,   são   as   funções  hash criptográficas. Elas permitem gerar, a partir de uma entrada arbitrária, um valor   binário   (hash  ou  digest)   com   um   tamanho   fixo   de   acordo   com   o algoritmo. Esse valor é gerado de tal forma que para uma mesma entrada sempre   será   produzida   a   mesma   saída.   Porém,   qualquer   mudança   na entrada tende a gerar várias mudanças na saída. Além disso, os algoritmos utilizados tornam muito difícil que a entrada possa ser obtida a partir do seu hash, ou que seja gerada uma entrada tal que possua o mesmo valor de hash  de uma outra. Essas propriedades fazem com que as funções  hash criptográficas   sejam   utilizadas,   dentre   outras   coisas,   para:   prover   um identificador   único   e   compacto   para   arquivos   e   outros   tipos   de   dados;   e verificar a integridade de dados.

O Bitcoin16, uma moeda digital descentralizada, é um exemplo do uso de   técnicas   de   criptografia   para   gerenciar   identidades.   No   Bitcoin   a identidade de um usuário é dada em função de sua “carteira digital”. Cada carteira está associada  a pelo menos um  par de chaves criptográficas. A 16 bitcoin.org

partir de uma chave pública é gerado um identificador, utilizando funções de hash, que serve de endereço para as transações monetárias. Além disso, a chave privada de uma carteira é utilizada para assinar as transações, que podem ser verificadas através das respectivas chaves públicas. 2.3.2.2  Blockchain e Identidade A blockchain é uma tecnologia desenvolvida para o Bitcoin que atua como um registro público, global e descentralizado de transações. Através de um processo chamado de mining (mineração), as transações são agrupadas em   blocos   e   publicadas   através   de   uma   rede  peer­to­peer.   Cada   bloco referencia o anterior, formando uma cadeia ou corrente de blocos (em inglês, blockchain).

A blockchain provê um mecanismo que permite com que todos os nós da rede utilizem uma base  de  dados consistente,  sem que  uma  entidade central   precise   regular   as   operações.   Para   isso,   todos   os   nós   da   rede verificam   a   validade   dos   blocos   publicados   e   descartam   blocos   inválidos (ANTONOPOULOS,   2015).   Dessa   forma,   possíveis   erros   ou   falsificações apenas não seriam propagados. Em alguns casos, entretanto, podem ocorrer divergências   (forks),   i.e.   mais   de   um   bloco   ou   cadeia   válidos,   com   um antecessor comum. Eventualmente, entretanto, a  blockchain  converge, pois os   nós   da   rede   passam   a   adotar   um   único   caminho,   aquele   com   maior “computação   acumulada”,   i.e.   com   maior   número   de   blocos (ANTONOPOULOS, 2015). Isso poderá ser decidido pela velocidade com que novos blocos forem adicionados a um fork ou outro.

O   mecanismo   da   blockchain   embora   tenha   sido   desenvolvido   para armazenar transações financeiras, pode ser adaptado a outros aplicações. Uma delas é o registro de nomes. Namecoin é um  fork  do Bitcoin que foi desenvolvido   para   isso,   i.e.   permitir   registrar   nomes   em   uma  blockchain. Assim, ele segue o mesmo princípio de funcionamento do bitcoin, porém ele permite   registrar   na  blockchain  nomes   arbitrários   e,   associados   a   eles, valores  de  até  520 bytes  (NAMECOIN).  Isso  permite  vincular a um nome

dados de uma identidade, como uma chave pública, ou mesmo um endereço de email.

Para permitir gerenciar os nomes, e.g. registrá­los ou atualizá­los, o Namecoin   utiliza   também   chaves   criptográficas   e   uma   moeda   própria, análogas   às   do   Bitcoin.   A   chave   permite   verificar   a   autoria   do   nome.   A moeda   permite   “comprar   nomes”,   mas   também   pode   ser   utilizada   para trocar por outras mercadorias, i.e. como uma moeda digital. A cada novo registro de nome é cobrada uma taxa fixa de 0.01 NMC (namecoins), o que equivale, no momento da escrita, a poucos centavos de Real. Esse valor é uma forma de limitar o “name squashing”, isto é, a aquisição de múltiplos nomes   ou   nomes   desejados   para   permitir   revender   no   futuro.   A   taxa   de registro é destruída após o registro. Isto é, ela não é transferida para mais ninguém. Além dessa taxa, é pago um valor pela transação, assim como no Bitcoin,   como   uma   recompensa   aos   mineradores,   que   verificam   as transações da rede. Essa taxa é variável, i.e. definida pelos usuários, mas influencia   o   quão   rápido   a   transação   será   inclusa   na  blockchain.   Para atualizar   ou   renovar   um   nome   é   cobrada   apenas   a   taxa   da   transação (NAMECOIN).

Graças   ao   uso   da  blockchain,   o   Namecoin   permite   solucionar   o triângulo   de   Zooko.   Isto   é,   através   dele   é   possível   registrar   nomes significativos para humanos, de forma segura e descentralizada. O Namecoin provê ainda uma alternativa ao DNS e às entidades certificadoras. Ele inclui um  TLD   alternativo,   o  “.bit”,   que   pode   ser   utilizado   para   resolver   nomes registrados na blockchain do Namecoin (utilizando um namespace específico para isso) em endereços, contanto que o cliente esteja configurado e possua os softwares adequados. O Namecoin apresenta, entretanto, algumas limitações. Uma delas é o tempo de atualização da blockchain. Devido a questões de segurança, cada bloco na blockchain precisa ser validado através de um algoritmo de “prova de trabalho” (Proof of Work), que é intencionalmente lento e custoso (sua verificação,   entretanto   é   rápida).   Isso   faz   com   que   atualizações   possam demorar a ser consideradas válidas. Além disso, o próprio custo em registrar

e   manter   os   nomes,   embora   seja   pequeno,   pode   servir   de   barreira   para usuários. Esse custo, por sua vez, não soluciona por completo o problema de name squashing, já que mesmo com um custo maior, o custo de revenda será ainda maior (NAMECOIN).

2.3.2.3 Petnames

Um  petname  é   um   nome   que   é   utilizado   para   se   referir   a   uma determinada entidade, mas que é único e significativo apenas de forma local, i.e.   para   aquele   que   o   definiu.   Sistemas   de   nome   seguros   podem   ser construídos  utilizando  petnames, ao associá­los a identificadores que são únicos  (globalmente)   e   que   não   podem   ser   forjados   ou   falsificados,   e.g. chaves criptográficas. Petnames funcionam de forma similar aos contatos de uma agenda telefônica. Mas, invés de facilitar o uso de números telefônicos, eles   simplificam   o   uso   de   chaves   criptográficas.  Petnames  devem   ter,   no contexto em que são utilizados, uma associação bidirecional um para um com   uma   chave  (STIEGLER,   2005),  de   modo   que   o   nome   possa   ser substituído pela chave e vice­versa. Isso evita possíveis ambiguidades para os usuários, e para o sistema.

Petnames provêem uma solução alternativa para o triângulo de Zooko. Isto é, eles combinam as características de chaves criptográficas, i.e. são globais   e   seguros,   com   o   uso   de   nomes   que   são   fáceis   de   lembrar significativos para humanos, mas com escopo local.

Uma   das   limitações   dos  petnames,   é   a   necessidade   dos   usuários definirem nomes para cada “entidade”, com qual eles interagem. Uma forma de lidar com isso é através do uso de “nomes propostos” (alleged names). Isto é, cada entidade pode definir uma sugestão de nome para associar a sua identidade. Outros usuários podem adotar   ou não o nome sugerido como um petname.

Um   outro   mecanismo   que   pode   contribuir   para   solucionar   essa limitação   é   a   possibilidade   de   importar   nomes   a   partir   de   contatos conhecidos.   Para   lidar   com   os   possíveis   conflitos   gerados,   o  Gnu   Name

System(GNS) adota o conceito de delegação de nomes. Isto é, os petnames de um “contato” podem ser referenciados utilizado o  petname  desse contanto como um  namespace. Por exemplo, se Bob for um contato registrado e ele tiver Alice como contato, ela pode ser referenciada por “alice.bob.gnu”. Os nomes   definidos   no   GNS   são   compatíveis   com   o  DNS.   Eles   utilizam   o pseudo­tld “.gnu” como base. O GNS utiliza uma DHT para registrar nomes públicos e permitir a resolução “transitiva”. Validade dos nomes é verificada através de assinaturas criptográficas (WACHS et al, 2014).

O   uso   de  petnames  pode   ainda   apresentar   limitações,   como   a necessidade   de   gerenciar   os   contatos   adicionados,   e   a   dificuldade   de   se referenciar a uma entidade em um contexto global, e.g. na Web, já que o nomes  são  relativos   a  cada  usuário.   Entretanto,  essa  solução  não  impõe nenhum custo para registrar ou manter nomes, como no Namecoin ou DNS, e   permite   potencialmente   aos   usuários   utilizarem   identificadores   mais significativos para eles. Além disso, ela não está exposta ao problema de name squashing, nem pode sofrer censura por um governo ou organização. O   Namecoin,   especificamente,   pode   estar   vulnerável   ao   controle   de   uma organização   ou   governo   caso   ele   obtenha   mais   de   50%   do   poder computacional dos mineradores. Mas isso é considerado improvável, devido ao poder computacional exigido. Além disso, interferências poderiam vir a ser percebidas através da análise da blockchain.

2.3.2.4  Técnicas auxiliares para representar e transmitir identidades

Além das soluções descritas, outras técnicas podem ser utilizadas em conjunto   para   simplificar   a   representação,   transmissão   e   verificação   de chaves criptográficas (especialmente) por usuários. Elas podem ajudar aos usuários transmitirem chaves de um sistema ou dispositivo para outro e verificarem a validade dessas chaves e se elas correspondem ao esperado, para evitar, por exemplo, erros ou ataques de phishing. O Base58check é um formato utilizado pelo Bitcoin para representar valores binários. Ele provê uma representação que é menos ambígua para

usuários e cuja validade pode ser verificada por  software, além de incluir metadados de forma compacta.  Esse formato é similar ao base64, i.e. utiliza caracteres ASCII para representar valores binários. Entretanto, ele elimina caracteres que possam ser confundidos, como zero e a letra 'O' ou um e letra 'l'   minúscula.   Dessa   forma,   usuários   podem   verificar   e   copiar   os   dados representados,   quando   necessário,   de   uma   forma   mais   simples.   Para verificar a validade do conteúdo, um prefixo é incluso com um checksum, calculado com base em funções hash. Além disso, o formato inclui um byte de   versão   que   permite   identificar   o   conteúdo   representado (ANTONOPOULOS, 2015).

Outra   forma   de   representar   chaves,   endereços,   ou   outros   dados binários, é através do uso de mnemônicos. Eles permitem converter uma quantidade de bytes em um conjunto de palavras ou frases. 4 little words17,

por   exemplo,   é   uma   proposta   para  representar   endereços   IPv4   utilizando quatro palavras da língua inglesa, de modo a facilitar a memorização deles. Para isso, cada valor possível de um byte, i.e. 256 valores, é mapeado a uma palavra diferente. Dessa forma, um endereço como “210.55.180.158”, por exemplo,   poderia  ser   representado   como   “ROOM   RED   LULU   IDEA”.   Uma proposta similar foi feita para utilizar com endereços '.onion' do Tor18. Como esses endereços tem um comprimento maior (80 bits), a proposta sugere, o uso de frases. Para isso, seriam utilizados “templates” com uma estrutura fixa   de   tipos   de   palavras,   e.g.   “<substantivo>   e   <substantivo>   <verbo> <adjetivo> <objeto>”, o que permitiria gerar sentenças mais legíveis.

Uma   possibilidade   para   auxiliar   usuários   a   reconhecerem   chaves criptográficos ou outros identificadores binários é o uso de técnicas para visualização de hashs (PERRIG e SONG, 1999), como os Identicons19. Essas técnicas permitem criar representações gráficas de um valor binário. Elas podem ser utilizadas para verificar chaves criptográficas e com isso ajudar a prevenir ataques como man­in­the­middle e phising.

Outras   técnicas   podem   ser   usadas   para   facilitar   a   transmissão   de chaves criptográficas ou outros identificadores, e.g. QR Code ou tags NFC. 17 blog.rabidgremlin.com/2010/11/28/4-little-words

18 gitweb.torproject.org/torspec.git/tree/proposals/194-mnemonic-urls.txt 19 en.wikipedia.org/wiki/Identicon

3  Âmbar: Serviço Multiplataforma De 

Documentos relacionados