Autor: Omer Shlomovits, ZenGo.

Threshold Signing Scheme (TSS) é um esquema criptográfico primitivo para gerar e assinar chaves distribuídas. Usar TSS em cálculos de blockchain é um novo paradigma que pode oferecer muitos benefícios diferentes, especialmente em termos de segurança. Ou seja, o TSS pode influenciar o design de sistemas de gerenciamento de chaves (como carteiras digitais) e liderar o campo de suporte local em casos de uso de DeFi. Dito isto, este TSS ainda é uma tecnologia nova, portanto os riscos e limitações também devem ser considerados ao utilizá-lo.

Neste artigo, abordaremos o que é TSS, quais vantagens potenciais ele pode trazer para o campo blockchain, como pode ser implementado no blockchain do Cliente, como se compara ao compartilhamento de segredos Shamir e Multisig, quais são as diferentes maneiras de usar TSS no gerenciamento de chaves distribuídas e, finalmente, discutimos seus riscos e limitações potenciais.

Papel da criptografia

Para entender o TSS, primeiro precisamos de algum conhecimento básico sobre criptografia. Desde a década de 1970, os sistemas da Internet têm usado cada vez mais criptografia assimétrica (como TLS e PGP), também conhecida como criptografia de chave pública (PKC). O PKC usa duas chaves: uma pública e outra privada. Embora a chave pública não seja secreta e possa ser compartilhada e usada por qualquer pessoa, a chave privada é uma informação confidencial que representa a segurança do sistema e não pode ser compartilhada.

Criptografia e assinaturas digitais são os usos mais comuns do PKC. Os esquemas de criptografia e assinatura digital são baseados em conjuntos de três algoritmos. A primeira é a geração do par de chaves privada e pública, a segunda é a geração do texto cifrado/assinatura e a terceira é o processo de descriptografia/verificação. Em relação às assinaturas digitais: O algoritmo de assinatura exige que uma chave privada conhecida apenas pelo seu proprietário crie uma assinatura única. Uma assinatura é anexada a uma mensagem específica de forma que qualquer pessoa que possua a chave pública possa verificar sua autenticidade e autenticidade.


Blockchain

Não há dúvida de que o blockchain é uma tecnologia extremamente poderosa. Ele fornece uma camada de consenso que organiza e registra eventos. Essas infra-estruturas dão aos utilizadores e até aos governos o poder potencial para construir economias descentralizadas. Surpreendentemente, a criptografia necessária para executar um blockchain simples só pode contar com assinaturas digitais. No blockchain, as chaves privadas representam identidades, enquanto as assinaturas são uma declaração pública ou reivindicação feita por uma identidade. A blockchain solicita e verifica dados de acordo com um conjunto de regras que garantem, entre muitas outras coisas, que as assinaturas sejam infalsáveis ​​e válidas.

A moderna caixa de ferramentas de criptografia inclui alguns truques de mágica interessantes, diferentemente da criptografia mais clássica usada no blockchain. Alguns exemplos desses truques incluem provas de conhecimento zero, criptografia homomórfica e computação multipartidária. Como vimos na última década, a pesquisa de blockchain impulsionou dramaticamente a criptografia aplicada com surpreendentes avanços recentes no conhecimento de todos os itens acima e muito mais. 

Neste artigo, vamos nos concentrar em uma das inovações, que são as assinaturas de limite seguro (TSS) eficazes.


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 grupo de partes que não confiam umas nas outras tenta calcular uma função sobre suas entradas, mantendo essas entradas privadas. 

Por exemplo, digamos que vários funcionários de uma empresa desejam saber quem recebe mais, mas sem revelar o salário real uns aos outros. Aqui o insumo especial são os salários e os constrangimentos serão o nome do funcionário com maior salário. Quando esse cálculo é realizado pelo MPC, o resultado é que nem um único salário é vazado durante o cálculo. 

As duas principais características do MPC são autenticidade e privacidade:

  • Correção: A saída gerada por um algoritmo está correta (conforme esperado).

  • Privacidade: Os dados confidenciais de entrada mantidos por uma parte não serão divulgados para outras partes.

