Esta ferramenta implementa compartilhamento de segredo com limiar de Shamir sobre GF(256): um segredo é dividido em n partes, das quais k (o limiar) bastam para reconstruí-lo, enquanto k-1 ou menos nada revelam — sigilo garantido pela teoria da informação.
Dois modos:
- Dividir: cole um segredo (qualquer texto UTF-8 — senha, chave de API, frase-semente, frase de recuperação), defina o limiar
k e o total n (2 ≤ k ≤ n ≤ 255), e obtenha n partes. Distribua cada parte a um detentor distinto.
- Combinar: cole
k ou mais partes (uma por linha) para reconstruir o segredo original por interpolação de Lagrange em x=0.
Como funciona. Cada byte do segredo é o termo constante de um polinômio aleatório de grau k-1 sobre GF(256). A parte i é o polinômio avaliado em x=i. A recuperação exige k pontos para determinar univocamente um polinômio de grau k-1. Os coeficientes vêm de crypto.randomBytes() (CSPRNG do SO), nunca Math.random().
Limitações — leia:
- Apenas confidencialidade, sem integridade. Quem tiver uma parte pode enviar um valor falsificado durante a recuperação; a matemática produzirá um segredo plausível, porém errado, sem detecção. Para detectar adulteração, assine o segredo (ou seu hash) antes de dividir e verifique após combinar.
- Limites de GF(256).
n é limitado a 255 (tamanho do corpo) e k deve ser ≥ 2.
- Formato da parte. Cada parte é
sss: + base64url de [coordenada x, y-byte₁, y-byte₂, …]. Preserve a string inteira; truncar quebra a recuperação.
Casos de uso. Custódia/recuperação de chaves (dividir uma chave-mestra entre executivos), recuperação social para carteiras autocustodiadas, distribuir uma frase para que ninguém a tenha sozinha, recuperação do tipo "dead man's switch".