Criando um mecanismo de autenticação da Web no blockchain

Vivemos em uma era de conveniência e qualquer coisa que possa reduzir o tempo que leva para completar tarefas simples é abraçada de braços abertos.

Um dos exemplos mais relevantes no mundo online vem do reino da autenticação do usuário. Anteriormente, tínhamos que manter uma coleção de nossos IDs de usuário e senhas, agora podemos fazer o login de forma rápida e fácil através do Facebook, Google e uma série de outros serviços.

Mas isso é sábio e existem alternativas melhores?

Neste post, daremos uma olhada no estado atual da autenticação do usuário, bem como algumas alternativas interessantes que agora estão disponíveis devido à tecnologia blockchain.

Problemas com o status quo

Se você deseja desenvolver uma área restrita para usuários em seu site, você deve escolher se deseja desenvolver seu próprio sistema exclusivo de identificação, autenticação e autorização de usuários ou usar uma solução pronta.

Essa solução pronta assume que o usuário já possui uma conta em alguma plataforma (Facebook, Yahoo, Google, Outlook ou mesmo apenas um e-mail). Neste caso, você simplesmente usa o mecanismo apropriado (na maioria das vezes o Protocolo OAuth 2.0) para verificar se alguém que tenta fazer login em seu site usando um ID de usuário externo é esse mesmo usuário.

Opções de login social

Várias opções de login de contas sociais. Fonte: NPM

Esta opção é mais fácil de implementar, mas há um risco para o usuário. Se algo acontecer com sua conta principal (por exemplo, o Facebook bloqueia a conta sem motivo), ele também perderá o acesso às suas informações em seu site.

Além disso, se eu, como usuário, quiser fazer login em um site em que ainda não confio, serei confrontado com a necessidade de fornecer a esse site acesso às minhas informações pessoais. Isso inclui informações privadas, como meu nome, e-mail ou idade. Se o site só permite o login com uma conta externa, enfrento uma escolha bastante difícil.

Recuso-me a usar o site ou sacrifico minha privacidade.

A maioria dos usuários geralmente acaba sacrificando sua privacidade e anonimato pensando “Nada de ruim pode acontecer, não tenho nada a esconder”. Infelizmente, a maioria dos ataques direcionados a um usuário despreparado que resultam em perdas monetárias começam com palavras como:

“O que pode acontecer se eu enviar este código SMS a um funcionário do banco?” ou “É realmente tão ruim enviar esses cabeçalhos de solicitação a um funcionário de suporte técnico?”

Normalmente, aprende-se a resposta a essas perguntas quando é tarde demais.

Como o Ethereum pode ajudar

Já entendemos que existem três problemas principais:

  • O usuário não é obrigado a confiar no site que visita e deseja evitar o vazamento de seus dados pessoais
  • O site deseja usar um sistema de autenticação externa para evitar o armazenamento de dados do usuário e as despesas de segurança associadas
  • Os sistemas externos existentes, que fornecem aos sites a capacidade de autenticar os usuários, correm o risco de censura. Qualquer conta pode ser bloqueada a qualquer momento sem explicar os motivos para isso e muitas vezes sem a possibilidade de recuperação

No entanto, poderíamos usar uma rede segura e descentralizada, como a da Ethereum, a fim de auxiliar neste tipo de autenticação.

Afinal, trata-se de um par de chaves criptograficamente seguro no qual a chave pública representa o endereço da carteira, e a chave privada nunca é transmitida pela rede. Além disso, é conhecido apenas pelo seu proprietário e é possível utilizar criptografia assimétrica para autenticar usuários..

No caso mais simples, podemos usar o endereço da carteira Ethereum como um ID de usuário. No entanto, se o usuário perder o acesso à sua chave, ele também perderá o acesso ao sistema para sempre.

Da mesma forma, se a sua chave estiver de alguma forma comprometida e um hacker conseguir obtê-la, você não poderá mais usar a mesma chave para verificar a propriedade. O hacker pode simplesmente se disfarçar em todos os sites nos quais você se inscreveu.

Implementação EtherAuth

Houve uma proposta interessante que foi apresentada pela MixBytes equipe em um dos mais recentes hackathons Ethereum. Este era deles Contrato inteligente EtherAuth motor.

EtherAuth é uma tentativa de criar um protocolo de autenticação e login de site descentralizado. É análogo ao botão “Login com o Facebook” com o qual você provavelmente já se acostumou. É um contrato inteligente que armazenará IDs de usuário e seus endereços de carteira associados

Moscow Hackathon Mixbytes

Membros da equipe Mixbytes no Hackathon de Moscou. Fonte da imagem: Bankex

O ID do usuário é simplesmente uma string UTF-8 com tamanho variando entre 2 e 32 bytes. O próprio usuário o cria no início da carteira e depois o usará para entrar em qualquer site que suporte EtherAuth.

