Sitat av
Dodecha
I enkle ord, du kan aldri få originaldataen ut fra en hash.
Forutsatt at man bruker en hash som ikke er brukket, implementerer den korrekt, sikrer seg mot sidekanalsangrep og så videre - ja. Under de forutsetninger er jeg med på notene. Men da må jeg også stusse litt på hvordan de får det til! La meg forsøke å illustrere poenget mitt med et enkelt eksempel:
Kode
In [1]: A = 'supercalifragilisticexpialidocious'
In [2]: B = 'suqercalifragilisticexpialidocious'
In [3]: sum(a != b for a, b in zip(A, B))
Out[3]: 1
In [4]: import hashlib
In [5]: A_check = hashlib.md5(A.encode('utf-8')).hexdigest()
In [6]: B_check = hashlib.md5(B.encode('utf-8')).hexdigest()
In [7]: A_check
Out[7]: '08206e04e240edb96b7b6066ee1087af'
In [8]: B_check
Out[8]: 'f85764a00997beed03c518b39e9c2d0e'
In [9]: sum(a != b for a, b in zip(A_check, B_check))
Out[9]: 29
Så! Vi starter med to ord, A og B , bestående av 34 tegn og hvor Hamming-distansen er 1. Hammingdistansen mellom MD5-summen av ordene er 29. Her bør det bemerkes at lengden på chekcsummen bare er 32, ikke 34, men det har lite å si. De tre tegnene som matcher er bare tilfeldigheter. Poenget mitt er at en marginal endring i input gir totalt forskjellig output, og det er jo hele poenget!
Hvordan skal dette da fungere med et fysisk fingeravtrykk? Du må på et eller annet vis måle noe og her vil det alltid være ulikheter fra måling til måling. Å kaste maskinlæring på en database av bilder og si at to ulike bilder med 87% sannsynlighet er tatt av samme finger - ja, det er lett nok. Men dersom du bare har hashen av bildene, hvordan skal du kunne gjøre noe slikt? Dersom du kan si at hashen ligner med så og så mange prosent, så kan du utlede hva slags bilde de er laget fra.