Qual é a diferença entre um PRNG e um CSPRNG?
Um PRNG (gerador de números pseudoaleatórios) é um algoritmo determinístico: dado a mesma semente, produz sempre a mesma sequência. Exemplos comuns como o Mersenne Twister ou xorshift128+ são rápidos mas previsíveis se um atacante observar algumas saídas. Um CSPRNG (gerador pseudoaleatório criptograficamente seguro) acrescenta resistência criptográfica — mesmo conhecendo várias saídas, é computacionalmente inviável prever as seguintes. Esta ferramenta usa crypto.getRandomValues da Web Crypto API do W3C, que está classificado como CSPRNG e é alimentado pelo reservatório de entropia do sistema operativo (Linux /dev/urandom, Windows BCryptGenRandom, macOS SecRandomCopyBytes). Para distinção plena, um TRNG (true random number generator) extrai entropia de processos físicos como ruído térmico ou efeitos quânticos.
Posso usar este gerador para sorteios de jogos online em Portugal?
Não para fins comerciais. Em Portugal, os jogos e apostas online com prémios em dinheiro estão sujeitos ao Regime Jurídico dos Jogos e Apostas Online (RJO), aprovado pelo Decreto-Lei n.º 66/2015, fiscalizado pelo SRIJ — Serviço de Regulação e Inspeção de Jogos do Turismo de Portugal. Os operadores licenciados pelo SRIJ têm de utilizar RNG certificados por entidades acreditadas, com auditorias técnicas regulares, comprovativos de imparcialidade e separação entre operações de jogo e o RNG. Os jogos sociais do Estado (Euromilhões, Totoloto, Joker, Totobola, Lotaria Clássica, Lotaria Popular) são exclusivos da Santa Casa da Misericórdia de Lisboa (SCML) ao abrigo do regime de exclusividade. Este gerador é apenas para uso lúdico, educativo ou interno (sorteios entre amigos, decisões de turma, simulações).
Como funcionam os sorteios oficiais da Santa Casa (SCML)?
Os Jogos Santa Casa, marca comercial da Santa Casa da Misericórdia de Lisboa (SCML — instituição com mais de 525 anos, fundada em 1498), operam ao abrigo do regime de exclusividade dos jogos sociais do Estado (Decreto-Lei n.º 84/85 e legislação subsequente). Os sorteios do Totoloto, Euromilhões, Joker e Totobola são presenciais, com bolas físicas extraídas de tômbolas mecânicas certificadas, em estúdio com transmissão pública e fiscalização notarial. As receitas líquidas financiam acção social, saúde, educação e cultura. O Euromilhões é gerido em consórcio europeu (Services aux Loteries en Europe — SLE) entre nove operadores nacionais, com sorteios realizados em Paris às terças e sextas-feiras.
Porque é que Math.random() não é seguro para criptografia?
Math.random() nos motores JavaScript (V8 do Chrome, SpiderMonkey do Firefox, JavaScriptCore do Safari) é um PRNG rápido mas não criptográfico, historicamente baseado em algoritmos como xorshift128+. O estado interno pode ser recuperado por um atacante que observe apenas algumas saídas, tornando previsíveis os valores passados e futuros. O CNCS — Centro Nacional de Cibersegurança recomenda, em alinhamento com o NIST SP 800-90A, o uso exclusivo de CSPRNG (como crypto.getRandomValues no navegador ou crypto.randomBytes no Node.js) para geração de tokens, chaves, palavras-passe e qualquer sorteio resistente a manipulação. Nunca use Math.random() para fins de segurança ou para sorteios com valor económico.
Posso definir uma semente (seed) para reproduzir resultados?
Não nesta ferramenta. O crypto.getRandomValues não expõe propositadamente qualquer semente, porque a reprodutibilidade derrotaria o seu propósito de segurança. Se necessitar de uma sequência reprodutível (por exemplo, para testes de regressão ou simulações partilhadas em investigação), use um PRNG semeado como Mulberry32, PCG ou Mersenne Twister e documente a semente juntamente com os resultados. Para sorteios auditados em rifas ou promoções, em vez de tentar reproduzir o sorteio, documente os inputs (intervalo, quantidade, configuração de repetições), o carimbo de data/hora e a lista completa de resultados, idealmente perante testemunhas ou notário, conforme exigido pelo Regulamento das Modalidades Afins dos Jogos de Fortuna ou Azar.
Os números são uniformemente distribuídos?
Sim. O gerador usa amostragem por rejeição (rejection sampling) para que cada inteiro em [min, max] tenha probabilidade idêntica de 1 / (max − min + 1). Uma abordagem ingénua usando módulo sobre um valor de 32 bits introduziria um viés pequeno mas mensurável quando o intervalo não divide exactamente 2^32; a amostragem por rejeição evita esse viés. Ao longo de muitos sorteios, o histograma converge para uniforme, e testes estatísticos padrão (qui-quadrado, Kolmogorov-Smirnov, NIST SP 800-22) aplicados à saída de crypto.getRandomValues não mostram desvios estatisticamente significativos da distribuição uniforme.
É suficientemente justo para decisões ou sorteios importantes?
Para decisões informais entre amigos, colegas ou turmas — escolher quem paga o jantar, distribuir tarefas, sortear lugares numa sala — sim, porque cada número é igualmente provável e imprevisível. Para sorteios legalmente regulados (rifas com prémios acima de limiares legais, promoções comerciais com sorteio, modalidades afins dos jogos de fortuna ou azar) tipicamente é necessário um procedimento documentado, frequentemente com testemunha imparcial, notário ou autoridade competente, ou ainda RNG certificado pelo SRIJ ou por entidade acreditada equivalente. Para sorteios que requerem prova pública verificável, considere serviços com sorteios assinados criptograficamente como random.org. Registe sempre o intervalo, contagem, configuração de repetições e lista completa de resultados para qualquer sorteio que possa precisar de defender mais tarde.