DevSecOps

22 mai, 2019

Identidade decentralizada com Sovrin

100 visualizações
Publicidade

Um dos maiores problemas que temos, não só na Internet, mas também durante nossa vida desde os primórdios, é a autenticação.

Como você pode dizer que uma pessoa é ela mesma e não é mais ninguém? Como você garante que uma pessoa é quem diz ser? Como é possível confiar em alguém na Internet?

Existem várias formas de autenticarmos um usuário em um sistema online através de login e senha. Podemos também ter o login social (onde terceirizamos a confiança para um provedor maior). Também temos autenticações biométricas, e por aí vai.

O grande problema é que nada disso é 100% seguro. Sempre temos brechas, principalmente relacionadas com confiança.

O problema da confiança

Confiar ou não confiar no que alguém diz? Como podemos ter certeza de que um indivíduo é confiável ou não? A resposta que encontramos desde o início dos tempos é o que é chamado de cadeia de confiança.

A cadeia de confiança é um conceito bem simples. Eu confio em você se muitas pessoas também confiam. Basicamente este é o princípio que vem regendo economias, contratos, acordos e relações entre pessoas desde a idade antiga.

Por exemplo, o dinheiro que usamos hoje só funciona como funciona porque temos confiança que um pedaço de papel impresso por um órgão central tem algum valor. Como Yuval Harari cita em seu excelente livro: “Sapiens: Uma breve história da humanidade”:

  • “As pessoas estão dispostas a fazer coisas quando confiam no produto da imaginação coletiva. A confiança é a matéria-prima com que todos os tipos de dinheiro são cunhados. (…) o dinheiro é o mais universal e mais eficiente sistema de confiança mútua já inventado.”

Mas por que estou citando um livro de antropologia aqui, em um portal de tecnologia? Bom, para começar, todos os nossos softwares se resumem a pessoas – tudo o que criamos é para sanar uma necessidade bem real de uma ou mais pessoas.

Em segundo lugar, hoje, cadeias de confiança mútua são, basicamente, como toda a Internet. Você já ouviu falar em certificados digitais?

Certificados digitais

Um certificado digital é o que atesta que um website ou um servidor é quem ele diz ser. Ele faz isso através de CAs (Autoridades Certificadoras), e essas autoridades certificadoras possuem as chaves privadas de todos os certificados já emitidos por elas.

Estes certificados, por sua vez, emitem chaves públicas que podem ser utilizadas para criptografia assimétrica na comunicação online.

O modo como os certificados digitais garantem que um site representa ele mesmo é através de uma cadeia de confiança.

Você já chegou a entrar em um site e clicar no cadeado ao lado da sua barra de endereços para ver os detalhes de um certificado?

Veja que temos uma cadeia de certificados. O certificado da ponta é o certificado emitido para meu próprio site, pela CloudFlare. Mas como eu posso confiar na CloudFlare?

Bem, porque ela tem um certificado que foi assinado pela COMODO e, no topo da cadeia, temos a COMODO como CA, ou seja, eu confio na CloudFlare porque a COMODO confia nela e eu confio na COMODO como CA. Isso é cadeia de confiança pura e simples.

E no mundo real?

Bom, no mundo real as coisas são mais complicadas. Temos governos que nos dão confiança através de documentos, garantindo que somos nós mesmos.

Porém, o grande problema disso é que, enquanto uma chave privada de uma CA não pode ser fraudada (ou sua chave pública não iria verificar o certificado com sucesso), temos inúmeros casos de falsificação de documentos, o que não inspira muita confiança.

Além disso, um governo centralizador deveria ser completamente puro para poder garantir a confiança de seu povo, mas como todo governo é feito por pessoas, e pessoas não são puras, há grandes chances de esquemas internos e corrupção minarem essa confiança, uma vez que ele é o detentor de todo o tipo de informação.

Isto foi resolvido de forma impressionante com a criação das criptomoedas. Basicamente, a solução foi decentralizar tudo e deixar tudo exposto para que todos pudessem ver e auditar o que estava acontecendo – chamamos isso de Blockchain.

