Bonjour Ă tous!
Je ne fais pas moi-mĂȘme de cryptographie, mais mes petites recherches peuvent trĂšs bien ĂȘtre utiles. J'ai dĂ©cidĂ© de m'occuper des fonctions de processeur intĂ©grĂ©es RDRAND et RDSEED. Le compilateur Delphi a dĂ©clarĂ© un identificateur non dĂ©clarĂ©. Hmm BMI, BMI2, AVX, AVX2 et mĂȘme AVX-512 existent depuis longtemps et Delphians a optĂ© pour SSE4.2. Peu importe. Nous compilons le code nous-mĂȘmes.
J'ai d'abord vérifié le support de ces fonctions par le processeur. Bien sûr, CPUID. Vous pouvez utiliser CPUID à partir des premiers processeurs Pentium. J'espÚre que personne ne pense à exécuter CPUID sur une machine 486, car il n'y est pas encore. Soit dit en passant, les processeurs RDRAND et RDSEED avant IvyBridge n'existent pas non plus.
function CPU_support_RDRAND: Boolean; asm mov rax, $01 cpuid test ecx, 40000000h
Il s'est avĂ©rĂ© que mon Core i7 G6950X Extreme prend en charge ces fonctionnalitĂ©s. Alors j'ai dĂ©cidĂ© de compiler le bytecode manuellement. Pour les expĂ©rimentĂ©s je donnerai les prĂ©fixes REX et REX.W. Vous voudrez peut-ĂȘtre Ă©crire le rĂ©sultat dans un registre diffĂ©rent:
const REX_RDRAND32: Byte = $F0;
Les fonctions peuvent fonctionner Ă la fois en mode 32 bits et en mode 64 bits. Par consĂ©quent, j'ai fait les deux, et mĂȘme en deux versions. Le rĂ©sultat est 4 fonctions:
function RDRand32: DWord; asm @Retry: db $0F, $C7, $F0
Leur vitesse est plus lente que la fonction de bibliothÚque Random. RDRand est d'environ 35% et RDSeed est de 50% ou plus, mais la qualité de l'unicité des valeurs générées est beaucoup plus élevée. Il existe de bons articles à ce sujet sur cette ressource, mais ma mission (rendre les fonctions disponibles dans Delphi) est terminée. Je ne l'ai pas testé dans Lazarus, mais cela fonctionnera trÚs probablement sans aucun changement. à la fin de la déclaration de fonction, il vous suffit d'ajouter l'assembleur de mots de sauvegarde.
Voici le code source de l'application console de test. Vous y trouverez un prototype des fonctions Random32 et Random64 basĂ© sur le processeur intĂ©grĂ©. C'est peut-ĂȘtre ce que vous cherchiez. Salut tout le monde!