Hoi Tweakers,
Ik ben een projectje voor een website begonnen die extreem privacy gevoelige data op moet gaan slaan, dit gaat om plain-text data. Om er voor te zorgen dat dit zeer veilig wordt opgeslagen heb ik een manier bedacht. Ik wil bij jullie graag peilen of dit veilig genoeg is en of er nog dingen beter kunnen!
Het hele encryptie model bestaat uit 3-factor-authentication.
1. Een user specifieke hash, gegenereerd tijdens registratie, 20 tekens lang, random
2. De SHA256 hash van het user-wachtwoord (wordt gehashed tijdens het inloggen, wachtwoord is dus nergens plain-text te vinden, logisch)
3. Laravel's App-Key (20 tekens random)
Vervolgens maken we een MD5 hash van bovenstaande factors op de volgende manier :
Bovenstaande MD5 hash is vervolgens de ecnryptie key die we Mcrypt voeren. De IV voor Mcrypt wordt ook per user tijdens registratie random gegenereerd met de functie :
Alles wordt vervolgens encrypted met de key (MD5 hash) en de IV sleutel, de encrypted sleutel gaat de database in en kan pas weer encrypted worden met exact de zelfde MD5 hash.
Mijn denkwijze is als volgt : Als iemand de gehele website zou hacken en de code + database zou dumpen, dan NOG is het onmogelijk de data te decrypten omdat de hacker niet beschikt over het plain-text wachtwoord van de user.
Is deze denkwijze een beetje accuraat en wat kan er volgens jullie beter/anders?
Ik ben een projectje voor een website begonnen die extreem privacy gevoelige data op moet gaan slaan, dit gaat om plain-text data. Om er voor te zorgen dat dit zeer veilig wordt opgeslagen heb ik een manier bedacht. Ik wil bij jullie graag peilen of dit veilig genoeg is en of er nog dingen beter kunnen!
Het hele encryptie model bestaat uit 3-factor-authentication.
1. Een user specifieke hash, gegenereerd tijdens registratie, 20 tekens lang, random
2. De SHA256 hash van het user-wachtwoord (wordt gehashed tijdens het inloggen, wachtwoord is dus nergens plain-text te vinden, logisch)
3. Laravel's App-Key (20 tekens random)
Vervolgens maken we een MD5 hash van bovenstaande factors op de volgende manier :
code:
1
| $userwachtwoord.$usersalt.$appkey |
Bovenstaande MD5 hash is vervolgens de ecnryptie key die we Mcrypt voeren. De IV voor Mcrypt wordt ook per user tijdens registratie random gegenereerd met de functie :
code:
1
| mcrypt_create_iv($iv_size, MCRYPT_RAND); |
Alles wordt vervolgens encrypted met de key (MD5 hash) en de IV sleutel, de encrypted sleutel gaat de database in en kan pas weer encrypted worden met exact de zelfde MD5 hash.
Mijn denkwijze is als volgt : Als iemand de gehele website zou hacken en de code + database zou dumpen, dan NOG is het onmogelijk de data te decrypten omdat de hacker niet beschikt over het plain-text wachtwoord van de user.
Is deze denkwijze een beetje accuraat en wat kan er volgens jullie beter/anders?
Owner of DBIT Consultancy