A Blockchain vem se mostrando um meio eficiente para manter a ordem e garantir autenticidade e transparência nas transações, contratos e o que quer que seja feito de maneira virtual hoje em dia. Por que não podemos aplicar esse sistema também para nossas identidades pessoais? Por isso apresento a vocês, o Sovrin.

Sovrin

Sovrin remete à palavra inglesa para “soberania” (sovereign), ele é uma rede de identidade de código aberto, construída sobre a tecnologia de open ledger, a mesma ideia por trás da blockchain.

Esta rede é pública e permissionada, significando que todos podem usar, mas todo o consenso das transações neste livro-caixa são governadas por uma fundação sem fins lucrativos, formada por dezenas de empresas, chamada Sovrin Foundation.

Neste artigo, vamos passar pelos conceitos mais básicos sobre o Sovrin e, se tudo correr bem, devemos continuar nossos estudos em artigos futuros. Usarei as imagens deste site, que possui um artigo muito bom sobre todo o funcionamento do Sovrin.

Para exemplificar como todo o sistema funciona, vamos ter uma pessoa chamada Jane, e vamos representar as interações de Jane com bancos, governos e etc.

Identidade

Na figura a seguir, temos a representação de como Jane vê sua identidade no Sovrin. Por enquanto não temos nada, mas tenha em mente que essa representação é a visualização consolidada de todos os tipos de provas, identificadores e posses que Jane tem espalhadas pela rede.

O mais importante disso tudo é que não estamos colocando todos os ovos na mesma cesta – partes da identidade de Jane podem estar armazenadas em outras redes, públicas ou privadas, de acordo com a necessidade.

Tudo isso é controlado pela SIDN (Sovrin Identity Network), que consiste em múltiplos nós distribuídos ao redor do globo, cada um com uma cópia deste livro-caixa, assim como temos no funcionamento, por exemplo, do Bitcoin.

Estes nós são administrados pelo que é chamado de administrador (steward, em inglês). Cada um desses stewards é incumbido com a tarefa de analisar e validar todas as transações na rede, e também a ordem que elas ocorreram.

Relações

O Sovrin mantém um registro do que é chamado de chaves e identificadores. Um dos maiores problemas com autenticação distribuída é que, geralmente, um identificador anônimo de uma pessoa costuma ser único, portanto, se a pessoa utilizar esse identificador em vários lugares, outras pessoas podem seguir os dados e correlaciona-los com a pessoa, o que é um grande problema para o anonimato e também para o controle dos dados de cada pessoa.

Por isso, o Sovrin permite que cada vez que Jane se relacionar com alguma outra entidade, ela gere um identificador diferente.

Cada identificador no Sovrin é tido como um criptônimo. Esses identificadores são criptografados com uma chave de assinatura, que é uma chave privada que Jane nunca vai compartilhar com ninguém, e podem ser verificados com uma chave de verificação, que nada mais é do que uma chave pública que pode ser compartilhada por Jane com todas as entidades que ela tem contato para que seja possível a verificação de seus identificadores. Para cada identidade gerada, temos sempre um par de assinaturas e verificação.

Além disso o Sovrin também suporta identificadores distribuídos, que não são criptografados, mas também possuem uma chave de verificação associada, de forma que é possível saber que aquele identificador (chamado de DID, Distributed Identifier) pertence a Jane.

No diagrama abaixo, a letra maiúscula representa a chave de verificação (pública), enquanto a letra minúscula representa a chave de assinatura (privada).

Vamos supor que Jane teve uma interação com seu banco. Ela compartilha com o banco a sua chave de verificação A. Esta chave foi criada especificamente para essa interação.

Para o banco, esta chave é a Jane – é dessa forma que ele vai saber quem é a Jane daqui pra frente, e ela poderá ser utilizada para verificar todas as transações que forem feitas por Jane com ele.

Da mesma forma, o banco compartilha sua chave de verificação K para que, assim como o banco, Jane também possa verificar as transações feitas. Diferentemente da chave de Jane, a chave K do banco é uma chave conhecida por todos, portanto, essa chave representa o banco para todo o mundo.

Reivindicações

Além de seus identificadores, Jane também possui o que podemos chamar de claims (vamos usar a palavra em inglês porque ela pode ter vários significados. Um deles, reivindicação).