Também seria possível adicionar uma restrição aos possíveis caracteres incluídos na string. Pode-se restringi-lo a caracteres latinos e algarismos arábicos (subconjuntos de codificação ASCII de 7 bits) para limitar a possibilidade de criar IDs visualmente semelhantes.

Ao criar uma conta com EtherAuth, um par de chaves é criado. Você criará uma chave de autorização (authAddr) e uma chave para restaurar o acesso (recoveryKey). O nome “recoveryKey” talvez não seja o melhor, pois este endereço é usado para gerenciar a conta e não apenas para recuperação.

Quando criados, os dois endereços são iguais ao endereço da carteira que fez a primeira transação. Os usuários que se preocupam com sua segurança devem criar uma chave mestra separada e armazená-la em um local inacessível online.

Talvez seja mais seguro armazená-lo em um pedaço de papel em um armazenamento refrigerado. O armazenamento de papel depende do que é chamado de semente de recuperação. Sementes de recuperação são um conjunto de 12 palavras mnemônicas que, quando usadas, podem recriar os pares de chaves para sua carteira.

Se você for usar uma carteira para autenticação, também é recomendável usar um endereço separado daquele que guarda todos os seus Ether. Isso permite que você evite que qualquer hacker rastreie seu Authkey até a carteira com seus ativos. Por enquanto, você não pode criar um authKey e um recoveryKey separados ao criar uma conta. Isso é algo que pode ser atualizado em iterações posteriores do contrato inteligente. Se você quiser se proteger ainda mais, considere Serviços VPN.

Usando EtherAuth

Há uma página da web dedicada à interação do usuário com o contrato inteligente. Você pode criar uma conta lá, alterar as chaves ou excluí-la. Para trabalhar com isso, o usuário precisará instalar o conhecido plugin de navegador chamado MetaMask.

Claro, se você já é um usuário ávido da rede Ethereum, você já deve ter usado o MetaMask e provavelmente terá uma ideia de como ele interage com a rede.

O processo geral de autenticação do usuário usando EtherAuth é assim:

  • O site (backend) entra em contato com o contrato inteligente e recebe o endereço Ethereum do usuário
  • O site (backend) gera e registra uma mensagem e pede ao usuário para assinar esta mensagem com a ajuda do endereço authKey
  • O usuário que está no site (frontend) assina a mensagem usando o plugin MetaMask e a envia para o backend
  • O site (backend) verifica a assinatura e, se tudo estiver bem, ativa a sessão do usuário

É importante que as verificações de autenticação ocorram em um ambiente não controlado pelo usuário. Então, em outras palavras, todas as verificações devem ser concluídas em um servidor em vez de no navegador do usuário.

Entre os problemas, você pode encontrar a verificação de assinatura na parte do frontend. Nem todos os navegadores oferecem suporte a curvas elípticas. Pode ser resolvido adicionando uma função ao contrato inteligente que retorna o “Ecrecover” resultado da mensagem.

Identidade Online Única

Imagem via Fotolia

Como resultado, você tem uma prova de conceito viável de um sistema de autenticação descentralizado baseado em Ethereum e usado no plugin MetaMask. Este sistema ainda precisa de várias modificações para poder fornecer o anonimato do usuário. O usuário tem a oportunidade de restaurar o acesso em caso de perda da chave primária (mas não no caso de perda da chave de recuperação).

O sistema descentralizado não está sujeito à censura de grandes entidades, como Google ou Facebook. Se for necessário censurar algo, cada site deve implementá-lo de forma independente. No entanto, isso afetaria apenas a interação do usuário com esse site e não com outros.

A rede Ethereum atualmente tem velocidades de transação muito lentas (ao criar uma conta, o usuário pode ter que esperar alguns minutos), mas os sites podem obter os dados e verificar os usuários rapidamente.

Esta solução é bem dimensionada, porque há muitos nós de dados e qualquer pessoa pode adicionar outro a qualquer momento. A complexidade da implementação de tal solução para proprietários de sites não é maior do que a complexidade da implementação do OAuth 2.0.

Conclusão

É importante notar que este ainda é o estágio inicial do projeto e só recentemente foi proposto no hackathon.

Além disso, as taxas de adoção de Ethereum e criptomoedas em geral ainda é apenas uma fração daqueles que usam os gostos de Facebook e Google. Levará algum tempo até que as pessoas se sintam mais confortáveis ​​usando um endereço Ether do que sua conta do Facebook.

No entanto, as taxas de adoção de criptografia estão de fato crescendo e os escândalos de dados recentes no Facebook ajudaram a alienar um grande número de pessoas. Será interessante ver se a autenticação descentralizada pode ser uma alternativa viável.

Imagem em destaque via Fotolia

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me