O avanço da criptografia revolucionou a segurança na internet, possibilitando a utilização de algoritmos como a criptografia assimétrica, também conhecida como criptografia de chave pública (PKC). Essa técnica utiliza um par de chaves, uma pública e outra privada, para garantir a autenticidade e confidencialidade das informações. No contexto das blockchains, a segurança é um aspecto fundamental, e o uso de assinaturas threshold (TSS) surge como uma nova abordagem para a geração e assinatura distribuída de chaves.
Neste artigo, exploraremos o que é uma assinatura threshold, os potenciais benefícios que ela traz para o espaço das blockchains, como pode ser implementada em um cliente blockchain, as diferenças em relação ao esquema de compartilhamento de segredos de Shamir e às carteiras multissig, as diferentes formas de uso da TSS para a gestão distribuída de chaves, além de discutir os riscos e limitações dessa tecnologia.
O Poder da Criptografia
Antes de adentrarmos no conceito de assinaturas threshold, é importante compreendermos a criptografia de chave pública. Desde os anos 1970, a criptografia assimétrica tem sido amplamente utilizada em sistemas na internet, como o TLS e o PGP. Essa técnica utiliza um par de chaves, uma pública e outra privada, para criptografar e descriptografar informações, além de permitir a geração de assinaturas digitais.
Uma assinatura digital é gerada a partir do uso da chave privada, que pertence apenas ao seu proprietário. Essa assinatura é anexada a uma mensagem e, por meio da chave pública correspondente, qualquer pessoa pode verificar a autenticidade e integridade da mensagem.
O Papel das Blockchains
As blockchains são conhecidas por sua capacidade de fornecer um sistema de consenso distribuído, permitindo a criação de economias descentralizadas e governos virtuais. Surpreendentemente, a criptografia necessária para a execução de uma blockchain pode ser baseada exclusivamente em assinaturas digitais. Nesse contexto, as chaves privadas representam identidades, enquanto as assinaturas são declarações públicas feitas por essas identidades. A blockchain organiza e valida essas declarações de acordo com um conjunto de regras, garantindo que as assinaturas sejam corretas e invioláveis.
No entanto, a criptografia utilizada nas blockchains modernas vai além das assinaturas digitais. A pesquisa nessa área impulsionou avanços significativos na criptografia aplicada, incluindo provas de conhecimento zero, criptografia homomórfica e computação multipartidária.
Neste artigo, focaremos em uma dessas inovações: o esquema de assinaturas threshold (TSS).
Computação Multipartidária e o Esquema de Assinaturas Threshold (TSS)
A computação multipartidária (MPC) é um ramo da criptografia que se iniciou há quase 40 anos com o trabalho seminal de Andrew C. Yao. No MPC, um conjunto de partes que não confiam umas nas outras tenta calcular conjuntamente uma função sobre suas entradas, mantendo essas entradas em sigilo.
Por exemplo, suponha que n funcionários de uma empresa queiram descobrir quem recebe o salário mais alto sem revelar seus salários reais uns aos outros. Nesse caso, as entradas privadas são os salários e a saída será o nome do funcionário com o maior salário. Ao realizar esse cálculo usando MPC, nenhum salário será revelado durante o processo.
As duas principais propriedades do MPC são a correção e a privacidade:
- Correção: a saída produzida por um algoritmo é correta.
- Privacidade: os dados de entrada sigilosos de uma parte não serão revelados às outras partes.
No contexto das assinaturas digitais, podemos utilizar o MPC para calcular uma assinatura digital de forma distribuída. Para entendermos como isso é possível, vamos analisar as etapas envolvidas em uma assinatura digital:
- Geração de Chaves: essa é a etapa mais complexa. Precisamos gerar uma chave pública que será usada para verificar futuras assinaturas e também gerar uma chave secreta individual para cada parte envolvida. Em termos de correção e privacidade, podemos dizer que a função gerará a mesma chave pública para todas as partes e uma chave secreta diferente para cada uma, garantindo que: (1) não haja vazamento de informações sobre as chaves secretas entre as partes e (2) a chave pública seja uma função das chaves secretas.
- Assinatura: essa etapa envolve a geração de uma assinatura digital. A entrada de cada parte será a sua chave secreta, gerada na etapa anterior (geração distribuída de chaves). Além disso, todas as partes terão acesso à mesma mensagem que será assinada. A saída será uma assinatura digital, e a propriedade de privacidade garante que não haja vazamento das chaves secretas durante o processo de computação.
- Verificação: o algoritmo de verificação permanece o mesmo da configuração clássica. Para ser compatível com assinaturas de chave única, qualquer pessoa com conhecimento da chave pública deve ser capaz de verificar e validar as assinaturas. Isso é exatamente o que os nós de validação da blockchain fazem.
O esquema de assinaturas threshold (TSS) é o nome que damos a essa composição de geração de chaves distribuída (DKG) e assinatura distribuída.
Utilizando TSS em Blockchains
A forma natural de utilizar o TSS em uma blockchain é alterar o cliente da blockchain para gerar chaves e assinaturas usando o TSS. Aqui, utilizamos o termo “cliente da blockchain” para nos referirmos ao conjunto de comandos executados por um nó completo. Na prática, a tecnologia TSS nos permite substituir todos os comandos relacionados às chaves privadas por cálculos distribuídos.
Para entender melhor, vamos descrever brevemente como novos endereços são criados no design clássico de uma blockchain. Em resumo, podemos criar um novo endereço gerando uma chave privada e, em seguida, computando a chave pública a partir da chave privada. Por fim, o endereço da blockchain é derivado da chave pública.
Agora, utilizando o TSS, teríamos um conjunto de n partes calculando em conjunto a chave pública, cada uma mantendo uma parte secreta da chave privada (as partes individuais não são reveladas às outras partes). A partir da chave pública, podemos derivar o endereço da mesma forma que no sistema tradicional, tornando a blockchain independente da forma como o endereço é gerado. A vantagem é que a chave privada não é mais um único ponto de falha, pois cada parte possui apenas uma parte dela.
O mesmo pode ser feito ao assinar transações. Nesse caso, em vez de uma única parte assinar com sua chave privada, executamos uma geração de assinatura distribuída entre várias partes. Assim, cada parte pode produzir uma assinatura válida, desde que o número mínimo de partes esteja agindo de forma honesta. Mais uma vez, passamos de uma computação local (ponto único de falha) para uma computação interativa distribuída.
É importante mencionar que a geração distribuída de chaves pode ser realizada de maneira a permitir diferentes estruturas de acesso. A estrutura geral “t de n” será capaz de suportar até t falhas arbitrárias nas operações relacionadas às chaves privadas, sem comprometer a segurança.
TSS vs. Multisig
Algumas blockchains oferecem a funcionalidade de TSS como parte integrada ou programável do software. Chamamos essa funcionalidade de “multisig” ou “multisignatura”. Para entender melhor as diferenças, podemos considerar o multisig como um TSS na camada de aplicação da blockchain.
Em outras palavras, tanto o multisig quanto o TSS têm o objetivo de alcançar metas semelhantes, mas o TSS utiliza a criptografia fora da blockchain, enquanto o multisig acontece na blockchain. No entanto, a blockchain precisa ter uma forma de codificar o multisig, o que pode comprometer a privacidade, pois a estrutura de acesso (número de assinantes) é exposta na blockchain. O custo de uma transação multisig é maior porque as informações sobre os diferentes assinantes também precisam ser comunicadas na blockchain.
No TSS, os detalhes dos assinantes são incorporados a uma transação comum, reduzindo o custo e mantendo a privacidade. Por outro lado, o multisig pode ser não interativo, o que evita a necessidade de executar uma camada de comunicação complexa entre os diferentes assinantes.
A principal diferença é que o multisig é específico para cada blockchain e precisa ser reimplementado para cada uma delas, e, em alguns casos, não é suportado de forma alguma. Por outro lado, o TSS se baseia puramente na criptografia, o que torna o suporte sempre possível.
TSS vs. Esquema de Compartilhamento de Segredos de Shamir
O esquema de compartilhamento de segredos de Shamir (SSSS) permite armazenar a chave privada de forma distribuída, de modo que, enquanto a chave privada estiver em repouso, ela seja armazenada em várias localizações. Existem duas diferenças entre o SSSS e o TSS:
- Geração de Chaves: no SSSS, há uma única parte chamada “o distribuidor” que é responsável por gerar as partes secretas da chave privada. Isso significa que, no momento da geração de chaves, a chave privada é gerada em um único local e, em seguida, distribuída pelo distribuidor para as diferentes localizações. No TSS, não há um distribuidor, pois seu papel é distribuído entre as partes, de forma que a chave privada completa nunca esteja em um único local.
- Assinatura: no SSSS, as partes devem reconstruir a chave privada completa para assinar, o que resulta novamente em um único ponto de falha toda vez que uma assinatura é necessária. No TSS, a assinatura é realizada de forma distribuída, sem nunca reconstruir as partes secretas.
Como podemos observar, no TSS a chave privada (que representa a segurança do sistema) nunca está em um único local ao longo de sua vida útil.
Carteiras Threshold
Uma carteira baseada na tecnologia TSS é um pouco diferente das carteiras de criptomoedas tradicionais. Normalmente, uma carteira convencional gera uma frase de semente (seed phrase) e a utiliza para derivar de forma determinística os endereços. O usuário pode usar essa estrutura determinística hierárquica (HD) para 1) obter as chaves privadas correspondentes aos endereços da carteira e assinar transações com elas e 2) recuperar todas as chaves da carteira usando a frase de semente.
Em uma carteira threshold, as coisas são mais complexas. Embora seja possível gerar uma estrutura HD, sua geração deve ser realizada de forma distribuída, como outro protocolo MPC. As partes precisam decidir em conjunto qual será a próxima chave a ser usada. Em outras palavras, cada parte terá sua própria frase de semente. As frases de semente são geradas separadamente e nunca são combinadas, de modo que uma única parte não possa derivar as chaves privadas a partir de sua própria frase de semente.
As carteiras baseadas em TSS também possuem um recurso de segurança interessante: a capacidade de rotacionar a chave privada sem alterar o endereço da blockchain correspondente. A rotação da chave privada, também conhecida como compartilhamento secreto proativo, é outro protocolo MPC que leva as partes secretas como entrada e gera um novo conjunto de partes secretas. As partes secretas antigas podem ser excluídas e as novas podem ser usadas da mesma maneira.
Essa estrutura adiciona uma dimensão temporal à segurança, o que significa que um atacante precisa estar em várias localizações simultaneamente para atacar uma carteira threshold. Combinar partes secretas antes e depois da rotação não dá ao atacante nenhum poder extra se ele quiser forjar uma assinatura.
Uma desvantagem desse tipo de carteira é que a falta de uma frase de semente a torna incompatível com sistemas de carteiras de chave única. Portanto, é importante considerar quais partes terão as partes secretas.
Existem algumas arquiteturas possíveis:
- Terceirização do TSS: o usuário permite que “n” servidores executem o cálculo em seu nome, terceirizando a geração, gerenciamento e assinatura de chaves para provedores de serviços que não são os proprietários dos ativos, mas fornecem uma camada de segurança em troca de algum incentivo.
- Uso de dispositivos múltiplos: o usuário executa o TSS entre os dispositivos de sua propriedade. Por exemplo, uma parte pode ser um dispositivo IoT, outra parte pode ser o celular do usuário, outra parte seu laptop, e assim por diante.
- Híbrido: o TSS é executado de forma que algumas partes sejam controladas por provedores de serviços externos e outras partes sejam executadas em dispositivos de propriedade do usuário.
O primeiro método transfere a computação pesada do TSS do lado do cliente para os servidores de serviço. Por outro lado, os provedores de serviços podem se unir (assumimos que um número suficiente deles não seja atacado ao mesmo tempo, mas, na prática, isso pode ocorrer) e roubar os ativos do usuário.
O segundo método dá ao usuário controle total, mas torna a realização de transações complicada, pois são necessários vários dispositivos para conectar-se à internet e se envolver na computação do TSS.
A terceira opção é considerada a melhor das duas opções, pois oferece ao usuário uma forma fácil e rápida de realizar transações, sem comprometer a necessidade de transações serem feitas sem a autorização do usuário.
TSS e Contratos Inteligentes
Ao longo dos anos, pesquisadores encontraram muitos usos para assinaturas digitais, que vão além do contexto das transações financeiras. Como mencionado anteriormente, o TSS é uma primitiva criptográfica que pode aumentar significativamente a segurança.
No contexto das blockchains, podemos dizer que muitas funcionalidades podem ser substituídas por criptografia baseada em TSS. Aplicações descentralizadas, soluções de escalabilidade de segunda camada, atomic swaps, mistura de transações, herança e muito mais podem ser construídos sobre uma estrutura de TSS. Isso permitiria substituir operações caras e arriscadas de contratos inteligentes on-chain por alternativas mais baratas e confiáveis.
Para dar alguns exemplos concretos: o protocolo Multi-Hop Locks utiliza assinaturas de duas partes de forma inteligente e pode ser usado como uma alternativa à Lightning Network do Bitcoin, oferecendo uma rede de canais de pagamento mais segura e privada. O ShareLock é provavelmente a solução de mistura on-chain mais barata para o Ethereum, baseada na verificação de uma única assinatura threshold.
Riscos
Nos últimos anos, houve um aumento significativo na implementação de TSS. No entanto, por se tratar de uma tecnologia relativamente nova, ainda existem algumas limitações e preocupações. Em comparação com a criptografia pública clássica, os protocolos de TSS podem ser muito complexos e ainda precisam ser “testados em batalha”.
Geralmente, o TSS requer suposições criptográficas adicionais, mais fracas do que as utilizadas em assinaturas digitais simples. Como resultado, vetores de ataque criptográficos que não existiam em configurações tradicionais estão sendo descobertos. Engenheiros de segurança e criptógrafos aplicados podem auxiliar na implantação segura do TSS em um sistema.
Por outro lado, as implementações existentes e novas estão se tornando mais fortes devido ao aumento na qualidade das contribuições, revisões por pares, auditorias e melhorias no desempenho algorítmico.
Conclusão
Neste artigo, introduzimos os conceitos básicos do esquema de assinaturas threshold (TSS), uma primitiva criptográfica fascinante que tem o potencial de mudar significativamente a forma como usamos as blockchains.
Como este artigo não discutiu a Threshold ECDSA, que pode ser usada na Binance Chain e no Bitcoin, aqueles interessados podem consultar a lista de artigos recentes sobre o tema. Se você deseja experimentar algumas implementações de TSS, pode encontrar um código para uma carteira Binance Chain de duas partes aqui ou experimentar a carteira ZenGo, que utiliza o método híbrido para fornecer uma carteira Binance Chain de duas partes não custodial.
Perguntas Frequentes (FAQs)
O que são assinaturas threshold?
Assinaturas threshold são um método avançado de criptografia que permite a geração de uma assinatura válida a partir de um grupo de participantes, garantindo maior segurança e resistência a ataques.
Como as assinaturas threshold funcionam?
Elas funcionam distribuindo partes da chave de assinatura entre um grupo de participantes. Uma assinatura válida só pode ser gerada quando um número mínimo de partes colabora.
Quais são os benefícios das assinaturas threshold na segurança blockchain?
As assinaturas threshold oferecem resistência a ataques, redução de riscos e maior privacidade, tornando as operações blockchain mais seguras e confiáveis.
Onde as assinaturas threshold podem ser aplicadas nas blockchains?
Elas podem ser aplicadas em contratos inteligentes, governança descentralizada e armazenamento seguro de chaves, entre outras aplicações.
Como as assinaturas threshold estão contribuindo para uma nova era de segurança na blockchain?
As assinaturas threshold estão introduzindo uma abordagem mais robusta e colaborativa para a segurança blockchain, aumentando a proteção contra ameaças e riscos.