Java fournit un générateur de nombres aléatoires sécurisés cryptographiquement dans l'emballage Java.Secure.random. p>
est-il possible d'utiliser ce générateur de numéros si je considère comme des éléments comme l'ensemencement et la ré-instanciation cyclique du RNG? Ou puis-je utiliser le générateur de nombres 'tel qu'il est'? P>
a-t-il d'expérience avec ce générateur? P>
a) être statistiquement indépendant p>
b) être assez distribué (dans les limites statistiquement attendues) sur leur gamme P>
c) passer divers tests statistiques reconnus p>
d) être cryptographiquement fort. p>
3 Réponses :
Vous pouvez utiliser Sachez que Donc, si vous voulez générer de nombreuses valeurs aléatoires et que vous pouvez avoir une vie avec une utilisation PRNG java.security.securerandom code> comme vous pouvez utiliser java.util.random code> pour de telles choses. P>
java.security.securerandom code> peut dépendre de l'entropie de l'ordinateur exécutant le programme. Si vous arrivez à de nombreuses valeurs aléatoires à partir de là, il peut bloquer jusqu'à ce que l'ordinateur soit généré par l'ordinateur (par exemple sur Linux Java.Security.securerandom code> utilise / dev / urandom code> ). p>
java.util.random code>. p>.
Merci pour votre réponse. Je viens de mettre à jour la question avec les exigences. Malheureusement, un PRNG n'est pas suffisant.
Documentation sur SECURAINDOM dit qu'il peut Le bloc attendant que le système génère plus d'entropie (par exemple, sous Linux, il prend des nombres aléatoires de / dev / aléatoires), de sorte que si vous allez l'utiliser, vous aurez peut-être besoin de l'aide du matériel: installez une carte génératrice de numéro aléatoire ( Un périphérique matériel qui génère des nombres aléatoires réels, non pseudo-aléatoires) de cette manière que votre système générera des nombres aléatoires avec suffisamment de vitesse afin que votre programme ne soit pas bloqué. P>
+1 Il existe différentes stratégies SecureDandom que vous pouvez choisir, d'autres, utilisez la graine et certaines ne le font pas.
Comme d'autres disent, le RNG sécurisé peut avoir un débit limité. Pour atténuer cela vous pouvez soit étirer ce hasard sécurisé en semant un CPRNG, ou vous pouvez Essayez d'optimiser votre utilisation du bitstream.
Pour mélanger un paquet de cartes, par exemple, vous n'avez besoin que de 226 bits, mais un naïf
algorithme (appelant Pour cette situation, je pense que le docteur Jacques
la méthode serait appropriée. P> aller avec cela, voici une analyse de performance contre progressivement plus
Sources d'entropie coûteuses (contient également du code): p> Nextint (n) code> pour chaque carte) utilisera probablement 1600 ou 3200
Bits, gaspillant 85% de votre entropie et vous rend sept fois plus susceptible
à retarder. P>
Le premier lien est mort, archivé ici: web.archive.org/web/20200213145912/http://mathforum.org/librone / ...
Explorer ce problème plus loin, je viens de remarquer que le générateur de Secureandom de dernière station était SHA1. Il est possible qu'ils font autre chose que l'évidence; Sinon SHA1 a un état interne de 160 bits, ce qui ne suffit pas pour mélanger un seul jeu de cartes. Cela signifierait que peu importe ce que vous avez fait à votre RNG ou votre algorithme de shuffle, il serait toujours limité à ne produire qu'un sous-ensemble de permutations possibles. Strictement cela n'apparaît pas comme l'une de vos exigences; Alors peut-être que c'est bon.