Estes claims são muito importantes porque são garantias ou afirmações feitas por alguma entidade sobre si mesmo ou sobre outros. Por exemplo, quando você vai ao médico e pega um atestado, isso significa que o médico está afirmando e garantindo que você esteve lá, da mesma forma que você garante ao médico que você é você mesmo somente por estar presente.

Assim como o atestado médico é assinado, um claim também é assinado digitalmente através das chaves privadas e podem ser verificados com as chaves públicas correspondentes.

Existem dois tipos de claims. O “auto-assinado” (que estão representados pelos números 1 e 4 no diagrama a seguir). Estes claims representam asserções que Jane faz sobre si mesma, por exemplo, que o nome dela é mesmo Jane, que ela tem uma determinada idade, ou então seu sexo.

O segundo tipo de claim é o claim verificável. Estes claims são feitos por terceiros sobre Jane. No diagrama, este claim é o número 2, que foi atestado e assinado pelo governo local, e poderia ser, por exemplo, a carteira de motorista de Jane, dando a ela o poder de usar esses claims de terceiros para provar a alguém que, por exemplo, ela tem habilitação para dirigir, e este terceiro poderia verificar este claim através da chave de verificação do governo que, assim como a do banco, é conhecida por todos.

Assim como os documentos, claims podem ser revogados pelo emissor ou ter uma data de validade definida e imutável.

Veja que agora adicionamos mais alguns relacionamentos, entre Jane e seu empregador e sua escola, cada uma dessas interações gerou uma nova identidade de Jane que foi usada somente para aquela interação específica.

Cada claim no Sovrin é específico para uma identidade, que é o chamado assunto do claim. Por exemplo, o claim número 2 (que é a carteira de motorista de Jane) foi assinado pelo governo para Jane, portanto ele pode ser validado como sendo emitido pelo governo através de sua chave de verificação, e também como pertencente a Jane através da chave de verificação que ela enviou para o governo na hora da emissão, que foi a chave C.

Dessa forma, o governo pode assinar o claim 2 com sua chave de verificação (a chave G) e dizer que ele foi emitido para a chave C, que poderá ser verificada como pertencente a Jane.

Da mesma forma, Jane interagiu com sua escola, que emitiu o claim 5, que é sua matrícula representada pela definição (claim definition) 5, este que foi assinado com a chave S da escola contendo a chave D da identidade de Jane, que foi criada somente para esta ação.

Além de serem assinados por duas partes e pertencerem a uma identidade os claims, assim como os smart contracts que temos hoje, possuem um schema ou definição (que é representado pelo pentágono marrom). Esse schema define o que aquele claim é para todos que quiserem checá-lo.

Por exemplo, o governo atualmente emite um documento CNH que é específico de uma carteira de motorista, ele tem um tamanho, informações e cores específicas.

Da mesma forma, um claim tem campos específicos, gravados na rede pública, que o identificam como sendo do tipo CNH. Dessa forma, qualquer um que receber o claim 2 de Jane poderá facilmente identificá-lo como uma CNH.

Para finalizar, claims também possuem chaves que são atreladas a eles, como mostramos anteriormente. Dessa forma, qualquer uma das partes pode validar que o claim é legítimo. Todas as chaves de um claim são atreladas a quem o emitiu. No caso do número 2, a chave atrelada seria a chave do governo.

Veja que eu escrevi “chaves” – isso porque um claim pode ter suas chaves alteradas, mas todas as chaves anteriores são guardadas como histórico. Dessa forma, quem tiver um claim assinado por uma chave antiga ainda poderá verificar sua legitimidade.

Conclusão

Ainda não acabamos este assunto! Nos próximos artigos vamos discutir uma série de outros conceitos que vão construir o que chamamos de identidade distribuída através do Sovrin, porém, para que o artigo não fique muito grande, vamos parar por aqui!

Se você ficou interessado em saber mais sobre o Sovrin, entre no site da Sovrin Foundation e também leia os papers que deram origem a toda essa ideia:

Assim como as explicações que descrevem os modelos de criptografia e tolerância a falhas:

Aguardem!