Como o Namesome escolhe

A versão curta: o seu navegador sorteia o nome com um gerador de números aleatórios criptográfico, antes de a roleta começar a se mexer. Aqui vai a versão longa, e como conferir.

De onde vem a aleatoriedade

Todo sorteio começa com crypto.getRandomValues, o gerador de números aleatórios que já vem no seu navegador e é alimentado pelo sistema operacional. É a mesma fonte usada para proteger conexões, não o atalho aritmético que a maioria das animações usa. O nome é escolhido no momento em que você aperta Girar; a animação é um jeito de mostrar uma decisão que já foi tomada, e é por isso que nada do gesto — com quanta força você gira, por quanto tempo segura — pode mudar o resultado.

Os pesos mudam as chances de propósito, e as fatias mudam de largura junto, então o que as pessoas veem bate com o que o sorteio faz.

Uma exceção, dita sem rodeios: quando um sorteio de presentes tem tantas regras de «não pode tirar» que a amostragem aleatória não acha um resultado que as satisfaça, o Namesome recorre a uma solução embaralhada construída a partir das próprias regras. Esse resultado é um sorteio válido, mas não uniformemente aleatório, e é o único ponto do site em que essas duas coisas se separam.

Confira por conta própria

Rode cinquenta mil giros neste navegador e compare o que saiu com um teste qui-quadrado. Roletas equilibradas caem dentro da faixa esperada; roletas com pesos caem coladas nos seus pesos. Nada é enviado para lugar nenhum — a auditoria roda na sua máquina.

Auditoria de distribuição

Nada foi medido ainda. A auditoria faz 100.000 escolhas neste navegador — 50.000 para cada um dos dois testes.

O teste 2 dá aos três participantes os pesos 1, 2 e 3: uma fatia três vezes maior sai três vezes mais, e é isso que os números dele medem.

Como a auditoria funciona

Cada escolha pega 64 bits novos de crypto.getRandomValues — o mesmo gerador que o navegador usa para chaves —, transforma em um número em [0, 1) e percorre os pesos dos participantes até parar em um. Nada do gesto, do tempo ou da animação encosta no resultado: o nome já existe antes de a roleta começar a girar.

Os dois testes são testes qui-quadrado de aderência de Pearson. A estatística soma (observado − esperado)² ÷ esperado entre os participantes, então um número pequeno quer dizer que as contagens caem onde uma escolha equilibrada as colocaria. O teste 1 usa oito participantes com o mesmo peso: 7 graus de liberdade, valor crítico 24,322. O teste 2 usa pesos 1, 2 e 3, então as partes deveriam ser um sexto, um terço e metade: 2 graus de liberdade, valor crítico 13,816. Os dois valores críticos são tomados em p = 0.001.

Nesse limite, um motor perfeitamente saudável ainda falha em cerca de uma rodada a cada mil. Uma falha quer dizer rodar de novo — duas falhas seguidas são erro de verdade.

Sorteios que qualquer pessoa pode verificar

Quando alguém precisa de prova — quem apresenta primeiro, quem está na escala, qual nome saiu do chapéu — um registro do sorteio transforma a escolha em algo que um estranho consegue repetir. O registro guarda os participantes, as configurações, a semente e as impressões digitais, e um botão que recalcula tudo na sua frente.

Compromisso, depois revelação

Antes de o resultado existir, publicamos uma impressão digital: o SHA-256 da semente secreta, dos participantes e do ID do sorteio. O resultado é derivado dessa semente depois, e a semente é publicada junto. Como a impressão digital foi pública primeiro, não daria para sortear várias vezes até gostarmos da resposta — a impressão digital deixaria de bater.

Compromisso

46cc3578fe29c825a7134c9ba9b5b43d346147d11f2e5264f806f92b943b8b17

Semente

49114b046bdfc2b0b62c1366dfc097dbb5d2aba0fe251e2c6c8516c4d44696f4

ns-draw-v1, em dez linhas

Os participantes são normalizados e ordenados, depois passados por SHA-256. A ordem é um embaralhamento de Fisher-Yates movido por um fluxo HMAC-SHA256 com a semente como chave, e os sorteados são os primeiros nomes dessa ordem. As mesmas entradas, a mesma saída, em qualquer máquina e em qualquer idioma.

// Excerpt of ns-draw-v1. sha256Hex, unhex and next32 are on the record page.
const entries = [...record.entries].map(s=>s.normalize('NFC')).sort();
const entriesHash = await sha256Hex(te.encode(JSON.stringify(entries)));
const commitment = await sha256Hex(te.encode(
  record.seed + '|' + entriesHash + '|' + record.id));
const key = await crypto.subtle.importKey('raw', unhex(record.seed),
  {name:'HMAC', hash:'SHA-256'}, false, ['sign']);
const arr = [...entries];
for (let i = arr.length-1; i > 0; i--){
  const bound = i+1, lim = Math.floor(0x100000000/bound)*bound;
  let r; do { r = await next32(); } while (r >= lim);
  const j = r % bound; [arr[i],arr[j]] = [arr[j],arr[i]];
}
return { entriesHash, commitment, order: arr, winners: arr.slice(0, record.winners) };

Um trecho — as funções auxiliares que ele chama, e o botão que roda tudo de novo na sua frente, estão na página do registro do sorteio.

O que nunca fazemos

Nunca cobramos por um sorteio. Não há bilhetes, taxas de entrada, prêmios nem probabilidades em lugar nenhum do Namesome, e os termos proíbem usá-lo para jogos de azar. Ele escolhe nomes; é esse o trabalho inteiro.

Feito para não enxergar dinheiro — não há nada aqui que aponte para dinheiro.

Para agentes e programas

A API e o servidor MCP devolvem os mesmos registros com as mesmas impressões digitais, então um assistente pode conferir o sorteio de outro. Toda resposta carrega o link de uma página que uma pessoa consegue ler.

Ler as notas da API