Usaremos MPC para calcular a assinatura digital de forma distribuída. Vamos ver como as propriedades acima podem ser aplicadas às assinaturas. Para assinaturas, temos três etapas: 

  • Geração de chaves: A primeira etapa também é a mais complexa. Precisamos criar uma chave que será pública e usada para verificar assinaturas futuras. Mas também precisamos criar um segredo individual para cada parte participante, que chamaremos de segredo compartilhado. No contexto 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 ambos os seguintes: (1) Privacidade: nenhum dado sobre o compartilhamento secreto é vazado entre as duas partes e ( 2) Correção: A chave pública é função dos compartilhamentos secretos.

  • Assinatura: Esta etapa inclui a função de criação de uma assinatura. A contribuição de cada parte é a sua parte secreta, que é gerada como resultado da etapa anterior (geração de chave distribuída). Existe também uma entrada geral conhecida por todos que é a mensagem a ser assinada. A saída será uma assinatura digital e o recurso de privacidade garante que não ocorra vazamento de compartilhamentos secretos durante o cálculo.

  • Verificação: O algoritmo de verificação permanece o mesmo das configurações clássicas. Para ser compatível com assinaturas de chaves individuais, qualquer pessoa com conhecimento da chave pública deve ser capaz de verificar e autenticar as assinaturas. Isto é exatamente o que os nós de verificação de blockchain fazem.

Esquema de assinatura de limite (TSS) é o nome que damos à combinação de geração distribuída de chave (DKG) e distribuição de assinatura em um esquema de assinatura de limite.


Combinando TSS e blockchain

A maneira natural pela qual o TSS pode ser usado em um blockchain é alterando o cliente do blockchain para gerar chaves e assinaturas usando o TSS. Aqui usamos o termo cliente para nos referirmos a um conjunto de comandos que são executados por um nó completo. Na aplicação prática, a tecnologia TSS permite substituir todos os comandos relacionados à chave privada por cálculos distribuídos.

Para explicar isso com mais detalhes, começaremos com uma rápida descrição de como criar novos endereços em uma estrutura clássica de blockchain.  Simplificando, podemos criar um novo endereço gerando uma chave privada e depois calculando a chave pública a partir da chave privada. Finalmente, o endereço blockchain é derivado da chave pública.

Agora, usando o TSS, teremos um grupo de partes calculando em conjunto a chave pública. Cada parte participante detém uma parte secreta da chave privada (as partes individuais não são reveladas às outras partes participantes). Usando a chave pública, podemos derivar o endereço da mesma forma que no sistema tradicional, o que torna o blockchain um tanto neutro na forma como os endereços são gerados. A vantagem aqui é que a chave privada não é mais um ponto único de falha porque cada parte mantém uma parte dela. 

O mesmo pode ser feito ao assinar transações. Neste caso, em vez de uma parte assinar com a sua chave privada, executamos um gerador de assinatura distribuída entre várias partes. Até mesmo cada parte pode produzir uma assinatura válida, desde que um número suficiente de participantes aja honestamente. Passamos novamente de uma conta local (ponto único de falha) para uma conta interativa.

É importante notar que a geração de chaves distribuídas pode ser feita de forma a permitir diferentes tipos de acesso a elas: uma configuração genérica “t de n” será capaz de suportar até t falhas arbitrárias em operações relacionadas ao chave privada sem comprometer a segurança.


TSS vs. Multisig

Algumas redes blockchain oferecem funcionalidade TSS como parte integrada ou programável do software. Chamamos essa função de multisig ou multi-assinatura. Para entender melhor as diferenças podemos olhar para o multisig como um TSS na fase de implementação do blockchain.

Em outras palavras, tanto o multisig quanto o TSS tentam basicamente atingir objetivos semelhantes, mas o TSS usa criptografia fora da cadeia, enquanto o multisig usa criptografia on-chain. No entanto, o blockchain requer um método de criptografia multisig, o que pode comprometer a privacidade porque a estrutura de acesso (número de signatários) está exposta no blockchain. O custo de uma transação multisig é maior porque as informações nos dois sites diferentes também precisam ser comunicadas no blockchain.

