Criptografia Threshold - Segurança distribuída com threshold
Assinaturas que requerem colaboração de t-of-n participantes. Nenhuma parte individual pode assinar sozinha.
Esquemas modernos como ECDSA e EdDSA threshold. Compatível com blockchains existentes.
DKG para gerar chaves distribuídas sem trusted dealer. Segurança desde a criação.
Atualização proativa de shares sem alterar chave pública. Segurança contínua no tempo.
| Tipo | Descrição | Esquema |
|---|---|---|
ThresholdEcdsa |
ECDSA threshold (GG20) | (t, n)-threshold |
ThresholdEdDsa |
EdDSA threshold | (t, n)-threshold |
ThresholdBls |
BLS threshold signatures | Pairing-based |
DkgProtocol |
Distributed Key Generation | Feldman VSS |
KeyShare |
Share de chave privada | Shamir-based |
PartialSignature |
Assinatura parcial | Combinável |
use avx_threshold::ThresholdEcdsa;
fn main() {
// Configuração: 2-of-3 threshold
let threshold = 2;
let n_parties = 3;
// DKG: gerar chave distribuída
let parties = ThresholdEcdsa::distributed_keygen(
threshold,
n_parties
).expect("Erro no DKG");
let key_shares = parties.iter()
.map(|p| p.key_share())
.collect::>();
let public_key = parties[0].public_key();
// Assinar com 2 partes (threshold = 2)
let message = b"Transação importante";
let sig1 = key_shares[0].sign_partial(message)
.expect("Erro na assinatura parcial");
let sig2 = key_shares[2].sign_partial(message)
.expect("Erro na assinatura parcial");
// Combinar assinaturas parciais
let signature = ThresholdEcdsa::combine_signatures(&[sig1, sig2])
.expect("Erro ao combinar");
// Verificar (compatível com ECDSA padrão!)
assert!(public_key.verify(message, &signature));
println!("✅ Threshold ECDSA funcional!");
}
use avx_threshold::{DkgProtocol, Party};
fn main() {
let threshold = 3;
let n_parties = 5;
// Cada participante inicia DKG
let mut parties: Vec = (0..n_parties)
.map(|id| Party::new(id, threshold, n_parties))
.collect();
// Fase 1: Broadcast de compromissos
let commitments: Vec<_> = parties.iter()
.map(|p| p.generate_commitments())
.collect();
// Fase 2: Troca de shares secretos
for i in 0..n_parties {
for j in 0..n_parties {
if i != j {
let share = parties[i].generate_share_for(j);
parties[j].receive_share(i, share);
}
}
}
// Fase 3: Verificação
for party in &mut parties {
party.verify_shares(&commitments)
.expect("Verificação falhou");
}
// Chave pública gerada (igual para todos)
let public_key = parties[0].compute_public_key();
println!("✅ DKG completo! PK: {}", hex::encode(public_key));
}
use avx_threshold::ThresholdBls;
fn main() {
// BLS: agregação eficiente de assinaturas
let threshold = 2;
let n_parties = 4;
let (key_shares, public_key) = ThresholdBls::keygen(
threshold,
n_parties
).expect("Erro no keygen");
let message = b"Mensagem a assinar";
// Cada parte assina
let signatures: Vec<_> = key_shares.iter()
.take(threshold) // Apenas threshold necessário
.map(|share| share.sign(message))
.collect();
// Agregar assinaturas (muito eficiente!)
let aggregated = ThresholdBls::aggregate(&signatures)
.expect("Erro ao agregar");
// Verificar assinatura agregada
assert!(ThresholdBls::verify(&public_key, message, &aggregated));
println!("✅ BLS threshold verificado!");
}
use avx_threshold::{ThresholdEcdsa, KeyShare};
fn main() {
// Key shares existentes
let mut key_shares: Vec = load_existing_shares();
let old_public_key = key_shares[0].public_key();
// Refresh proativo (a cada X tempo)
// Shares mudam, mas chave pública permanece igual
ThresholdEcdsa::refresh_shares(&mut key_shares)
.expect("Erro no refresh");
let new_public_key = key_shares[0].public_key();
// Chave pública inalterada
assert_eq!(old_public_key, new_public_key);
// Mas shares foram renovados (segurança proativa)
println!("✅ Shares atualizados!");
println!("Chave pública mantida: {}", hex::encode(new_public_key));
}
pub fn distributed_keygen(threshold: usize, n_parties: usize) -> Result<Vec<Party>, ThresholdError>
Gera chave distribuída via DKG.
pub fn combine_signatures(partial_sigs: &[PartialSignature]) -> Result<Signature, ThresholdError>
Combina assinaturas parciais.
pub fn refresh_shares(shares: &mut [KeyShare]) -> Result<(), ThresholdError>
Atualiza shares proativamente.
pub fn sign_partial(&self, message: &[u8]) -> Result<PartialSignature, ThresholdError>
Gera assinatura parcial.
pub fn public_key(&self) -> PublicKey
Retorna chave pública completa.
pub fn new(party_id: usize, threshold: usize, n_parties: usize) -> Self
Inicia protocolo DKG.
pub fn generate_commitments(&self) -> Vec<Commitment>
Gera compromissos verificáveis.
Carteiras corporativas que requerem múltiplas aprovações. Compatível com Bitcoin, Ethereum, etc.
Gerenciamento seguro de chaves privadas em custódia institucional de criptoativos.
CAs distribuídas onde múltiplas partes devem aprovar emissão de certificados.
DAOs e protocolos que requerem consenso distribuído para operações críticas.
AVX Threshold é software proprietário desenvolvido pela Ávila Inc. Todos os direitos reservados.
Para licenciamento comercial, entre em contato: nicolas@avila.inc