Neste artigo, explicaremos o que é o TSS, quais as potenciais vantagens que ele traz para o campo da blockchain, como pode ser implementado em um cliente blockchain, como é comparado aos sistemas Shamir secret sharing e Multisig, quais as diferentes formas de uso do TSS para a gestão de chaves distribuída e, finalmente, discutiremos sobre seus riscos e limitações.
O poder da criptografia
Blockchain
Neste artigo, concentraremos a nossa atenção em um único avanço: assinaturas com limite (TSS) seguras e eficazes.
MPC e o esquema de assinatura com limite (TSS)
A computação de múltiplas partes (MPC) é um ramo da criptografia que começou com o trabalho de Andrew C. Yao, há quase 40 anos. Na MPC, um grupo composto por partes ou agentes que não confiam uns nos outros, tentam processar de forma conjunta uma função sobre seus inputs, mantendo a privacidade do conteúdo dos mesmos.
Como exemplo, digamos que os funcionários de uma empresa querem saber quem é o funcionário mais bem pago entre eles, mas sem que nenhum deles revele ao outro o seu salário. Aqui, as entradas privadas (inputs) são os salários e a saída (output) será o nome do empregado com o maior salário. A execução deste cálculo computacional usando MPC permite que nenhuma informação de salário vaze durante o processo.
As duas principais características da MPC são a exatidão e privacidade:
Exatidão: a saída (output) produzido por um algoritmo é correta (como previsto).
Privacidade: os dados secretos de entrada (input) que uma das partes mantém não vazam para as outras partes.
Usaremos a MPC para calcular uma assinatura digital de uma forma distribuída. Vejamos como as propriedades mencionadas se aplicam às assinaturas. Lembrando que, para assinaturas, temos três passos:
Geração da chave: o primeiro passo é também o mais complexo. Precisamos gerar uma chave que seja pública e utilizada para verificar futuras assinaturas. Mas também precisamos gerar um segredo individual para cada parte, que chamaremos de "secret share" (parte do segredo). Em termos de exatidão e privacidade, dizemos que a função irá produzir como output a mesma chave pública para todas as partes, e uma outra parte secreta (secret share) para cada um desses elementos de modo que: (1) privacidade: nenhum dos dados da parte secreta sejam divulgados entre as partes e (2) exatidão: a chave pública é uma função das partes secretas.
Assinatura: esta etapa envolve uma função para geração de assinatura. A entrada (input) de cada parte será sua parte secreta (secret share), criada como saída (output) da etapa anterior (geração de chaves distribuída). Existe também uma informação de entrada (input) pública conhecida por todos, que é a mensagem que deve ser "assinada" (confirmada). A saída (output) será uma assinatura digital, e a propriedade da privacidade garante que não ocorra nenhum vazamento de partes secretas durante o processo de computação dos dados.
- Verificação: o algoritmo de verificação permanece como está na configuração clássica. Para ser compatível com as assinaturas de chave única, todos os que tiverem conhecimento da chave pública devem ser capazes de verificar e validar as assinaturas. Isso é exatamente o que os nós de validação da blockchain fazem.
Threshold signature scheme (TSS) é o nome que damos a esse processo composto pela geração de chaves distribuídas (DKG) com a assinatura distribuída de um esquema de assinaturas com limite.
Combinação do TSS com blockchains
Para explicar mais detalhes, começaremos descrevendo brevemente como novos endereços são criados no esquema clássico da blockchain. Basicamente, podemos criar um novo endereço gerando uma chave privada para depois computar a chave pública a partir dessa chave privada. Por fim, o endereço público será um derivado da chave pública.
Assim, usando o esquema TSS, teríamos um conjunto de "n" partes, cada uma delas na posse de uma "secret share" da chave privada, que computaria conjuntamente a chave pública (sem revelar as partes secretas individuais entre si). Da chave pública, podemos extrair o endereço público da mesma forma que no sistema tradicional, fazendo com que a blockchain seja indiferente em relação à maneira que o endereço foi criado. A vantagem é que a chave privada não é mais um único ponto de falha porque cada uma das partes tem apenas uma parcela dela.
O mesmo pode ser feito ao assinar (validar) transações. Neste caso, em vez de uma única parte assinar com a sua chave privada, realizamos uma geração de assinaturas distribuída entre múltiplas partes. Assim, cada uma das partes pode produzir uma assinatura válida, contanto que um número suficiente das partes esteja agindo honestamente. Ou seja, novamente passamos de um método de computação local (ponto único de falha) para um método interativo.
É importante mencionar que a geração de chaves distribuídas pode ser feita de uma maneira que permite diferentes tipos de estruturas de acesso: a configuração geral “t out of n” será capaz de suportar, sem comprometer a segurança, até "t" falhas arbitrárias em operações relacionadas à chave privada.
TSS vs. Multisig
Em outras palavras, tanto o multisig como o esquema TSS tentam, essencialmente, alcançar os mesmos resultados. Entretanto, o TSS usa criptografia off-chain (fora da cadeia), enquanto o multisig ocorre on-chain (na cadeia). No entanto, a blockchain precisa de uma maneira de codificar o multisig. Isso pode prejudicar a privacidade porque a estrutura de acesso (número de assinaturas) é exposta na blockchain. O custo de uma transação multisig é maior porque a informação sobre os diferentes assinantes (validadores) também deve ser comunicada na blockchain.
Em TSS, os dados dos assinantes’ são guardados em uma transação de aparência regular, reduzindo o custo e mantendo a privacidade. Por outro lado, o multisig pode ser não interativo, o que resolve o problema de executar uma complexa camada de comunicação entre os diferentes assinantes.
TSS vs. Shamir secret sharing scheme
O esquema de compatilhamento de segredos de Shamir (SSSS) fornece uma maneira de armazenar a chave privada de uma forma distribuída, de modo que enquanto a chave privada for mantida em repouso ela é mantida em múltiplas localizações. Existem duas diferenças entre SSSS e TSS:
Geração de chave: no esquema SSSS, há uma única parte chamada de “the dealer” que é responsável por gerar as partes secretas (secret shares) da chave privada. Isso significa que, no momento da geração de chave, a chave privada é gerada em um único local e depois distribuída pelo dealer para diferentes locais. No TSS, não há nenhum dealer, uma vez que essa função é feita de modo a que a chave privada completa nunca esteja em uma única localização.
Assinatura: em SSSS, as partes devem reconstruir a chave privada completa para assinar, o que mais uma vez resulta em um único ponto de falha para cada vez que uma assinatura é necessária. No TSS, a assinatura é feita de forma distribuída sem nunca reconstruir as partes secretas (secret shares).
Como podemos ver, no TSS, a chave privada (que representa a segurança do sistema) nunca está em um único local ao longo de toda a sua existência.
Threshold wallets
Em uma threshold wallet, 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 devem decidir em conjunto qual é a próxima chave a ser utilizada. Em outras palavras, cada uma das partes terá uma seed phrase própria. As seed phrases são geradas separadamente e nunca combinadas para que uma parte sozinha não possa derivar a chave privada de sua seed phrase.
As carteiras baseadas em TSS, também têm um bom recurso de segurança, que habilita a rotação de chave privada sem alterar os endereços de chave pública e de blockchain correspondentes. A rotação de chave privada, também conhecida como proactive secret sharing, é mais um protocolo MPC que recebe as secret shares como entrada (input) e extrai (output) um novo conjunto de secret shares. As antigas secret shares podem ser excluídas e as novas podem ser utilizadas da mesma forma.
Esta estrutura adiciona uma dimensão de tempo à segurança, o que significa que um agente malicioso deve estar em vários locais ao mesmo tempo para ser capaz de invadir uma threshold wallet. Combinar secret shares antes e depois da rotação não dará ao agente invasor nenhum poder adicional se ele tiver a intenção de falsificar uma assinatura.
Um ponto negativo deste tipo de carteira é que a falta de uma seed phrase a torna incompatível com o sistemas de carteira de chaves únicas. Então, é importante considerar quais partes terão posse das secret shares.
Existem algumas arquiteturas possíveis:
Outsourcing TSS: o usuário permitirá que “n” servidores executem o processo de computação em seu nome. Externalizar efetivamente a geração de chave, gestão e assinatura à provedores de serviços que não são donos dos ativos porém, fornecem uma camada de segurança em retorno de algum incentivo.
Usar múltiplos dispositivos: O usuário executará o TSS entre os dispositivos que possui. Por exemplo - uma das partes será um dispositivo IoT, outra parte será o celular do usuário, outra parte seu laptop, etc.
Híbrido: O TSS será executado de tal forma que algumas partes são controlados por prestadores de serviços externos e outras são executadas em dispositivos de propriedade do usuário.
O primeiro método alivia o cliente do usuário da parte pesada de cálculos computacionais do TSS. Por outro lado, os prestadores de serviços podem conspirar (presumindo que eles não sofreram ataques simultâneos, mas na prática pode acontecer) e roubar os bens do usuário.
O segundo método proporciona controle total ao usuário, porém torna o processo mais pesado para realizar transações, pois serão necessários vários dispositivos online executando os cálculos computacionais do TSS.
A terceira opção é considerada a melhor, pois dá ao usuário uma maneira fácil e rápida de realizar transações, mas sem descartar a necessidade de sua autorização para a realizá-las.
TSS e contratos inteligentes
Riscos
Considerações finais
Neste artigo, introduzimos os conceitos básicos do esquema de assinatura com limites (TSS), que é um princípio criptográfico fascinante e que tem o potencial de mudar significativamente a forma como utilizamos a blockchain.
Leituras adicionais: