Autor: Omer Shlomovits, ZenGo.
Threshold Signature Scheme (TSS) é uma primitiva criptográfica para geração e assinatura de chave distribuída. A utilização de TSS em clientes blockchain é um novo paradigma que pode proporcionar inúmeros benefícios, principalmente em termos de segurança. Num sentido mais amplo, o TSS pode influenciar o design de sistemas de gerenciamento de chaves (como carteiras criptografadas) e abrir caminho para o suporte nativo em casos de uso de DeFi. Dito isto, o TSS ainda é uma tecnologia nova, pelo que os riscos e limitações também devem ser considerados.
Neste artigo, abordaremos o que é um TSS, quais são as vantagens potenciais que ele traz para o espaço blockchain, como ele pode ser implementado em um cliente blockchain, como ele se compara ao compartilhamento de segredos Shamir e ao Multisig, quais são as diferentes maneiras de usar TSS para gerenciamento distribuído de chaves e, finalmente, discutiremos os riscos e limitações.
O poder da criptografia
Para entender o TSS, primeiro precisamos de algum conhecimento básico de criptografia. Desde a década de 1970, cada vez mais sistemas de Internet (como TLS e PGP) empregaram criptografia assimétrica, também conhecida como criptografia de chave pública (PKC). O PKC utiliza duas chaves: uma pública e outra privada. Embora a chave pública não seja secreta e possa ser publicada e usada por qualquer pessoa, a chave privada é uma informação secreta que representa a segurança do sistema.
Criptografia e assinaturas digitais são os dois usos mais comuns do PKC. Os esquemas de criptografia e assinatura digital dependem de conjuntos de três algoritmos. A primeira é a geração do par de chaves privada e pública, a segunda é a geração de um texto cifrado/assinatura e a terceira é o processo de descriptografia/verificação. No que diz respeito às assinaturas digitais, o algoritmo de assinatura exige que a chave privada, que é conhecida apenas pelo seu proprietário, produza uma assinatura única. A assinatura é anexada a uma determinada mensagem de forma que qualquer pessoa que possua a chave pública possa verificar sua autenticidade e exatidão.
Blockchain
Não há dúvida de que o blockchain é uma tecnologia muito poderosa. Ele fornece uma camada de consenso que organiza e registra eventos. Tal infra-estrutura dá-nos, a nós, os utilizadores, poder potencial para construir economias descentralizadas e até governos. Surpreendentemente, a criptografia necessária para executar uma blockchain básica pode ser baseada exclusivamente em assinaturas digitais. No contexto de uma blockchain, as chaves privadas representam identidades, enquanto uma assinatura é uma declaração pública ou reivindicação feita por uma identidade. A blockchain irá ordenar as declarações e validá-las de acordo com um conjunto de regras, que garantem, entre outras coisas, que as assinaturas sejam infalsáveis e corretas.
Em contraste com a criptografia mais clássica utilizada no blockchain, a moderna caixa de ferramentas criptográficas inclui alguns truques de mágica incríveis: provas de conhecimento zero, criptografia homomórfica e computação multipartidária, para citar alguns. Como vimos na última década, a pesquisa de blockchain impulsionou tremendamente a criptografia aplicada, com avanços recentes em todos os itens acima e muito mais.
Neste artigo, vamos nos concentrar em um único avanço: assinaturas de limite seguro (TSS) eficientes.
MPC e o esquema de assinatura de limite (TSS)
A computação multipartidária (MPC) é um ramo da criptografia que começou com o trabalho seminal de Andrew C. Yao, há quase 40 anos. 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 privadas.
Por exemplo, digamos que n funcionários de uma empresa desejam saber quem está recebendo mais, mas sem revelar uns aos outros o seu salário real. Aqui os insumos privados são os salários e a saída será o nome do funcionário com maior salário. Fazendo esse cálculo usando MPC, concluímos que nem mesmo um único salário vaza durante o cálculo.
As duas principais propriedades do MPC são correção e privacidade:
Correção: a saída produzida por um algoritmo está correta (conforme esperado).
Privacidade: os dados de entrada secretos que uma parte possui não vazariam para as outras partes.
Usaremos MPC para calcular uma assinatura digital de forma distribuída. Vamos ver como as propriedades acima podem ser aplicadas às assinaturas. Lembre-se que, para assinaturas, temos três etapas:
Geração de Chaves: o primeiro passo também é o mais complexo. Precisamos gerar uma chave que será pública e usada para verificar assinaturas futuras. Mas também precisamos gerar um segredo individual para cada parte, que chamaremos de compartilhamento secreto. Em termos de correção e privacidade, dizemos que a função produzirá a mesma chave pública para todas as partes, e um compartilhamento secreto diferente para cada uma, de modo que: (1) privacidade: nenhum dado de compartilhamento secreto seja vazado entre as partes, e (2) correção: a chave pública é uma função dos compartilhamentos secretos.
Assinatura: esta etapa envolve uma função de geração de assinatura. A entrada de cada parte será o seu compartilhamento secreto, criado como saída da etapa anterior (geração de chave distribuída). Há também uma contribuição pública conhecida por todos, que é a mensagem a ser assinada. A saída será uma assinatura digital, e a propriedade de privacidade garante que nenhum vazamento de compartilhamentos secretos ocorreu durante o cálculo.
Verificação: o algoritmo de verificação permanece como está no cenário clássico. Para ser compatível com assinaturas de chave única, qualquer pessoa com conhecimento da chave pública deverá ser capaz de verificar e validar as assinaturas. Isso é exatamente o que os nós de validação de blockchain fazem.
Esquema de assinatura de limite (TSS) é o nome que damos a esta composição de geração distribuída de chaves (DKG) e assinatura distribuída de um esquema de assinatura de limite.
Combinando TSS com blockchains
A maneira natural pela qual o TSS pode ser utilizado em um blockchain é alterando um cliente blockchain para gerar chaves e assinaturas usando TSS. Aqui, usamos o termo cliente 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 à chave privada por cálculos distribuídos.
Para explicar com mais detalhes, começamos descrevendo brevemente como novos endereços são criados no design clássico do blockchain. Simplificando, podemos criar um novo endereço gerando uma chave privada e, em seguida, calculando a chave pública a partir da chave privada. Finalmente, o endereço blockchain é derivado da chave pública.
Agora, usando o TSS, teríamos um conjunto de n partes computando conjuntamente a chave pública, cada uma detendo 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 o blockchain agnóstico em relação à forma como o endereço é gerado. A vantagem é que a chave privada não é mais um ponto único de falha porque cada parte detém apenas uma parte dela.
O mesmo pode ser feito ao assinar transações. Neste caso, em vez de uma única parte assinar com a 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 um número suficiente delas aja honestamente. Novamente passamos da computação local (ponto único de falha) para uma computação interativa.
É importante mencionar que a geração de chaves distribuídas pode ser feita de forma a permitir diferentes tipos de estruturas de acesso: a configuração geral “t de n” será capaz de suportar até t falhas arbitrárias em operações relacionadas a chaves privadas, sem comprometendo a segurança.
TSS x Multisig
Alguns blockchains oferecem funcionalidade TSS como parte integrada ou programável do software. Chamamos essa funcionalidade de multisig ou multiassinatura. Para entender melhor as diferenças, podemos olhar para o multisig como um TSS na camada de aplicação do blockchain.
Em outras palavras, tanto o multisig quanto o TSS estão essencialmente tentando atingir objetivos semelhantes, mas o TSS está usando criptografia fora da cadeia, enquanto o multisig acontece na cadeia. No entanto, o blockchain precisa de uma forma de codificar multisig, o que pode prejudicar a privacidade porque a estrutura de acesso (número de assinantes) está exposta no blockchain. O custo de uma transação multisig é maior porque as informações sobre os diferentes signatários também precisam ser comunicadas no blockchain.
No TSS, os detalhes dos signatários são incorporados em uma transação normal, reduzindo custos e mantendo a privacidade. Por outro lado, o multisig pode ser não interativo, o que evita o trabalho de executar uma camada de comunicação complexa entre os diferentes signatários.
O principal ponto de diferença é que o multisig é específico do blockchain e precisa ser reimplementado para cada blockchain e, em alguns casos, não é compatível. Por outro lado, o TSS depende de criptografia pura, portanto o suporte é sempre possível. Um ótimo artigo com ilustrações sobre as diferenças pode ser encontrado aqui.
Esquema de compartilhamento de segredos TSS vs. Shamir
O esquema de compartilhamento secreto Shamir (SSSS) fornece uma maneira de armazenar a chave privada de maneira distribuída, de modo que, enquanto a chave privada estiver em repouso, ela será armazenada em vários locais. Existem duas diferenças entre SSSS e TSS:
Geração de Chave: no SSSS, existe uma única parte chamada “o revendedor” que é responsável por gerar os compartilhamentos secretos da chave privada. Isso significa que no momento da geração da chave, a chave privada é gerada em um único local e depois distribuída pelo revendedor para os diferentes locais. No TSS, não há revendedor, pois sua função é distribuída 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 novamente resulta em um único ponto de falha cada vez que uma assinatura é necessária. No TSS, a assinatura é feita de forma distribuída, sem nunca reconstruir os compartilhamentos secretos.
Como podemos ver, no TSS a chave privada (que representa a segurança do sistema) nunca está num único local durante toda a sua vida útil.
Carteiras de limite
Uma carteira baseada na tecnologia TSS é um pouco diferente das carteiras tradicionais de criptomoedas. Normalmente, uma carteira convencional gera uma frase-semente e a utiliza para derivar deterministicamente os endereços. Posteriormente, o usuário pode usar essa estrutura hierárquica determinística (HD) para 1) alcançar as chaves privadas que correspondem aos endereços da carteira e assinar transações com elas e 2) recuperar todas as chaves da carteira usando a frase inicial.
Em uma carteira limite, as coisas são mais complexas. Embora seja possível gerar uma estrutura HD, sua geração deve ser computada de forma distribuída, como outro protocolo MPC. As partes precisam decidir em conjunto qual será a próxima chave a ser utilizada. Em outras palavras, cada parte terá uma frase-semente própria. As frases-semente são geradas separadamente e nunca combinadas, de modo que uma parte sozinha não possa derivar as chaves privadas de sua semente.
As carteiras baseadas em TSS também possuem um recurso de segurança interessante, que permite a rotação de chave privada sem alterar a chave pública correspondente e o endereço do blockchain. A rotação de chave privada, também conhecida como compartilhamento proativo de segredo, é outro protocolo MPC que utiliza os compartilhamentos secretos como entrada e gera um novo conjunto de compartilhamentos secretos. Os antigos compartilhamentos secretos podem ser excluídos e os novos podem ser usados da mesma forma.
Essa estrutura adiciona uma dimensão temporal à segurança, o que significa que um invasor deve estar em vários locais ao mesmo tempo para atacar uma carteira limite. Combinar compartilhamentos secretos antes e depois da rotação não dará ao invasor nenhum poder extra se quiser forjar uma assinatura.
Uma desvantagem desse tipo de carteira é que a falta de uma frase inicial a torna incompatível com sistemas de carteira de chave única. Portanto, é importante considerar quais partes deterão as ações secretas.
Existem algumas arquiteturas possíveis:
Terceirização de TSS: o usuário permitirá que “n” servidores executem a computação em seu nome. Terceirizar efetivamente a geração, gerenciamento e assinatura de chaves para provedores de serviços que não são os proprietários dos ativos, mas que fornecem uma camada de segurança em troca de algum incentivo.
Usando vários dispositivos: o usuário executará o TSS entre os dispositivos de sua propriedade. Por exemplo - uma parte será algum dispositivo IoT, outra parte será o usuário móvel, outra parte será seu laptop e assim por diante.
Híbrido: o TSS será 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 descarrega a computação pesada do TSS do lado do usuário-cliente. Por outro lado, os prestadores de serviços podem conspirar (presumimos que um número suficiente deles não são atacados ao mesmo tempo, mas na prática, podem) e roubar os bens do utilizador.
O segundo método dá ao usuário controle total, mas dificulta a realização de transações, pois você precisa de vários dispositivos para ficar on-line e interagir com o cálculo do TSS.
A terceira opção é considerada o melhor dos dois mundos, pois oferece ao usuário uma maneira fácil e rápida de realizar transações, mas sem comprometer a realização de transações sem a autorização do usuário.
TSS e contratos inteligentes
Ao longo dos anos, os pesquisadores descobriram muitos usos para assinaturas digitais, e alguns são surpreendentemente não triviais. Conforme mencionado, o TSS é uma primitiva criptográfica que pode aumentar significativamente a segurança. No contexto dos blockchains, podemos dizer que muitas funcionalidades podem ser substituídas pela criptografia baseada em TSS. Aplicativos descentralizados, soluções de escalonamento de camada 2, trocas atômicas, mixagem, herança e muito mais podem ser construídos em cima de uma estrutura TSS. Isso acabaria por permitir que operações caras e arriscadas de contratos inteligentes em cadeia fossem substituídas por alternativas mais baratas e confiáveis.
Para dar alguns exemplos concretos: Multi-Hop Locks utiliza assinaturas de duas partes de uma forma inteligente e pode ser usado como uma alternativa à rede relâmpago Bitcoin com uma rede de canais de pagamento mais segura e privada. ShareLock é provavelmente a solução de mixagem on-chain mais barata para Ethereum, com base na verificação de uma única assinatura de limite.
Riscos
Nos últimos anos, houve um aumento significativo nas implementações de TSS. No entanto, por ser uma tecnologia relativamente nova, ainda apresenta algumas limitações e preocupações. Comparados à criptografia clássica de chave pública, os protocolos TSS podem ser muito complexos e ainda precisam ser “testados em batalha”. Normalmente, o TSS requer suposições criptográficas adicionais e mais fracas em comparação com assinaturas digitais simples. Como resultado, vetores de ataque criptográficos que não existiam nas configurações tradicionais estão sendo descobertos (veja esta apresentação da Breaking Bitcoin Conference 2019). Engenheiros de segurança e criptógrafos aplicados podem ajudar na implantação segura do TSS em seu sistema.
Do lado positivo, as implementações existentes e novas estão a tornar-se mais fortes devido a um aumento nas contribuições de qualidade, revisões por pares, auditorias e melhorias no desempenho algorítmico.
Pensamentos finais
Neste artigo, apresentamos os fundamentos do esquema de assinatura de limite (TSS), que é uma primitiva criptográfica fascinante que tem o potencial de mudar significativamente a forma como usamos o blockchain.
Como este artigo não discutiu o Limite ECDSA que pode ser usado em Binance Chain e Bitcoin, os interessados podem consultar a seguinte lista de artigos recentes. Além disso, se você quiser brincar com algumas implementações de TSS, você pode encontrar um código para a carteira Binance Chain bipartida aqui ou experimentar a carteira ZenGo, que utiliza o método híbrido para fornecer uma carteira Binance Chain bipartida sem custódia.
Leitura adicional:
Assinatura ECDSA bipartida rápida e segura
ECDSA multipartidária rápida e segura com geração prática de chaves distribuídas e aplicações para custódia de criptomoedas
ECDSA bipartido de sistemas à prova de hash e instanciações eficientes
ECDSA de limite multipartidário rápido com configuração rápida e confiável
ECDSA de limite bipartido seguro a partir de suposições de ECDSA
Limiar ECDSA das Suposições ECDSA: O Caso Multipartidário