No TSS, os dados dos signatários são incorporados em uma transação regular, o que reduz custos e mantém a privacidade. O Multisig, por outro lado, pode ser não interativo, o que evita o problema de executar uma camada de comunicação complexa entre diferentes sites.

O principal ponto de diferença é que o blockchain multisig precisa ser reimplementado em cada blockchain e, em alguns casos, não é suportado de forma alguma. Por outro lado, o TSS é baseado em criptografia pura, por isso é sempre suportável. Um ótimo artigo explicando as diferenças pode ser encontrado aqui.


TSS vs. Esquema de compartilhamento de segredos de Shamir

O esquema de compartilhamento secreto Shamir (SSSS) fornece uma maneira distribuída de armazenar a chave privada. Enquanto a chave privada está armazenada, ela é armazenada em vários locais. Existem duas diferenças entre SSSS e TSS:

  • Geração de Chave: No SSSS existe uma parte chamada “o revendedor” que é responsável por criar os compartilhamentos secretos da chave. Isso significa que no momento da geração da chave, a chave privada é gerada em um local e depois distribuída pelo distribuidor para os diferentes locais. Mas no TSS não há distribuidor porque sua função é distribuída de forma que a chave privada completa nunca esteja no mesmo lugar.

  • Assinatura: No SSSS, as partes devem reconstruir a chave privada completa para assinar, o que novamente leva a um único ponto de falha sempre que uma assinatura é necessária. Por outro lado, no TSS a assinatura é feita de forma distribuída sem recriar os compartilhamentos secretos.

Como vemos no TSS, a chave privada (que representa a segurança do sistema) nunca está no mesmo lugar durante toda a sua vida útil.


Governador de Limite

Uma carteira construída com tecnologia TSS é um pouco diferente das carteiras tradicionais de criptomoedas. Uma carteira tradicional normalmente cria uma frase-semente e a utiliza para derivar endereços de forma determinística. O usuário pode posteriormente utilizar a estrutura hierárquica determinística (HD) para 1) acessar as chaves privadas que correspondem aos endereços da carteira e assinar transações com elas. 2) Para recuperar todas as chaves da carteira usando a frase inicial.

Nas carteiras de limite, as coisas são mais complicadas. Embora seja possível criar uma arquitetura hierárquica determinística (HD), sua construção deve ser computada de forma distribuída como outro protocolo MPC. As partes envolvidas precisam tomar uma decisão conjunta sobre qual chave será usada a seguir. Em outras palavras, cada parte terá sua própria declaração inicial. As declarações iniciais são geradas separadamente e não são combinadas, de modo que nenhuma das partes sozinha possa deduzir as chaves privadas da declaração inicial.

As carteiras baseadas em TSS também possuem um recurso de segurança interessante que permite que a chave privada seja girada sem alterar sua chave pública e endereço de blockchain correspondentes. A rotação de chave privada, também conhecida como compartilhamento proativo de segredo, é outro protocolo MPC que aceita compartilhamentos secretos como entrada e gera um novo conjunto de compartilhamentos secretos. Os compartilhamentos secretos antigos podem ser excluídos e os novos compartilhamentos também podem ser usados ​​da mesma maneira.

Essa arquitetura adiciona uma dimensão temporal à segurança, o que significa que um invasor teria que estar em vários locais ao mesmo tempo para tentar hackear a carteira Threshold. A combinação de compartilhamentos secretos pré-rotação e pós-rotação não daria ao invasor nenhum poder adicional se ele quisesse falsificar uma assinatura. 

A desvantagem deste tipo de carteira é a falta de uma frase-semente que a torna incompatível com sistemas de carteira de chave única. Portanto, é importante decidir quais partes manterão o compartilhamento confidencial.

Existem algumas maneiras possíveis, como:

  • Terceirização de TSS: O usuário permitirá que “n” servidores executem a computação em seu nome. Terceirize efetivamente a criação, o gerenciamento e a assinatura de chaves para provedores de serviços que não sejam os proprietários dos ativos, mas que forneçam uma camada de segurança em troca de algum incentivo.

  • Usando vários dispositivos: o usuário executará o TSS nos dispositivos de sua propriedade. Por exemplo, uma parte seria um dispositivo IoT, outra parte seria um usuário de telefone celular, outro terceiro seria um laptop e assim por diante.

  • Sistemas Híbridos: O TSS será operado de forma que algumas partes sejam controladas por provedores de serviços externos, enquanto outras partes operem em seu próprio hardware.

