Les clés de 256 bits de cryptage fort


les Techniques pour identifier les clés de résister à la force brute et les attaques de dictionnaire. Inclut source Delphi pour l'analyse des touches, la conversion de mots de passes à clés et permutant les touches.
[256 bits Clés Pour le Chiffrement Fort]
// le code source en bas
La sécurité de toute bonne crypto-système s'appuie sur la touche. Peu importe la taille de la clé, il y aura un imposant diminution de la sécurité si elle est mal utilisée par le logiciel. Les clés doivent être mesurées en fonction des bits d'entropie contenues à l'intérieur d'eux, et une simple clé doit être rejetée. Ils doivent contenir beaucoup de personnages différents, et n'ont pas de notables habitudes. C'est seulement lorsque ces conditions sont réunies, une clé de résister dictionnaire et les attaques par force brute.
Une clé de l'entropie mesure le montant de l'imprévisible bits.
Considérant les utilisateurs seront généralement utiliser uniquement des caractères alphanumériques, vous devez utiliser uniquement le nombre minimum de bits possible de représenter la clé. À l'aide de 8 bits par caractère signifie qu'il y a 256 caractères différents disponibles. Un attaquant sait que l'utilisateur va utiliser uniquement des caractères alphanumériques (62 caractères à 6 bits), et ne sera pas pris la peine de tester pour le 194 autres personnages. Une pratique technique est de convertir chaque caractère (1 octet) dans un 6bit nombre, et la concaténation puis à côté les uns des autres. Vous pourrez vous permettre de lettres minuscules et de quelques nombres et de réduire chaque personnage à 5bits (32 caractères). Il est important de la demande de l'utilisateur à utiliser des mots de passe qui sont plus grandes pour atteindre la même taille de la clé. Avec ce dit, à 8 touche de caractère ne doit pas être considéré comme 64bits, mais en fait 48bits (6bits x 8 caractères). Avec les touches de faible entropie constituent une menace pour la sécurité, peu importe comment bien conçu le reste du système est conçu.
Bref, en un mot, les clés ne doivent pas être tolérés au sein d'un système cryptographique. Même si vous optimisez l'entropie, il n'est tout simplement pas assez de données clés dans un 5 touche de caractère pour résister à une attaque par force brute. Un 30bit clé (6bits x 5 caractères) permet seulement d'une possibilité de quelques milliards de clés, ce qui ne prend que quelques heures à l'échappement sur un ordinateur puissant. Une clé d'au moins 128bits devrait être obligatoire pour les sesitive données, cela permet une durée de quelques années avant que le besoin s'en fait sentir pour une nouvelle et longue clé. Au 6bits par caractère cela signifie que la clé doit être de 22 caractères ou plus. Cela peut sembler importante, mais rien ne vous empêche d'utiliser des phrases. Un exemple permet de regarder le membre de phrase 'L'Ascenseur a Été à la HAUSSE', il est de 25 caractères. La clé est de 150 bits de long, mais facile à retenir. Toutes les clés doivent être traitées de cette manière. Il n'y a aucune excuse pour permettre à un utilisateur d'utiliser un 8 touche de caractère et de compromettre l'ensemble du cryptosystème.
Une clé offre une meilleure résistance contre les recherches algorithmiques lorsqu'il contient beaucoup de personnages différents. Si la clé est de 22 caractères, mais ne contient 4 personnages différents, alors il est extrêmement fragiles. Pour garder les choses simples, au moins la moitié des caractères dans une clé différente (22 touche de caractère doit avoir au moins 11 personnages différents). Plus de caractères différents dans une clé de rendre plus difficile à prédire statistiquement le caractère suivant. Bien qu'une telle attaque est peu probable, il n'y a pas de place pour l'erreur. La prévention de tous les types connus d'attaques et d'anticiper les violations avant-main est de prononcer-le plus d'importance peu important risque peut sembler. Un risque est toujours un risque. Il est important d'encourager les utilisateurs à avoir le plus de personnages différents, ils peuvent mémoriser dans chaque touche pour faire des recherches algorithmiques donneront aucun résultat.
les Attaquants amour de modèles, de faire des recherches et de sa vie beaucoup plus facile. Les utilisateurs semblent penser que les clés comme: 'bingobingo' sont plus sûrs que ceux comme: 'bingo', mais le fait est qu'ils ne sont que légèrement mieux. Smart attaquants connaître toutes les astuces des utilisateurs de concevoir pour rendre leurs clés difficiles à deviner. À l'aide d'un mot deux fois devrait être fortement découragée. Souvent, les utilisateurs d'ajouter des numéros à la fin de la clé, pour le rendre moins prévisible. Malheureusement, 80% du temps, le nombre est de 123, et l'autre 20% est de 321. Pour un attaquant de tester ces touches supplémentaires, il doit également tester avec 123 ajouté à chaque clé, ainsi que 321. Cela signifie qu'il est à la recherche de 3 fois le nombre de touches, ce qui représente 1,5 bit augmente au lieu de la 18bits 3 caractères doivent offrir. Les tests de clés pour les modèles peuvent être très complexe obstacle, et ne seront pas abordés dans ce document. Après évidente modèles ont été refusés, il est sage de passer la clé via une fonction de hachage telle que SHA ou HAVAL. Ces fonctions prennent en entrée des données et de créer une sortie qui n'a pas résoluble relation à l'entrée pour chaque entrée il y a une seule sortie. La sortie de ces fonctions de hachage est apparemment aléatoire et efficacement pour dissimuler des modèles discrets.
en Éliminant les motifs de fait, il est très difficile pour un attaquant de
recherche faible clés.

/ / ***** NOTES:
La source soufflet est partie d'une bibliothèque en cours cummulating 3 années de recherche. Il est destiné à être un exemple, mais si vous voulez l'utiliser dans un programme, un peu de crédit, ce serait bien.
Ces routines ont été optimisés et ré-écrit une douzaine de fois, j'ai essayé de commenter du mieux que je pouvais. La procédure de structures peut paraître étrange, parce que j'ai initialement écrit en C . Le générateur de nombre pseudo-aléatoire provient d'une source inconnue, et la mise en œuvre de haval est un [grave] modification de David Barton est haval.pas trouvé dans le DCPcrypt 1.3 suite de composants. J'ai utilisé le contexte d'encapsulation, de sorte que les procédures n'ont pas à être instancié dans un environnement multi-thread (serveur peut-être?).
Description:
[MutateKey]
Transforme une clé dans un autre par l'expansion et la compression. Pas de clés précédentes peut être déterminé par la clé actuelle, mais de tous les réussir clés peuvent être. Ceci est utile pour ajouter de l'entropie à une clé (de sorte qu'il n'y a pas de raccourcis de la recherche) ou pour les séances qui peuvent avoir besoin d'utiliser des sessions multiples-clés.
[PasswordToKey]
Convertit une chaîne de 64 caractères: 'a'-'z', 'A'-'Z', '0'-'9', '_' et '.' dans un 256bit en laissant de côté les 2 bits de chaque caractère (64 caractères seulement besoin 6bits pour représenter chacun, au lieu de 8 bits 256 caractères), puis utilise MutateKey pour ajouter de l'entropie.
[AnanlyzeKey]
Examine une clé de l'entropie par la recherche de motifs, de compter les bits par caractère, de l'évaluation 0/1 (binaire) de distribution, et en tire un bilan récapitulatif de notation de la clé mesurée en bits de longueur.
(un exemple complet de ce qui peut être trouvé à http://www.geocities.com/drmungkee/software/codebase.html)

//******************* l'UNITÉ COMMENCE ICI ****************************************
unité de keyfunc
interface
type
& nbsp & nbsp & nbsp key256=array[0..7]de longword
& nbsp & nbsp & nbsp Prng_CTX=enregistrement
& ! & ! & ! & ! & ! & nbsp r:array[1..97]de réel
& ! & ! & ! & ! & ! & nbsp x1,x2,x3:longword
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp TPrng_CTX=^Prng_CTX
& nbsp & nbsp & nbsp Haval_CTX=enregistrement
& ! & ! & ! & ! & ! & nbsp lenhi,lenlo:longword
& ! & ! & ! & ! & ! & nbsp Index:longword
& ! & ! & ! & ! & ! & nbsp hash:array[0..7]de longword
& ! & ! & ! & ! & ! & nbsp hashbuffer:array[0..127]of byte
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp THaval_CTX=^Haval_CTX
& nbsp & nbsp & nbsp KeyStatistics=enregistrement
& ! & ! & ! & ! & ! & nbsp KeyLength:longword
& ! & ! & ! & ! & ! & nbsp KeySize:longword
& ! & ! & ! & ! & ! & nbsp CharCount:octet
& ! & ! & ! & ! & ! & nbsp CharBits:octet
& ! & ! & ! & ! & ! & nbsp Motifs:longword
& ! & ! & ! & ! & ! & nbsp Différentiel:longword
& ! & ! & ! & ! & ! & nbsp BruteLength:longword
& ! & ! & ! & ! & ! & nbsp Cote:longword
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp TKeyStatistics=^KeyStatistics
procédure MutateKey(var key:key256)
fonction de PasswordToKey(pass:string):key256
fonction de AnalyzePassword(pass:string):KeyStatistics
application
const BIT_MASK:array[0..7]of byte = (1,2,4,8,16,32,64,128)
& ! & ! & ! & ! & ! & nbsp HASH_SIZE=256
& ! & ! & ! & ! & ! & nbsp PrngM1:longword=259200
& ! & ! & ! & ! & ! & nbsp PrngI1:longword=7141
& ! & ! & ! & ! & ! & nbsp PrngC1:longword=54773
& ! & ! & ! & ! & ! & nbsp PrngM2:longword=134456
& ! & ! & ! & ! & ! & nbsp PrngI2:longword=8121
& ! & ! & ! & ! & ! & nbsp PrngC2:longword=28411
& ! & ! & ! & ! & ! & nbsp PrngM3:longword=243000
& ! & ! & ! & ! & ! & nbsp PrngI3:longword=4561
& ! & ! & ! & ! & ! & nbsp PrngC3:longword=51349
//*******************************************************************
// Haval
//
// Dérivés de David Barton est haval.pas (DCPcrypt 1.3 composant de la suite)
//
//*******************************************************************
procédure HavalCompress(ctx:THaval_CTX)
& nbsp & nbsp & nbsp fonction rr32(x:longword c:longint):longword registre assembleur
& nbsp & nbsp & nbsp asm
& ! & ! & ! & ! & ! & nbsp mov ecx,edx
& ! & ! & ! & ! & ! & nbsp ror eax,cl
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procédure r1(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=((x2)et((x6)xor(x1))xor(x5)et(x4)xor(x0)et(x3)xor(x6))
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procédure r2(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x3 et(x4) et(non x0)xor x1 et x2 xor x6 xor x5)xor x1 et(x4 xor x2)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor x0 et x2 xor x5)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procédure r3(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=((x4)et((x1)et(x3)xor(x2)xor(x5))xor(x1)et(x0)xor(x3)et(x6)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor(x5))
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procédure r4(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x3 et(x5(et non pas x0)xor x2 et x1)xor x4 xor x1 xor x6)xor x2
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp et(x0 x4 et xor x5 xor x1)xor x0 et x1 xor x6)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procédure r5(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x1 et(x3 et x4 et x6 xor(pas x5))xor x3 et x0 xor x4 et x5
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor x6 x2)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
var t7 t6,t5,t4,t3,t2,t1,t0:longword
& ! & ! & ! & nbsp w:array[0..31] de longword
begin
& nbsp & nbsp & nbsp t0:=ctx.hash[0]
& nbsp & nbsp & nbsp t1:=ctx.hash[1]
& nbsp & nbsp & nbsp t2:=ctx.hash[2]
& nbsp & nbsp & nbsp t3:=ctx.hash[3]
& nbsp & nbsp & nbsp t4:=ctx.hash[4]
& nbsp & nbsp & nbsp t5:=ctx.hash[5]
& nbsp & nbsp & nbsp t6:=ctx.hash[6]
& nbsp & nbsp & nbsp t7:=ctx.hash[7]
& nbsp & nbsp & nbsp déplacer(ctx.hashbuffer,w,sizeof(w))
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[ 0])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[ 1])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7 t6,w[ 2])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[ 3])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[ 4])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[ 5])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[ 6])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[ 7])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[ 8])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[10])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[11])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[12])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[13])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[14])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[15])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[16])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[17])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[18])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[19])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[20])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[21])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[22])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[23])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[24])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[25])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[26])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[27])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[28])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[29])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[30])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[31])
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[ 5],$452821E6)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[14],$38D01377)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[26],$BE5466CF)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[18],$34E90C6C)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[11],$C0AC29B7)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[28],$C97C50DD)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[ 7],$3F84D5B5)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[16],$B5470917)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[ 0],$9216D5D9)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[23],$8979FB1B)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[20],$D1310BA6)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[22],$98DFB5AC)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[ 1],$2FFD72DB)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[10],$D01ADFB7)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[ 4],$B8E1AFED)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[ 8],$6A267E96)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[30],$BA7C9045)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[ 3],$F12C7F99)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$24A19947)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[ 9],$B3916CF7)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$0801F2E2)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[24],$858EFC16)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[29],$636920D8)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[ 6],$71574E69)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$A458FEA3)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[12],$F4933D7E)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[15],$0D95748F)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[13],$728EB658)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[ 2],$718BCD58)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[25],$82154AEE)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[31],$7B54A41D)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[27],$C25A59B5)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$9C30D539)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9],$2AF26013)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[ 4],$C5D1B023)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[20],$286085F0)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[28],$CA417918)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[17],$B8DB38EF)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[ 8],$8E79DCB0)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[22],$603A180E)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[29],$6C9E0E8B)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[14],$B01E8A3E)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[25],$D71577C1)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[12],$BD314B27)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[24],$78AF2FDA)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[30],$55605C60)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[16],$E65525F3)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[26],$AA55AB94)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[31],$57489862)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[15],$63E81440)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[ 7],$55CA396A)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[ 3],$2AAB10B6)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[ 1],$B4CC5C34)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[ 0],$1141E8CE)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[18],$A15486AF)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[27],$7C72E993)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[13],$B3EE1411)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[ 6],$636FBC2A)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$2BA9C55D)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[10],$741831F6)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[23],$CE5C3E16)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[11],$9B87931E)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[ 5],$AFD6BA33)

& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[ 2],$6C24CF5C)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[24],$7A325381)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[ 4],$28958677)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[ 0],$3B8F4898)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[14],$6B4BB9AF)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7,t6,t5,t4,w[ 2],$C4BFE81B)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[ 7],$66282193)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[28],$61D809CC)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[23],$FB21A991)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[26],$487CAC60)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[ 6],$5DEC8032)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[30],$EF845D5D)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[20],$E98575B1)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[18],$DC262302)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[25],$EB651B88)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[19],$23893E81)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[ 3],$D396ACC5)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[22],$0F6D6FF3)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[11],$83F44239)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[31],$2E0B4482)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[21],$A4842004)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[ 8],$69C8F04A)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[27],$9E1F9B5E)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[12],$21C66842)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[ 9],$F6E96C9A)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[ 1],$670C9C61)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[29],$ABD388F0)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[ 5],$6A51A0D2)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[15],$D8542F68)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$960FA728)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[10],$AB5133A3)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[16],$6EEF0B6C)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[13],$137A3BE4)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[27],$BA3BF050)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 3],$7EFB2A98)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$A1F1651D)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[26],$39AF0176)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$66CA593E)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[11],$82430E88)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[20],$8CEE8619)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[29],$456F9FB4)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$7D84A5C3)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 0],$3B8B5EBE)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[12],$E06F75D8)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[ 7],$85C12073)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7 t6,t5,t4,w[ 3],$401A449F)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 8],$56C16AA6)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[31],$4ED3AA62)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[10],$363F7706)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[ 5],$1BFEDF72)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9],$429B023D)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[14],$37D0D724)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[30],$D00A1248)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7,t6,t5,t4,w[18],$DB0FEAD3)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 6],$49F1C09B)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[28],$075372C9)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[24],$80991B7B)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[ 2],$25D479D8)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[23],$F6E8DEF7)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[16],$E3FE501A)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[22],$B6794C3B)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7,t6,t5,t4,w[ 4],$976CE0BD)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 1],$04C006BA)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[25],$C1A94FB6)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[15],$409F60C4)
& nbsp & nbsp & nbsp inc(ctx.hash[0],t0)
& nbsp & nbsp & nbsp inc(ctx.hash[1],t1)
& nbsp & nbsp & nbsp inc(ctx.hash[2],t2)
& nbsp & nbsp & nbsp inc(ctx.hash[3],t3)
& nbsp & nbsp & nbsp inc(ctx.hash[4],t4)
& nbsp & nbsp & nbsp inc(ctx.hash[5],t5)
& nbsp & nbsp & nbsp inc(ctx.hash[6],t6)
& nbsp & nbsp & nbsp inc(ctx.hash[7],t7)
& nbsp & nbsp & nbsp fillchar(w,sizeof(w),0)
& nbsp & nbsp & nbsp ctx.index:=0
& nbsp & nbsp & nbsp fillchar(ctx.hashbuffer,sizeof(ctx.hashbuffer),0)
fin
procédure HavalUpdateLen(ctx:THaval_CTX len:longword)
begin
& nbsp & nbsp & nbsp inc(ctx.lenlo,(len shl 3))
& nbsp & nbsp & nbsp si ctx.lenlo<(len shl 3)ensuite, inc(ctx.lenhi)
& nbsp & nbsp & nbsp inc(ctx.lenhi,len shr 29)
fin
procédure HavalFlush(ctx:THaval_CTX)
begin
& nbsp & nbsp & nbsp ctx.lenhi:=0
& nbsp & nbsp & nbsp ctx.lenlo:=0
& nbsp & nbsp & nbsp ctx.index:=0
& nbsp & nbsp & nbsp fillchar(ctx.hashbuffer,sizeof(ctx.hashbuffer),0)
& nbsp & nbsp & nbsp fillchar(ctx.hash,sizeof(ctx.de hachage),0)
fin
procédure HavalInit(ctx:THaval_CTX)
begin
& nbsp & nbsp & nbsp HavalFlush(ctx)
& nbsp & nbsp & nbsp ctx.hash[0]:=$243F6A88
& nbsp & nbsp & nbsp ctx.hash[1]:=$85A308D3
& nbsp & nbsp & nbsp ctx.hash[2]:=$13198A2E
& nbsp & nbsp & nbsp ctx.hash[3]:=$03707344
& nbsp & nbsp & nbsp ctx.hash[4]:=$A4093822
& nbsp & nbsp & nbsp ctx.hash[5]:=$299F31D0
& nbsp & nbsp & nbsp ctx.hash[6]:=$082EFA98
& nbsp & nbsp & nbsp ctx.hash[7]:=$EC4E6C89
fin
procédure HavalUpdate(ctx:THaval_CTX const Taille de la mémoire Tampon: longint)
var p:^octet
begin
& nbsp & nbsp & nbsp HavalUpdateLen(ctx,taille)
& nbsp & nbsp nbsp & p:=@buffer
& nbsp & nbsp & nbsp tandis que la taille>0 do
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp if(sizeof(ctx.hashbuffer)-ctx.index)<=longword(taille)
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp déplacer(p^,ctx.hashbuffer[ctx.index],sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp dec(taille,sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(p,sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp HavalCompress(ctx)
& ! & ! & ! & ! & ! & nbsp fin else
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp déplacer(p^,ctx.hashbuffer[ctx.index],taille)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(ctx.index,taille)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp taille:=0
& ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp fin
fin
procédure HavalFinal(ctx:THaval_CTX var digest)
begin
& nbsp & nbsp & nbsp ctx.hashbuffer[ctx.index]:=$80
& nbsp & nbsp & nbsp si ctx.index>118 puis HavalCompress(ctx)
& nbsp & nbsp & nbsp ctx.hashbuffer[118]:=((HASH_SIZE et 3)shl 6)ou(5 shl 3)ou 1
& nbsp & nbsp & nbsp ctx.hashbuffer[119]:=(HASH_SIZE shr 2)et $FF
& nbsp & nbsp & nbsp déplacer(ctx.lenlo,ctx.hashbuffer[120],sizeof(ctx.lenlo))
& nbsp & nbsp & nbsp déplacer(ctx.lenhi,ctx.hashbuffer[124],sizeof(ctx.lenhi))
& nbsp & nbsp & nbsp HavalCompress(ctx)
& nbsp & nbsp & nbsp déplacer(ctx.hash,digérer,HASH_SIZE div 8)
& nbsp & nbsp & nbsp HavalFlush(ctx)
fin
//******************************************************************************
// PRNG
//******************************************************************************
procédure PrngInit(ctx:TPrng_CTX graine:longword)
var i:byte
begin
& nbsp & nbsp & nbsp ctx.x1:=(semences PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x2:=ctx.x1 mod PrngM2
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x3:=ctx.x1 mod PrngM3
& nbsp & nbsp & nbsp for i:=1 à 97 ne
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& ! & ! & ! & ! & ! & nbsp ctx.x2:=(ctx.x2*PrngI2 PrngC2)mod PrngM2
& ! & ! & ! & ! & ! & nbsp ctx.r[i]:=(ctx.x1 ctx.x2/PrngM2)/PrngM1
& nbsp & nbsp & nbsp fin
fin
fonction de Prng(ctx:TPrng_CTX):longword
var i:longword
begin
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x2:=(ctx.x2*PrngI2 PrngC2)mod PrngM2
& nbsp & nbsp & nbsp ctx.x3:=(ctx.x3*PrngI3 PrngC3)mod PrngM3
& ! & ! & ! i:=1 (97*ctx.x3)div PrngM3
& nbsp & nbsp & nbsp Prng:=trunc($FFFFFFFF*ctx.r[i])
& nbsp & nbsp & nbsp ctx.r[i]:=(ctx.x1 ctx.x2/PrngM2)/PrngM1
fin
procédure PrngFlush(ctx:TPrng_CTX)
var i:byte
begin
& nbsp & nbsp & nbsp ctx.x1:=0
& nbsp & nbsp & nbsp ctx.x2:=0
& nbsp & nbsp & nbsp ctx.x3:=0
& nbsp & nbsp & nbsp for i:=1 à 97 ne ctx.r[i]:=0
fin
//******************************************************************************
// la Clé des Routines
//******************************************************************************
procédure MutateKey(var key:key256)
var i:byte
& ! & ! & ! & nbsp exp_key:array[0..1,0..7]de longword
& ! & ! & ! & nbsp ran_ctx:Prng_CTX
& ! & ! & ! & nbsp hash_ctx:Haval_CTX
& ! & ! & ! & nbsp temp_key:key256
begin
// *** [1]alimentation touche que 8 graines dans de GÉNÉRATEUR pour générer 16 longues
& nbsp & nbsp & nbsp for i:=0 to 7 do
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp PrngInit(@ran_ctx,la touche[i]) //utilisation de la clé des graines de données
& ! & ! & ! & ! & ! & nbsp exp_key[0,i]:=Prng(@ran_ctx) //accroître la clé
& ! & ! & ! & ! & ! & nbsp exp_key[1,i]:=pas Prng(@ran_ctx) //annuler pour réduire PRNG relation
& nbsp & nbsp & nbsp fin
// *** [2] [1] en tant que 64 octets en SHA256
& nbsp & nbsp & nbsp for i:=0 à 7 ne temp_key[i]:=clé[i]
& nbsp & nbsp & nbsp HavalInit(@hash_ctx)
& nbsp & nbsp & nbsp HavalUpdate(@hash_ctx,exp_key[0][0],64) //alimentation largie que des données
& nbsp & nbsp & nbsp HavalFinal(@hash_ctx,clé)
// *** [3]xor(^) [2] et [1] pour produire la version finale de la clé
& nbsp & nbsp & nbsp for i:=0 à 7 ne touche[i]:=clé[i]xor temp_key[i] //réduire de HACHAGE r lationship
fin
fonction de PasswordToKey(pass:string):key256
var i,j:integer
& ! & ! & ! & nbsp temp_chars:array[0..42]byte
& ! & ! & ! & nbsp key_size:octet
& ! & ! & ! & nbsp temp_key:array[0..31]de byte
& ! & ! & ! & nbsp temp_pos:octet
& ! & ! & ! & nbsp bit_pos:octet
begin
// *** [1]convertir 8bit Caractères à 6bit octets
& nbsp & nbsp & nbsp for i:=1 to length(pass)ne
& ! & ! & ! & ! & ! & nbsp cas d'octets(col[i]) de
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 97..122:temp_chars[i]:=octet(col[i])-97 //si a..z attribuer 0-25
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 65..90 :temp_chars[i]:=octet(col[i])-39 //si A..Z attribuer 26-51
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 48..57 :temp_chars[i]:=octet(col[i]) 4 //si 0..9 assigner 52-61
& ! & ! & ! & ! & ! & ! & nbsp octet('.'):temp_chars[i]:=62 //si . attribuer 62
& ! & ! & ! & ! & ! & ! & nbsp octet('_'):temp_chars[i]:=63 // _ si assigner 63
& ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp key_size:=(longueur(pass








Les cles de 256 bits de cryptage fort


Les cles de 256 bits de cryptage fort : Plusieurs milliers de conseils pour vous faciliter la vie.


les Techniques pour identifier les cles de resister a la force brute et les attaques de dictionnaire. Inclut source Delphi pour l'analyse des touches, la conversion de mots de passes a cles et permutant les touches.
[256 bits Cles Pour le Chiffrement Fort]
// le code source en bas
La securite de toute bonne crypto-systeme s'appuie sur la touche. Peu importe la taille de la cle, il y aura un imposant diminution de la securite si elle est mal utilisee par le logiciel. Les cles doivent etre mesurees en fonction des bits d'entropie contenues a l'interieur d'eux, et une simple cle doit etre rejetee. Ils doivent contenir beaucoup de personnages differents, et n'ont pas de notables habitudes. C'est seulement lorsque ces conditions sont reunies, une cle de resister dictionnaire et les attaques par force brute.
Une cle de l'entropie mesure le montant de l'imprevisible bits.
Considerant les utilisateurs seront generalement utiliser uniquement des caracteres alphanumeriques, vous devez utiliser uniquement le nombre minimum de bits possible de representer la cle. A l'aide de 8 bits par caractere signifie qu'il y a 256 caracteres differents disponibles. Un attaquant sait que l'utilisateur va utiliser uniquement des caracteres alphanumeriques (62 caracteres a 6 bits), et ne sera pas pris la peine de tester pour le 194 autres personnages. Une pratique technique est de convertir chaque caractere (1 octet) dans un 6bit nombre, et la concatenation puis a cote les uns des autres. Vous pourrez vous permettre de lettres minuscules et de quelques nombres et de reduire chaque personnage a 5bits (32 caracteres). Il est important de la demande de l'utilisateur a utiliser des mots de passe qui sont plus grandes pour atteindre la meme taille de la cle. Avec ce dit, a 8 touche de caractere ne doit pas etre considere comme 64bits, mais en fait 48bits (6bits x 8 caracteres). Avec les touches de faible entropie constituent une menace pour la securite, peu importe comment bien conçu le reste du systeme est conçu.
Bref, en un mot, les cles ne doivent pas etre toleres au sein d'un systeme cryptographique. Meme si vous optimisez l'entropie, il n'est tout simplement pas assez de donnees cles dans un 5 touche de caractere pour resister a une attaque par force brute. Un 30bit cle (6bits x 5 caracteres) permet seulement d'une possibilite de quelques milliards de cles, ce qui ne prend que quelques heures a l'echappement sur un ordinateur puissant. Une cle d'au moins 128bits devrait etre obligatoire pour les sesitive donnees, cela permet une duree de quelques annees avant que le besoin s'en fait sentir pour une nouvelle et longue cle. Au 6bits par caractere cela signifie que la cle doit etre de 22 caracteres ou plus. Cela peut sembler importante, mais rien ne vous empeche d'utiliser des phrases. Un exemple permet de regarder le membre de phrase 'L'Ascenseur a Ete a la HAUSSE', il est de 25 caracteres. La cle est de 150 bits de long, mais facile a retenir. Toutes les cles doivent etre traitees de cette maniere. Il n'y a aucune excuse pour permettre a un utilisateur d'utiliser un 8 touche de caractere et de compromettre l'ensemble du cryptosysteme.
Une cle offre une meilleure resistance contre les recherches algorithmiques lorsqu'il contient beaucoup de personnages differents. Si la cle est de 22 caracteres, mais ne contient 4 personnages differents, alors il est extremement fragiles. Pour garder les choses simples, au moins la moitie des caracteres dans une cle differente (22 touche de caractere doit avoir au moins 11 personnages differents). Plus de caracteres differents dans une cle de rendre plus difficile a predire statistiquement le caractere suivant. Bien qu'une telle attaque est peu probable, il n'y a pas de place pour l'erreur. La prevention de tous les types connus d'attaques et d'anticiper les violations avant-main est de prononcer-le plus d'importance peu important risque peut sembler. Un risque est toujours un risque. Il est important d'encourager les utilisateurs a avoir le plus de personnages differents, ils peuvent memoriser dans chaque touche pour faire des recherches algorithmiques donneront aucun resultat.
les Attaquants amour de modeles, de faire des recherches et de sa vie beaucoup plus facile. Les utilisateurs semblent penser que les cles comme: 'bingobingo' sont plus sûrs que ceux comme: 'bingo', mais le fait est qu'ils ne sont que legerement mieux. Smart attaquants connaître toutes les astuces des utilisateurs de concevoir pour rendre leurs cles difficiles a deviner. A l'aide d'un mot deux fois devrait etre fortement decouragee. Souvent, les utilisateurs d'ajouter des numeros a la fin de la cle, pour le rendre moins previsible. Malheureusement, 80% du temps, le nombre est de 123, et l'autre 20% est de 321. Pour un attaquant de tester ces touches supplementaires, il doit egalement tester avec 123 ajoute a chaque cle, ainsi que 321. Cela signifie qu'il est a la recherche de 3 fois le nombre de touches, ce qui represente 1,5 bit augmente au lieu de la 18bits 3 caracteres doivent offrir. Les tests de cles pour les modeles peuvent etre tres complexe obstacle, et ne seront pas abordes dans ce document. Apres evidente modeles ont ete refuses, il est sage de passer la cle via une fonction de hachage telle que SHA ou HAVAL. Ces fonctions prennent en entree des donnees et de creer une sortie qui n'a pas resoluble relation a l'entree pour chaque entree il y a une seule sortie. La sortie de ces fonctions de hachage est apparemment aleatoire et efficacement pour dissimuler des modeles discrets.
en Eliminant les motifs de fait, il est tres difficile pour un attaquant de
recherche faible cles.

/ / ***** NOTES:
La source soufflet est partie d'une bibliotheque en cours cummulating 3 annees de recherche. Il est destine a etre un exemple, mais si vous voulez l'utiliser dans un programme, un peu de credit, ce serait bien.
Ces routines ont ete optimises et re-ecrit une douzaine de fois, j'ai essaye de commenter du mieux que je pouvais. La procedure de structures peut paraître etrange, parce que j'ai initialement ecrit en C . Le generateur de nombre pseudo-aleatoire provient d'une source inconnue, et la mise en œuvre de haval est un [grave] modification de David Barton est haval.pas trouve dans le DCPcrypt 1.3 suite de composants. J'ai utilise le contexte d'encapsulation, de sorte que les procedures n'ont pas a etre instancie dans un environnement multi-thread (serveur peut-etre?).
Description:
[MutateKey]
Transforme une cle dans un autre par l'expansion et la compression. Pas de cles precedentes peut etre determine par la cle actuelle, mais de tous les reussir cles peuvent etre. Ceci est utile pour ajouter de l'entropie a une cle (de sorte qu'il n'y a pas de raccourcis de la recherche) ou pour les seances qui peuvent avoir besoin d'utiliser des sessions multiples-cles.
[PasswordToKey]
Convertit une chaîne de 64 caracteres: 'a'-'z', 'A'-'Z', '0'-'9', '_' et '.' dans un 256bit en laissant de cote les 2 bits de chaque caractere (64 caracteres seulement besoin 6bits pour representer chacun, au lieu de 8 bits 256 caracteres), puis utilise MutateKey pour ajouter de l'entropie.
[AnanlyzeKey]
Examine une cle de l'entropie par la recherche de motifs, de compter les bits par caractere, de l'evaluation 0/1 (binaire) de distribution, et en tire un bilan recapitulatif de notation de la cle mesuree en bits de longueur.
(un exemple complet de ce qui peut etre trouve a http://www.geocities.com/drmungkee/software/codebase.html)

//******************* l'UNITE COMMENCE ICI ****************************************
unite de keyfunc
interface
type
& nbsp & nbsp & nbsp key256=array[0..7]de longword
& nbsp & nbsp & nbsp Prng_CTX=enregistrement
& ! & ! & ! & ! & ! & nbsp r:array[1..97]de reel
& ! & ! & ! & ! & ! & nbsp x1,x2,x3:longword
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp TPrng_CTX=^Prng_CTX
& nbsp & nbsp & nbsp Haval_CTX=enregistrement
& ! & ! & ! & ! & ! & nbsp lenhi,lenlo:longword
& ! & ! & ! & ! & ! & nbsp Index:longword
& ! & ! & ! & ! & ! & nbsp hash:array[0..7]de longword
& ! & ! & ! & ! & ! & nbsp hashbuffer:array[0..127]of byte
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp THaval_CTX=^Haval_CTX
& nbsp & nbsp & nbsp KeyStatistics=enregistrement
& ! & ! & ! & ! & ! & nbsp KeyLength:longword
& ! & ! & ! & ! & ! & nbsp KeySize:longword
& ! & ! & ! & ! & ! & nbsp CharCount:octet
& ! & ! & ! & ! & ! & nbsp CharBits:octet
& ! & ! & ! & ! & ! & nbsp Motifs:longword
& ! & ! & ! & ! & ! & nbsp Differentiel:longword
& ! & ! & ! & ! & ! & nbsp BruteLength:longword
& ! & ! & ! & ! & ! & nbsp Cote:longword
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp TKeyStatistics=^KeyStatistics
procedure MutateKey(var key:key256)
fonction de PasswordToKey(pass:string):key256
fonction de AnalyzePassword(pass:string):KeyStatistics
application
const BIT_MASK:array[0..7]of byte = (1,2,4,8,16,32,64,128)
& ! & ! & ! & ! & ! & nbsp HASH_SIZE=256
& ! & ! & ! & ! & ! & nbsp PrngM1:longword=259200
& ! & ! & ! & ! & ! & nbsp PrngI1:longword=7141
& ! & ! & ! & ! & ! & nbsp PrngC1:longword=54773
& ! & ! & ! & ! & ! & nbsp PrngM2:longword=134456
& ! & ! & ! & ! & ! & nbsp PrngI2:longword=8121
& ! & ! & ! & ! & ! & nbsp PrngC2:longword=28411
& ! & ! & ! & ! & ! & nbsp PrngM3:longword=243000
& ! & ! & ! & ! & ! & nbsp PrngI3:longword=4561
& ! & ! & ! & ! & ! & nbsp PrngC3:longword=51349
//*******************************************************************
// Haval
//
// Derives de David Barton est haval.pas (DCPcrypt 1.3 composant de la suite)
//
//*******************************************************************
procedure HavalCompress(ctx:THaval_CTX)
& nbsp & nbsp & nbsp fonction rr32(x:longword c:longint):longword registre assembleur
& nbsp & nbsp & nbsp asm
& ! & ! & ! & ! & ! & nbsp mov ecx,edx
& ! & ! & ! & ! & ! & nbsp ror eax,cl
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procedure r1(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=((x2)et((x6)xor(x1))xor(x5)et(x4)xor(x0)et(x3)xor(x6))
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procedure r2(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x3 et(x4) et(non x0)xor x1 et x2 xor x6 xor x5)xor x1 et(x4 xor x2)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor x0 et x2 xor x5)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procedure r3(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=((x4)et((x1)et(x3)xor(x2)xor(x5))xor(x1)et(x0)xor(x3)et(x6)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor(x5))
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procedure r4(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x3 et(x5(et non pas x0)xor x2 et x1)xor x4 xor x1 xor x6)xor x2
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp et(x0 x4 et xor x5 xor x1)xor x0 et x1 xor x6)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp procedure r5(var x7,x6,x5,x4,x3,x2,x1,x0:longword const w,c:longword)
& nbsp & nbsp & nbsp var t:longword
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp t:=(x1 et(x3 et x4 et x6 xor(pas x5))xor x3 et x0 xor x4 et x5
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp xor x6 x2)
& ! & ! & ! & ! & ! & nbsp x7:=rr32(t,7) rr32(x7,11) w c
& nbsp & nbsp & nbsp fin
var t7 t6,t5,t4,t3,t2,t1,t0:longword
& ! & ! & ! & nbsp w:array[0..31] de longword
begin
& nbsp & nbsp & nbsp t0:=ctx.hash[0]
& nbsp & nbsp & nbsp t1:=ctx.hash[1]
& nbsp & nbsp & nbsp t2:=ctx.hash[2]
& nbsp & nbsp & nbsp t3:=ctx.hash[3]
& nbsp & nbsp & nbsp t4:=ctx.hash[4]
& nbsp & nbsp & nbsp t5:=ctx.hash[5]
& nbsp & nbsp & nbsp t6:=ctx.hash[6]
& nbsp & nbsp & nbsp t7:=ctx.hash[7]
& nbsp & nbsp & nbsp deplacer(ctx.hashbuffer,w,sizeof(w))
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[ 0])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[ 1])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7 t6,w[ 2])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[ 3])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[ 4])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[ 5])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[ 6])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[ 7])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[ 8])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[10])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[11])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[12])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[13])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[14])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[15])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[16])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[17])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[18])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[19])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[20])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[21])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[22])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[23])
& nbsp & nbsp & nbsp r1(t7,t6,t5,t4,t3,t2,t1,t0,w[24])
& nbsp & nbsp & nbsp r1(t6,t5,t4,t3,t2,t1,t0,t7,w[25])
& nbsp & nbsp & nbsp r1(t5,t4,t3,t2,t1,t0,t7,t6,w[26])
& nbsp & nbsp & nbsp r1(t4,t3,t2,t1,t0,t7,t6,t5,w[27])
& nbsp & nbsp & nbsp r1(t3,t2,t1,t0,t7,t6,t5,t4,w[28])
& nbsp & nbsp & nbsp r1(t2,t1,t0,t7,t6,t5,t4,t3,w[29])
& nbsp & nbsp & nbsp r1(t1,t0,t7,t6,t5,t4,t3,t2,w[30])
& nbsp & nbsp & nbsp r1(t0,t7,t6,t5,t4,t3,t2,t1,w[31])
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[ 5],$452821E6)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[14],$38D01377)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[26],$BE5466CF)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[18],$34E90C6C)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[11],$C0AC29B7)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[28],$C97C50DD)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[ 7],$3F84D5B5)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[16],$B5470917)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[ 0],$9216D5D9)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[23],$8979FB1B)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[20],$D1310BA6)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[22],$98DFB5AC)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[ 1],$2FFD72DB)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[10],$D01ADFB7)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[ 4],$B8E1AFED)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[ 8],$6A267E96)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[30],$BA7C9045)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[ 3],$F12C7F99)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$24A19947)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[ 9],$B3916CF7)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$0801F2E2)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[24],$858EFC16)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[29],$636920D8)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[ 6],$71574E69)
& nbsp & nbsp & nbsp r2(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$A458FEA3)
& nbsp & nbsp & nbsp r2(t6,t5,t4,t3,t2,t1,t0,t7,w[12],$F4933D7E)
& nbsp & nbsp & nbsp r2(t5,t4,t3,t2,t1,t0,t7,t6,w[15],$0D95748F)
& nbsp & nbsp & nbsp r2(t4,t3,t2,t1,t0,t7,t6,t5,w[13],$728EB658)
& nbsp & nbsp & nbsp r2(t3,t2,t1,t0,t7 t6,t5,t4,w[ 2],$718BCD58)
& nbsp & nbsp & nbsp r2(t2,t1,t0,t7,t6,t5,t4,t3,w[25],$82154AEE)
& nbsp & nbsp & nbsp r2(t1,t0,t7,t6,t5,t4,t3,t2,w[31],$7B54A41D)
& nbsp & nbsp & nbsp r2(t0,t7,t6,t5,t4,t3,t2,t1,w[27],$C25A59B5)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$9C30D539)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9],$2AF26013)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[ 4],$C5D1B023)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[20],$286085F0)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[28],$CA417918)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[17],$B8DB38EF)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[ 8],$8E79DCB0)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[22],$603A180E)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[29],$6C9E0E8B)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[14],$B01E8A3E)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[25],$D71577C1)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[12],$BD314B27)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[24],$78AF2FDA)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[30],$55605C60)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[16],$E65525F3)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[26],$AA55AB94)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[31],$57489862)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[15],$63E81440)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[ 7],$55CA396A)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[ 3],$2AAB10B6)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[ 1],$B4CC5C34)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[ 0],$1141E8CE)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[18],$A15486AF)
& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[27],$7C72E993)
& nbsp & nbsp & nbsp r3(t7,t6,t5,t4,t3,t2,t1,t0,w[13],$B3EE1411)
& nbsp & nbsp & nbsp r3(t6,t5,t4,t3,t2,t1,t0,t7,w[ 6],$636FBC2A)
& nbsp & nbsp & nbsp r3(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$2BA9C55D)
& nbsp & nbsp & nbsp r3(t4,t3,t2,t1,t0,t7,t6,t5,w[10],$741831F6)
& nbsp & nbsp & nbsp r3(t3,t2,t1,t0,t7 t6,t5,t4,w[23],$CE5C3E16)
& nbsp & nbsp & nbsp r3(t2,t1,t0,t7,t6,t5,t4,t3,w[11],$9B87931E)
& nbsp & nbsp & nbsp r3(t1,t0,t7,t6,t5,t4,t3,t2,w[ 5],$AFD6BA33)

