Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Det er det der kendetegner et HASH - det er en etvejs 'kryptering' - du kan ikke 'regne den tilbage' - men alt er jo en sandhed med modifikationer.
SHA1 var på et tidspunkt det mest sikre, men blev i 2005 udsat for noget kritik idét det var ment at den havde visse matematiske svagheder. Selvom SHA256 har visse sammenfald med SHA1, er den ikke sårbar overfor de svagheder.
Den nuværende teknologi har ikke held med at bryde SHA256 hashet, så hvis du smider den gennem SHA512, så kan du vist ikke være mere sikker.
#6 Man kan måske tale for at der ikke er nogen grund til at generere noget ud fra en HASH-algoritme som skal kunne identificere noget, hvis det blot er til at aktivere noget; så kan du jo lige så godt bare generere en unik streng i stedet og knytte den til en bruger/entry.
Om den er på 32 tegn eller 128 eller hvor lang den bliver er ikke så vigtig - bare du ikke overlapper med andre entries.
Nu kan man hævde at sikkerheden i en aktivering på et site hvor udvikleren spørger på eksperten.dk formentligt ikke behøver at være tårnhøj.
Men hvis vi nu hypotetisk siger at det er vigtigt at den aktiverings key skal være virkeligt svært at gætte, så er tricket at der skal bruges noget input som er uforudsigeligt.
PHP kommer mig bekendt ikke med en kryptografisk sikker RNG.
Hashing hjælper ikke spor med det. Hashing er *i denne sammenhæng* bare en konvertering fra noget variabel længde data til fast længde data. Og hex/base64 konverterer fra alle tegn til et begrænset antal tegn.
Kilder til input: * tiden fra en high resolution clock * system info såsom "ps aux" output på *nix * OS RNG såsom /dev/random og /dev/urandom på *nix
Så tag en mængde input fra disse kilder, hvor det mulige udfaldsrum er større end antal hash værdier for den hash algoritme du bruger, hash dem og brug den.
Man har før læst om angreb på programkode, som baserer sin sikkerhed på "svage" tilfældighedsgeneratorer. Kan man finde en svaghed, kan den måske bruges til at lave kvalificerede gæt.
Jeg har stadig ikke helt fundet ud af hvorfor spørger synes at sikkerheden skal være så til høj i en activate string, og det vedkommer såvidt heller ikke mig. Jeg tænker bare at i har gang i metoder der på sigt vil kræve meget stor regnekraft. Og hvis essensen således bare er at den skal være entydig op imod en database så synes jeg nu nok det ville være mere nærliggende at bruge sha1(time()) som "generator".
ser ud som om den har 2^160 mulige værdier, hvilket er umuligt at gætte.
Men hvis vi antager at confirmation email altid når frem i løbet af 0-10 sekunder, så er der faktisk kun 10 relevante mulige værdier d.v.s. at sandsynligheden for at gætte rigtigt ved første gæt er mindst 1/10 og sandsynligheden for at gætte ved 10 forsøg er 1.
sha512(microtime())
ser ud som om den har 2^512 mulige værdier, hvilket (så vidt jeg ved) er flere end der er atomer i universet.
Men med samme antagelse som ovenfor om email, så er der kun 10 millioner relevante mulige værdier, så sandsynligheden for at gætte i første gæt er 1/10000000 og sandsynligheden for at gætte ved 1000 forsøg er 1/10000. Dette forudsætter at computeren har en high resolution clock.
Er det godt nok? Det må man jo vurdere! Som alle ved er der kun 10000 mulige pin koder på et dankort og det lever folk med.
Men det er en god ide at have forstået og overvejet problemstillingen, så man kan træffe et kvalificeret valg.
Og man skal slet ikke lade sig dupere af en hash funktion med et højt antal bits.
Medmindre man har et stort antal eksterne bytes som input, så hjælper det ikke.
Tråden er måske også kommet lidt ud på et sidespor for spørger - med den tekniske viden og den snak det pludseligt har handlet om (som tidligere pointeret) er vi ud over det relevante for spørger, som måske ikke helt selv forstår indholdet af sit spørgsmål.
Det bedste ville måske være at den oprindelige funktion virker fint til det faktiske formål, men som sådan ikke har noget med kryptering eller hashing at gøre.
Med hensyn til relevans af forskellige betragtninger, så er der ikke noget galt i at beslutte at man kan leve med en vis risiko. Det gør alle inkl. bl.a. dankort og nemid. Men det er ike så godt at have truffet beslutningen uden at have forstået de mulige problemer. Så jeg finder betragtningerne meget relevante at få nævnt.
Venter til alle har lagt svar og saetter flueben i alle.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.