Différence entre les API CryptGenRandom et CNG BCryptGenRandom

L’un de nos produits utilise actuellement l’API CryptGenRandom pour la génération de nombres aléatoires. Récemment, je suis tombé sur l’API de cryptographie: Next Generation (CNG) qui fournit une nouvelle API BCryptGenRandom (dans bcrypt.h) pour la même chose. Conformément à la description fournie dans MSDN, les deux API sont conformes à la norme NIST SP800-90 de Windows Vista avec Service Pack 1 (SP1) et versions ultérieures.

  1. Si je vais avec le fournisseur Microsoft par défaut, y a-t-il une différence dans le processus de génération de nombres aléatoires entre les deux API?
  2. S’il n’y a pas de différence, devrais-je passer à l’API CNG car CNG est le remplacement à long terme de CryptoAPI?

En ce qui concerne votre première question, non, comme vous l’indiquez, les deux API utilisent le même algorithme de générateur de nombres pseudo-aléatoires. Probablement plus pertinent est de souligner que les deux API utilisent la même source d’entropie du kernel Windows pour alimenter le PRNG.

En ce qui concerne votre deuxième question, cela est plus intéressant, car cela soulève la question de savoir si l’hôte dispose d’un RNG de meilleure qualité, disponible en tant que module complémentaire tiers (un exemple est un module de sécurité matérielle, HSM). Un RNG matériel pourrait être exposé via CNG (BCryptGenRandom), une CAPI héritée (API Crypto, CryptGenRandom) et / ou une source d’entropie en mode kernel. Si l’une des deux premières, mais pas les deux, ne peut être utilisée que si elle appelle cette API RNG spécifique. Mais si le matériel RNG est installé en tant que source d’entropie du kernel, alors votre application en bénéficiera de toute façon.

La question de savoir si l’une de ces questions est plus importante concerne la nature de votre application et son mode d’utilisation habituel. Si le matériel cryptographique ne fait probablement pas partie de l’histoire du déploiement, je ne vois aucune raison de modifier votre code. Mais si votre produit et votre matériel de chiffrement ont tendance à apparaître sur le même hôte, vos clients bénéficieront de cette fonctionnalité.