& nbsp & nbsp & nbsp r3(t0,t7,t6,t5,t4,t3,t2,t1,w[ 2],$6C24CF5C)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[24],$7A325381)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[ 4],$28958677)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[ 0],$3B8F4898)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[14],$6B4BB9AF)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7,t6,t5,t4,w[ 2],$C4BFE81B)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[ 7],$66282193)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[28],$61D809CC)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[23],$FB21A991)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[26],$487CAC60)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[ 6],$5DEC8032)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[30],$EF845D5D)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[20],$E98575B1)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[18],$DC262302)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[25],$EB651B88)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[19],$23893E81)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[ 3],$D396ACC5)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[22],$0F6D6FF3)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[11],$83F44239)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[31],$2E0B4482)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[21],$A4842004)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[ 8],$69C8F04A)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[27],$9E1F9B5E)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[12],$21C66842)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[ 9],$F6E96C9A)
& nbsp & nbsp & nbsp r4(t7,t6,t5,t4,t3,t2,t1,t0,w[ 1],$670C9C61)
& nbsp & nbsp & nbsp r4(t6,t5,t4,t3,t2,t1,t0,t7,w[29],$ABD388F0)
& nbsp & nbsp & nbsp r4(t5,t4,t3,t2,t1,t0,t7,t6,w[ 5],$6A51A0D2)
& nbsp & nbsp & nbsp r4(t4,t3,t2,t1,t0,t7,t6,t5,w[15],$D8542F68)
& nbsp & nbsp & nbsp r4(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$960FA728)
& nbsp & nbsp & nbsp r4(t2,t1,t0,t7,t6,t5,t4,t3,w[10],$AB5133A3)
& nbsp & nbsp & nbsp r4(t1,t0,t7,t6,t5,t4,t3,t2,w[16],$6EEF0B6C)
& nbsp & nbsp & nbsp r4(t0,t7,t6,t5,t4,t3,t2,t1,w[13],$137A3BE4)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[27],$BA3BF050)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 3],$7EFB2A98)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[21],$A1F1651D)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[26],$39AF0176)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7 t6,t5,t4,w[17],$66CA593E)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[11],$82430E88)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[20],$8CEE8619)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[29],$456F9FB4)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[19],$7D84A5C3)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 0],$3B8B5EBE)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[12],$E06F75D8)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[ 7],$85C12073)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7 t6,t5,t4,w[ 3],$401A449F)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 8],$56C16AA6)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[31],$4ED3AA62)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[10],$363F7706)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[ 5],$1BFEDF72)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[ 9],$429B023D)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[14],$37D0D724)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[30],$D00A1248)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7,t6,t5,t4,w[18],$DB0FEAD3)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 6],$49F1C09B)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[28],$075372C9)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[24],$80991B7B)
& nbsp & nbsp & nbsp r5(t7,t6,t5,t4,t3,t2,t1,t0,w[ 2],$25D479D8)
& nbsp & nbsp & nbsp r5(t6,t5,t4,t3,t2,t1,t0,t7,w[23],$F6E8DEF7)
& nbsp & nbsp & nbsp r5(t5,t4,t3,t2,t1,t0,t7,t6,w[16],$E3FE501A)
& nbsp & nbsp & nbsp r5(t4,t3,t2,t1,t0,t7,t6,t5,w[22],$B6794C3B)
& nbsp & nbsp & nbsp r5(t3,t2,t1,t0,t7,t6,t5,t4,w[ 4],$976CE0BD)
& nbsp & nbsp & nbsp r5(t2,t1,t0,t7,t6,t5,t4,t3,w[ 1],$04C006BA)
& nbsp & nbsp & nbsp r5(t1,t0,t7,t6,t5,t4,t3,t2,w[25],$C1A94FB6)
& nbsp & nbsp & nbsp r5(t0,t7,t6,t5,t4,t3,t2,t1,w[15],$409F60C4)
& nbsp & nbsp & nbsp inc(ctx.hash[0],t0)
& nbsp & nbsp & nbsp inc(ctx.hash[1],t1)
& nbsp & nbsp & nbsp inc(ctx.hash[2],t2)
& nbsp & nbsp & nbsp inc(ctx.hash[3],t3)
& nbsp & nbsp & nbsp inc(ctx.hash[4],t4)
& nbsp & nbsp & nbsp inc(ctx.hash[5],t5)
& nbsp & nbsp & nbsp inc(ctx.hash[6],t6)
& nbsp & nbsp & nbsp inc(ctx.hash[7],t7)
& nbsp & nbsp & nbsp fillchar(w,sizeof(w),0)
& nbsp & nbsp & nbsp ctx.index:=0
& nbsp & nbsp & nbsp fillchar(ctx.hashbuffer,sizeof(ctx.hashbuffer),0)
fin
procedure HavalUpdateLen(ctx:THaval_CTX len:longword)
begin
& nbsp & nbsp & nbsp inc(ctx.lenlo,(len shl 3))
& nbsp & nbsp & nbsp si ctx.lenlo<(len shl 3)ensuite, inc(ctx.lenhi)
& nbsp & nbsp & nbsp inc(ctx.lenhi,len shr 29)
fin
procedure HavalFlush(ctx:THaval_CTX)
begin
& nbsp & nbsp & nbsp ctx.lenhi:=0
& nbsp & nbsp & nbsp ctx.lenlo:=0
& nbsp & nbsp & nbsp ctx.index:=0
& nbsp & nbsp & nbsp fillchar(ctx.hashbuffer,sizeof(ctx.hashbuffer),0)
& nbsp & nbsp & nbsp fillchar(ctx.hash,sizeof(ctx.de hachage),0)
fin
procedure HavalInit(ctx:THaval_CTX)
begin
& nbsp & nbsp & nbsp HavalFlush(ctx)
& nbsp & nbsp & nbsp ctx.hash[0]:=$243F6A88
& nbsp & nbsp & nbsp ctx.hash[1]:=$85A308D3
& nbsp & nbsp & nbsp ctx.hash[2]:=$13198A2E
& nbsp & nbsp & nbsp ctx.hash[3]:=$03707344
& nbsp & nbsp & nbsp ctx.hash[4]:=$A4093822
& nbsp & nbsp & nbsp ctx.hash[5]:=$299F31D0
& nbsp & nbsp & nbsp ctx.hash[6]:=$082EFA98
& nbsp & nbsp & nbsp ctx.hash[7]:=$EC4E6C89
fin
procedure HavalUpdate(ctx:THaval_CTX const Taille de la memoire Tampon: longint)
var p:^octet
begin
& nbsp & nbsp & nbsp HavalUpdateLen(ctx,taille)
& nbsp & nbsp nbsp & p:=@buffer
& nbsp & nbsp & nbsp tandis que la taille>0 do
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp if(sizeof(ctx.hashbuffer)-ctx.index)<=longword(taille)
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp deplacer(p^,ctx.hashbuffer[ctx.index],sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp dec(taille,sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(p,sizeof(ctx.hashbuffer)-ctx.index)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp HavalCompress(ctx)
& ! & ! & ! & ! & ! & nbsp fin else
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp deplacer(p^,ctx.hashbuffer[ctx.index],taille)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(ctx.index,taille)
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp taille:=0
& ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp fin
fin
procedure HavalFinal(ctx:THaval_CTX var digest)
begin
& nbsp & nbsp & nbsp ctx.hashbuffer[ctx.index]:=$80
& nbsp & nbsp & nbsp si ctx.index>118 puis HavalCompress(ctx)
& nbsp & nbsp & nbsp ctx.hashbuffer[118]:=((HASH_SIZE et 3)shl 6)ou(5 shl 3)ou 1
& nbsp & nbsp & nbsp ctx.hashbuffer[119]:=(HASH_SIZE shr 2)et $FF
& nbsp & nbsp & nbsp deplacer(ctx.lenlo,ctx.hashbuffer[120],sizeof(ctx.lenlo))
& nbsp & nbsp & nbsp deplacer(ctx.lenhi,ctx.hashbuffer[124],sizeof(ctx.lenhi))
& nbsp & nbsp & nbsp HavalCompress(ctx)
& nbsp & nbsp & nbsp deplacer(ctx.hash,digerer,HASH_SIZE div 8)
& nbsp & nbsp & nbsp HavalFlush(ctx)
fin
//******************************************************************************
// PRNG
//******************************************************************************
procedure PrngInit(ctx:TPrng_CTX graine:longword)
var i:byte
begin
& nbsp & nbsp & nbsp ctx.x1:=(semences PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x2:=ctx.x1 mod PrngM2
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x3:=ctx.x1 mod PrngM3
& nbsp & nbsp & nbsp for i:=1 a 97 ne
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& ! & ! & ! & ! & ! & nbsp ctx.x2:=(ctx.x2*PrngI2 PrngC2)mod PrngM2
& ! & ! & ! & ! & ! & nbsp ctx.r[i]:=(ctx.x1 ctx.x2/PrngM2)/PrngM1
& nbsp & nbsp & nbsp fin
fin
fonction de Prng(ctx:TPrng_CTX):longword
var i:longword
begin
& nbsp & nbsp & nbsp ctx.x1:=(ctx.x1*PrngI1 PrngC1)mod PrngM1
& nbsp & nbsp & nbsp ctx.x2:=(ctx.x2*PrngI2 PrngC2)mod PrngM2
& nbsp & nbsp & nbsp ctx.x3:=(ctx.x3*PrngI3 PrngC3)mod PrngM3
& ! & ! & ! i:=1 (97*ctx.x3)div PrngM3
& nbsp & nbsp & nbsp Prng:=trunc($FFFFFFFF*ctx.r[i])
& nbsp & nbsp & nbsp ctx.r[i]:=(ctx.x1 ctx.x2/PrngM2)/PrngM1
fin
procedure PrngFlush(ctx:TPrng_CTX)
var i:byte
begin
& nbsp & nbsp & nbsp ctx.x1:=0
& nbsp & nbsp & nbsp ctx.x2:=0
& nbsp & nbsp & nbsp ctx.x3:=0
& nbsp & nbsp & nbsp for i:=1 a 97 ne ctx.r[i]:=0
fin
//******************************************************************************
// la Cle des Routines
//******************************************************************************
procedure MutateKey(var key:key256)
var i:byte
& ! & ! & ! & nbsp exp_key:array[0..1,0..7]de longword
& ! & ! & ! & nbsp ran_ctx:Prng_CTX
& ! & ! & ! & nbsp hash_ctx:Haval_CTX
& ! & ! & ! & nbsp temp_key:key256
begin
// *** [1]alimentation touche que 8 graines dans de GENERATEUR pour generer 16 longues
& nbsp & nbsp & nbsp for i:=0 to 7 do
& nbsp & nbsp & nbsp commencer
& ! & ! & ! & ! & ! & nbsp PrngInit(@ran_ctx,la touche[i]) //utilisation de la cle des graines de donnees
& ! & ! & ! & ! & ! & nbsp exp_key[0,i]:=Prng(@ran_ctx) //accroître la cle
& ! & ! & ! & ! & ! & nbsp exp_key[1,i]:=pas Prng(@ran_ctx) //annuler pour reduire PRNG relation
& nbsp & nbsp & nbsp fin
// *** [2] [1] en tant que 64 octets en SHA256
& nbsp & nbsp & nbsp for i:=0 a 7 ne temp_key[i]:=cle[i]
& nbsp & nbsp & nbsp HavalInit(@hash_ctx)
& nbsp & nbsp & nbsp HavalUpdate(@hash_ctx,exp_key[0][0],64) //alimentation largie que des donnees
& nbsp & nbsp & nbsp HavalFinal(@hash_ctx,cle)
// *** [3]xor(^) [2] et [1] pour produire la version finale de la cle
& nbsp & nbsp & nbsp for i:=0 a 7 ne touche[i]:=cle[i]xor temp_key[i] //reduire de HACHAGE r lationship
fin
fonction de PasswordToKey(pass:string):key256
var i,j:integer
& ! & ! & ! & nbsp temp_chars:array[0..42]byte
& ! & ! & ! & nbsp key_size:octet
& ! & ! & ! & nbsp temp_key:array[0..31]de byte
& ! & ! & ! & nbsp temp_pos:octet
& ! & ! & ! & nbsp bit_pos:octet
begin
// *** [1]convertir 8bit Caracteres a 6bit octets
& nbsp & nbsp & nbsp for i:=1 to length(pass)ne
& ! & ! & ! & ! & ! & nbsp cas d'octets(col[i]) de
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 97..122:temp_chars[i]:=octet(col[i])-97 //si a..z attribuer 0-25
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 65..90 :temp_chars[i]:=octet(col[i])-39 //si A..Z attribuer 26-51
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp 48..57 :temp_chars[i]:=octet(col[i]) 4 //si 0..9 assigner 52-61
& ! & ! & ! & ! & ! & ! & nbsp octet('.'):temp_chars[i]:=62 //si . attribuer 62
& ! & ! & ! & ! & ! & ! & nbsp octet('_'):temp_chars[i]:=63 // _ si assigner 63
& ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp key_size:=(longueur(pass

Les clés de 256 bits de cryptage fort

Les clés de 256 bits de cryptage fort : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation