sql >> Database >  >> RDS >> Mysql

Alternatief voor gehashte SSN als sleutel in MySQL

Ik denk dat dit artikel kan zeer relevant zijn voor wat u doet. Als u de SSN's inderdaad wilt "anonimiseren" om veiligheidsredenen en wettelijke aansprakelijkheid, dan is alleen hashen ervan niet voldoende.

Gewoon hashen zou een volledig deterministisch proces zijn, dus om individuele SSN's effectief te "maskeren", moet het proces willekeurig worden verdeeld. Anders zou je gewoon brute kracht door alle mogelijke combinaties van SSN's kunnen halen (wat veel minder werk zou zijn dan proberen de hash-functie brute kracht te geven) en op zoek gaan naar een overeenkomende waarde.

Om te zien waarom dit geldt, neem het meest simplistische voorbeeld dat een SSN slechts twee waarden kan aannemen, 0 en 1. Ongeacht de kwaliteit en sterkte van de hashfunctie, zijn er uiteindelijk maar twee mogelijke uitkomsten en het is gemakkelijk te zien wat is wat.

Het is het oude spel van waarom je b.v. niet zou moeten hashen. wachtwoorden rechtstreeks zonder eerst enige voorbewerking uit te voeren. De onderliggende gegevens bevatten gewoon niet genoeg entropie en zullen daarom een ​​gemakkelijk doelwit zijn voor zoekopdrachten in een vooraf berekende tabel.

Op het moment dat uw SSN's privé en vertrouwelijk worden (ze zijn niet in elk land, dus vergeef me mijn domme vraag in de opmerkingen :)), zouden dezelfde best practices die ook worden gebruikt voor wachtwoordopslag ook van toepassing moeten zijn op uw specifieke geval, d.w.z. een langzame adaptief hash-algoritme dat het gebrek aan initiële entropie compenseert, zoals bcrypt, scrypt en PBKDF2 (die al werd aanbevolen door Marcus Adams).



  1. MySql select binnen een andere select?

  2. SQL Natural Join

  3. Tijdstempel afronden in MySQL

  4. Een object (meer dan 10 eigenschappen) invoegen in mysql via mybatis op basis van annotatie zonder alle eigenschappen op te sommen