O primeiro método descarrega o cálculo pesado de TSS no lado do usuário-cliente. Por outro lado, os prestadores de serviços podem conspirar (presumimos que um grande número deles não está sob ataque ao mesmo tempo, mas na prática podem ser atacados ao mesmo tempo) e roubar bens dos utilizadores.

O segundo método dá ao usuário controle total, mas torna o processo de transação complicado, pois você precisa de vários dispositivos para se conectar à Internet e participar da conta TSS.

A terceira opção é a melhor de ambas, pois oferece ao usuário uma maneira fácil e rápida de fazer transações sem o comprometimento de fazer transações sem a permissão do usuário.


TSS e contratos inteligentes 

Ao longo dos anos, os pesquisadores encontraram muitos usos para assinaturas digitais, mas alguns não são surpreendentes. Conforme mencionado anteriormente, o TSS é uma criptografia primitiva que pode aumentar a segurança de forma significativa. No contexto do blockchain, poderíamos dizer que muitas funções podem ser substituídas pela criptografia baseada em TSS. Aplicativos descentralizados, soluções de Camada 2 para escalonamento, trocas atômicas, embaralhamento, herança e muito mais podem ser construídos na estrutura TSS. Isto acabará por permitir que operações de contratos inteligentes caras e arriscadas sejam substituídas por alternativas mais baratas e mais confiáveis.

Para dar alguns exemplos concretos: Multi-Hop Locks usa assinaturas de duas partes de uma forma inteligente e pode ser usado para trocar a rede relâmpago do Bitcoin por uma rede de canais de pagamento mais segura e privada. ShareLock é provavelmente a solução de codificação de blockchain Ethereum mais barata, baseada na verificação usando uma única assinatura de limite.


Riscos

Nos últimos dois anos, houve um aumento significativo nas aplicações de TSS. Mas, como qualquer tecnologia relativamente nova, ainda apresenta algumas limitações e preocupações. Comparados à criptografia de chave pública tradicional, os protocolos TSS podem ser muito complexos e ainda não foram “testados em ação”. O TSS geralmente requer suposições criptográficas adicionais e mais fracas em comparação com assinaturas digitais simples. Como resultado, agora estão sendo detectados vetores de ataque criptográfico que não existiam antes em ambientes tradicionais (veja esta apresentação da Breaking Bitcoin Conference 2019). Engenheiros de segurança e criptógrafos aplicados podem ajudar a implementar o TSS com segurança em seu sistema.

Do lado positivo, as aplicações existentes e novas estão a tornar-se mais fortes devido ao aumento das contribuições de qualidade, às revisões por pares, à verificação cruzada e às melhorias de desempenho computacional utilizando algoritmos.


Pensamentos finais

Neste artigo, apresentamos os fundamentos do Threshold Signature Scheme (TSS), uma incrível primitiva de criptografia que tem o potencial de mudar drasticamente a forma como os blockchains são usados.

Como este artigo não discutiu o limite ECDSA que pode ser usado na Binance Chain e no Bitcoin, as pessoas interessadas podem ler os artigos da lista a seguir. Além disso, se você quiser experimentar algumas implementações de TSS, você pode encontrar o código para uma carteira Binance Chain de 2 partes aqui ou experimentar a carteira ZenGo, que usa o método híbrido de fornecer uma carteira Binance Chain de 2 partes.


Leitura aprofundada:

  • Assinatura rápida e segura de ECDSA de duas partes

  • ECDSA multipartidário rápido e seguro com geração prática de chaves distribuídas e aplicações para custódia de criptomoedas

  • ECDSA de duas partes de sistemas de prova de hash e instanciações eficientes

  • ECDSA de limite multipartidário rápido com configuração rápida sem confiança

  • Limiar seguro de duas partes ECDSA a partir de suposições ECDSA

  • Limiar ECDSA das suposições ECDSA: o caso multipartidário