A mainnet da Aptos vai habilitar 🔒 ativos 💸 confidenciais muito em breve!! ou seja, saldos e valores 🔐 de transação criptografados, embora com endereços de remetente e destinatário publicamente visíveis 🌍! (Um passo de cada vez, pessoal...) Veja como eles funcionam! 🤓👇
Os ativos confidenciais da Aptos se baseiam e ampliam trabalhos anteriores. Criptografamos balances on-chain usando Twisted ElGamal, como PGC (). Isso se compõe bem com o Bulletproofs para provar que um saldo criptografado foi debitado corretamente após um envio/saque confidencial.
Ou, como gosto de dizer frequentemente [e sou zoado neste ponto]... "Veja meu blog!"
*Feito 1:* Diferente do PGC e Solana, nossos textos cifrados Twisted ElGamal são _aggressively-chunked_ para garantir uma descriptografia super-rápida enquanto lidam com saldos e quantidades de ~256 bits. Chamamos esse de ElGamal *pedaços e torcidos.* Para constar, o Aptos só precisa de saldos de 128 bits e quantidades de 64 bits.
Para o Aptos, o chunking garante que a instância máxima de log discreto (DL) que precisa ser resolvida durante a descriptografia seja de 32 bits, no pior caso (e muito menor em média). => facilmente solucionáveis em adições de curvas elípticas de 2^16 usando algoritmos simples como baby-step gigante-step (BSGS) 👇
*Feito 2:* Aceleramos o BSGS para nossa escolha de curva elíptica Ristretto255 via compressões em lote. Também reduzimos o tamanho pré-calculado da tabela em 4x (=> reduzimos o tamanho e a latência do SDK das dapps confidenciais) Chamamos esse novo algoritmo de *BSGS-k truncado (TBSGS-k).*
Já brinquei com esse algoritmo antes: ... mas não enfatizaram o *porquê*: TBSGS-k é determinístico = > mais simples de implementar e testar. O TBSGS-k é apenas ~2x mais lento (10,6 ms contra 4,8 ms) que o algoritmo mais complexo [BL12], e possui apenas tabelas 2x maiores.
alin.apt
alin.apt25 de fev. de 2026
Se você está tentando calcular logs discretos mais rápido no Ristretto255, que tem compressão de pontos lenta, aqui está uma variante mais rápida (e com menor footprint de memória) do algoritmo Baby-Step Giant-Step que eu e @claudeai 👇 criaram
*Feito 3:* Quando a auditoria está ativada, mantemos uma criptografia comprovadamente correta do saldo (disponível) de cada usuário sob a chave de criptografia (EK) do auditor. Isso impede os auditores de escanear as TXNs dos usuários para reconstruir seu saldo. Chave: ele permite rotações 👌 de auditores de EK
*Feito 4:* No Aptos, a rotação da chave _assinando_ do usuário é um recurso central de segurança. Então: também projetamos ativos confidenciais para suportar a rotação de chaves de *descriptografia* dos usuários! Por enquanto, as políticas de gerenciamento de chaves ficam a cargo de aplicativos/carteiras (palavras famosas para o fim 🤞).
A boa notícia: dapps confidenciais sem chave podem ser 🌶️ reutilizados com segurança como chave de descriptografia! () ==> não foi introduzido nenhum ônus extra de gerenciamento de chaves para tais aplicações ==> maneira mais fácil de construir um dapp confidencial é como um dapp sem chave; Sem necessidade de carteira [suporte]!
*Feito 5:* Implementar cripto(*gráfico*) que garanta fundos reais dos usuários é assustador. Para minimizar erros (🤞), utilizamos uma metodologia amplamente negligenciada para projetar e compor protocolos Sigma com segurança: O *arcabouço de homomorfismos*, que descobri no livro 🙏 do @danboneh
*Feito 6:* A primeira implementação de ativo confidencial pronta para produção em Move. O código está atualmente privado enquanto passa por auditoria, mas será divulgado em breve. Aqui está um teaser de como uma transferência confidencial pode ser 👇 simples
Além disso, como não posso evitar, aqui está parte do nosso framework de homomorfismo do protocolo Sigma implementado no Move 😍
*Feito 7:* Especificação criptográfica completa com provas de segurança. (Poxa, talvez a gente possa fazer vibe code em @leanprover?) Em breve, com os detalhes picantes, em um eprint ao seu 👇 lado
Por fim, crédito onde o crédito é devido: os ativos confidenciais da Aptos se baseiam e estendem ideias introduzidas em trabalhos 👇 anteriores 1. Zether (): problema de "antecipação" do modelo de conta fixa por meio de saldos pendentes
2. PGC (): proposto de Twisted ElGamal + Bulletproofs como uma alternativa mais simples aos \Sigma-bullets. Isso reduz drasticamente a complexidade da implementação: só precisamos focar em projetar corretamente nossos protocolos Sigma! A composição segura é argumentada abaixo 👇
3. Solana (): permitia transferências de valores de 48 bits dividindo o saldo pendente em um bloco "alto" de 32 bits e um pedaço "baixo" de 16 bits. Permitimos valores maiores usando um número maior de blocos e também dividindo o saldo disponível.
Por último, mas não menos importante, quero agradecer a @mstrakastrak e ao pessoal da @distributedlab, que ajudaram a desenhar a versão inicial do protocolo de ativos confidenciais e implementá-lo no Move e no TypeScript 🖖 Fique atento ao nosso artigo conjunto que será lançado em breve!
202