Question

Je dois créer un pad unique pour chiffrer des données (quelques KBS en taille). Comment dois-je aller sur la génération de ce pad unique pour éviter tous les problèmes de pseudo-aléatoires associés à la génération de nombres aléatoires de base tels que rand()?

Y at-il un existant, outil de confiance ou d'une bibliothèque que je peux utiliser pour cela?

Était-ce utile?

La solution

Random.ORG . Ils ont divers services gratuits (et payants) qui génèrent des nombres vraiment aléatoires sur la base du bruit atmosphérique (ou du moins est ce qu'ils prétendent faire).

Autres conseils

La plupart des systèmes d'exploitation modernes ont une générateur de nombres pseudo-aléatoire cryptographiquement sécurisé.

Par exemple, Windows a CryptGenRandom . Vous pouvez accéder au même flux de .NET en utilisant le RNGCryptoServiceProvider classe . A partir de C ++, vous pouvez accéder au même flux en utilisant le Microsoft C ++ fonction de la bibliothèque rand_s . De Python, il est accessible par la fonction urandom (voir en bas de page liée) dans l'os module.

Contrairement à PRNGs normales, CSPRNGs sont conçus pour passer des tests de caractère aléatoire statistique rigoureux. Ils sont également conçus pour bien résister attaqués graves, même lorsque leur état initial ou en cours d'exécution devient disponible pour un attaquant.

Le terme « pseudo-aléatoire », tel qu'il est utilisé par cryptographes, peut être trompeur à un lecteur non-technique. A CSPRNG développe un ensemble de valeurs aléatoires, connu comme une graine, dans une séquence plus longue de numéros. Cette séquence est reproductible étant donné la graine, mais pour une bonne CSPRNG, un changement mineur dans la graine donne une séquence très différente. Par conséquent, aussi longtemps qu'au moins une partie de la semence est choisie de façon adéquate par l'intermédiaire d'un processus aléatoire, un attaquant ne peut prédire la séquence résultante - même si l'attaquant peut influer sur le reste de la graine.

De nombreux systèmes importants, allant des communications militaires au cryptage qui protège la quasi-totalité des transactions en ligne, comptent sur la sécurité fonctionnellement équivalent entre « pseudo-aléatoire cryptographiquement sécurisée » et « aléatoire ».

EDIT : Si vous êtes assez chanceux pour travailler avec la gamme de processeurs Intel Ivy Bridge, vous avez maintenant une autre alternative très intéressante.

Vous ne pouvez pas générer des nombres aléatoires vraiment algorithmiquement - vous avez besoin d'aide matérielle. Si vous utilisez un algorithme, sécuriser cependant (comme un PRNG sécurisé cryptographiquement), vous créez simplement un algorithme de chiffrement de flux basé sur cette PRNG; il est plus un One Time Pad.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top