PHP මුරපද සඳහා ආරක්ෂිත හැෂ් සහ ලුණු


1180

MD5 අර්ධ වශයෙන් අනාරක්ෂිත බව දැනට කියනු ලැබේ. මෙය සැලකිල්ලට ගනිමින්, මුරපද ආරක්ෂාව සඳහා කුමන යාන්ත්‍රණය භාවිතා කළ යුතු දැයි දැන ගැනීමට මා කැමතිය.

මෙම ප්‍රශ්නය, “ද්විත්ව හැෂිං” මුරපදය එක් වරක් සේදීමට වඩා අඩු ආරක්ෂිතද? කිහිප වතාවක් හෑෂ් කිරීම හොඳ අදහසක් විය හැකි අතර තනි ගොනු සඳහා මුරපද ආරක්ෂාව ක්‍රියාත්මක කරන්නේ කෙසේද? ලුණු භාවිතා කිරීමට යෝජනා කරයි.

මම PHP භාවිතා කරමි. මට ආරක්ෂිත හා වේගවත් මුරපද සංකේතාංකන පද්ධතියක් අවශ්‍යයි. මුරපදයක් මිලියනය වාරයක් සේදීම ආරක්ෂිත විය හැකි අතර මන්දගාමී වේ. වේගය සහ ආරක්ෂාව අතර හොඳ සමබරතාවයක් ලබා ගන්නේ කෙසේද? එසේම, නියත අක්ෂර සංඛ්‍යාවක් තිබීමට මම ප්‍රති result ලයට කැමතියි.

  1. හැෂිං යාන්ත්‍රණය PHP හි තිබිය යුතුය
  2. එය ආරක්ෂිත විය යුතුය
  3. එයට ලුණු භාවිතා කළ හැකිය (මේ අවස්ථාවේ දී, සියලුම ලවණ සමානව හොඳද? හොඳ ලවණ උත්පාදනය කිරීමට ක්‍රමයක් තිබේද?)

එසේම, මම දත්ත සමුදායේ ක්ෂේත්‍ර දෙකක් ගබඩා කළ යුතුද (එකක් MD5 භාවිතා කරන අතර තවත් එකක් SHA භාවිතා කරයි). එය ආරක්ෂිත හෝ අනාරක්ෂිත වේද?

මා ප්‍රමාණවත් තරම් පැහැදිලි නැතිනම්, ආරක්ෂිත හා වේගවත් මුරපද ආරක්ෂණ යාන්ත්‍රණයක් ලබා ගැනීම සඳහා කුමන හැෂිං ශ්‍රිත (ය) භාවිතා කළ යුතුද සහ හොඳ ලුණු තෝරා ගන්නේ කෙසේද යන්න දැන ගැනීමට මට අවශ්‍යය.

මගේ ප්‍රශ්නය ආවරණය නොකරන අදාළ ප්‍රශ්න:

PHP
සරල මුරපද ගුප්තකේතනයේ SHA සහ MD5 අතර ඇති වෙනස කුමක්ද?
Asp.net සඳහා යතුරු, මුරපද ගබඩා කිරීමේ ආරක්ෂිත ක්‍රම. ටොම්කාට්
5.5 හි ලුණු දැමූ මුරපද ඔබ ක්‍රියාත්මක කරන්නේ කෙසේද?


13
openwall.com/phpass ද ඉතා හොඳ පුස්තකාලයකි
ඇල්ෆ්‍රඩ්

53
Md5 දැන් සම්පූර්ණයෙන්ම අනාරක්ෂිතයි
JqueryToAddNumbers

3
SNSAwesomeGuy එය ඔබ එය භාවිතා කරන්නේ කුමක් ද යන්න මත රඳා පවතී. දේදුන්න-ගැලපීම හෝ තිරිසන් බලය ලුණු රහිත එම්ඩී 5 මුරපද ඉතා සුළු කාරණයක් බව විශ්වාසයි, නමුත් හොඳ ලුණු දැමීමත් සමඟ මුරපද කට්ටල වේගයෙන් ඉරිතලා යාම සඳහා දේදුන්න මේසයක් තැනීම තවමත් ප්‍රායෝගික නැත.
ක්‍රේග් රින්ගර්

13
PHP 5.5+ හි ආරක්ෂිත මුරපද හැෂ් එකක් php.net/manual/en/function.password-hash.php
ටෙරන්ස් ජොන්සන්

Answers:


987

වියාචනය : මෙම පිළිතුර 2008 දී ලියා ඇත.

එතැන් සිට, PHP අපට දී ඇති password_hashහාpassword_verify හා, හඳුන්වා දුන් පසු, ඔවුන් නිර්දේශිත මුරපදය hashing සහ පරීක්ෂා කිරීම ක්රමය වේ.

පිළිතුර පිළිබඳ න්‍යාය තවමත් හොඳ කියවීමකි.

ටීඑල්; ඩී.ආර්

නොකළ යුතු දේ

  • මුරපද සඳහා පරිශීලකයින්ට ඇතුළත් කළ හැකි චරිත සීමා නොකරන්න. මෝඩයන් පමණක් මෙය කරයි.
  • මුරපදයක දිග සීමා නොකරන්න. ඔබේ පරිශීලකයින්ට එහි සුපිරි කැලිෆ්‍රැගිලිස්ටයික්ස්පියාලිඩියස් සහිත වාක්‍යයක් අවශ්‍ය නම්, ඔවුන් එය භාවිතා කිරීමෙන් වලක්වන්න එපා.
  • මුරපදයේ ඇති HTML සහ විශේෂ අක්ෂර ඉවත් නොකරන්න.
  • ඔබේ පරිශීලකයාගේ මුරපදය කිසි විටෙක සරල පෙළෙහි ගබඩා නොකරන්න.
  • ඔබගේ පරිශීලකයාගේ නැතිවූ අවස්ථා හැර ඔබ කිසි විටෙක මුරපදයක් විද්‍යුත් තැපෑලෙන් එවන්න එපා , ඔබ තාවකාලික එකක් යැව්වා.
  • කිසි විටෙකත් මුරපද කිසිදු ආකාරයකින් ලොග් නොකරන්න.
  • කිසි විටෙකත් SHA1 හෝ MD5 හෝ SHA256 සමඟ මුරපද හෑෂ් නොකරන්න ! නවීන රති ers ් ers ා පත් තත්පරයට පිළිවෙලින් හැෂ් බිලියන 60 සහ 180 ඉක්මවිය හැකිය (පිළිවෙලින්).
  • Bcrypt හා හැෂ් () හි අමු ප්‍රතිදානය සමඟ මිශ්‍ර නොකරන්න , එක්කෝ හෙක්ස් ප්‍රතිදානය භාවිතා කරන්න හෝ base64_encode කරන්න. (මෙය \0ආරක්‍ෂාව බරපතල ලෙස දුර්වල කළ හැකි ඕනෑම ආදානයකට අදාළ වේ .)

ඩොස්

  • ඔබට හැකි විට ස්ක්‍රිප්ට් භාවිතා කරන්න; ඔබට නොහැකි නම් bcrypt.
  • SHA2 හැෂ් සමඟ ඔබට bcrypt හෝ scrypt භාවිතා කළ නොහැකි නම් PBKDF2 භාවිතා කරන්න.
  • දත්ත සමුදාය අවුල් වූ විට සියලු දෙනාගේ මුරපද යළි පිහිටුවන්න.
  • අක්ෂර 8-10 ක අවම දිගක් ක්‍රියාත්මක කරන්න, ඊට අමතරව අවම වශයෙන් ලොකු අකුරු 1 ක්, කුඩා අකුරු 1 ක්, අංකයක් සහ සංකේතයක් අවශ්‍ය වේ. මෙය මුරපදයේ එන්ට්‍රොපිය වැඩි දියුණු කරන අතර එමඟින් ඉරිතැලීම් අපහසු වේ. (යම් විවාදයක් සඳහා "හොඳ මුරපදයක් කරන්නේ කුමක් ද?" කොටස බලන්න.)

කෙසේ වෙතත් හැෂ් මුරපද ඇයි?

මුරපද හෑෂ් කිරීමේ පරමාර්ථය සරල ය: දත්ත සමුදාය පාවාදීමෙන් පරිශීලක ගිණුම් වලට අනිෂ්ට ප්‍රවේශය වැළැක්වීම. මුරපද හෑෂ් කිරීමේ පරමාර්ථය වන්නේ සරල පෙළ මුරපද ගණනය කිරීම සඳහා හැකර් හෝ රති er ් er ා පත්තු කිරීමට වැඩි කාලයක් හෝ මුදල් වැය කිරීමෙන් ඔවුන්ව වළක්වා ගැනීමයි. කාලය / පිරිවැය ඔබේ අවි ගබඩාවේ හොඳම ප්‍රතිරෝධකයන් වේ.

ඔබට පරිශීලක ගිණුම්වල හොඳ ශක්තිමත් හැෂ් එකක් අවශ්‍ය වීමට තවත් හේතුවක් වන්නේ පද්ධතියේ ඇති සියලුම මුරපද වෙනස් කිරීමට ඔබට ප්‍රමාණවත් කාලයක් ලබා දීමයි. ඔබේ දත්ත සමුදාය අඩපණ වී ඇත්නම්, දත්ත සමුදායේ සෑම මුරපදයක්ම වෙනස් නොකරන්නේ නම් අවම වශයෙන් පද්ධතිය අගුළු දැමීමට ඔබට ප්‍රමාණවත් කාලයක් අවශ්‍ය වේ .

වයිට්හැට් සිකියුරිටි හි සීටීඕ ජෙරමියා ග්‍රොස්මන් වයිට් හැට් සිකියුරිටි බ්ලොග් අඩවියේ ප්‍රකාශ කළේ මෑතදී මුරපද ප්‍රතිසාධනය කිරීමෙන් පසුව ඔහුගේ මුරපද ආරක්ෂාව බිඳ දැමිය යුතු බවයි .

සිත්ගන්නා කරුණ නම්, මෙම බියකරු සිහිනය සැබෑ කර ගැනීමේදී, මුරපද බිඳ දැමීම, ගබඩා කිරීම සහ සංකීර්ණත්වය පිළිබඳව මා නොදැන සිටි බොහෝ දේ මම ඉගෙන ගතිමි. මුරපද සංකීර්ණතාවයට වඩා මුරපද ආචයනය මෙතරම් වැදගත් වන්නේ මන්දැයි මම අගය කරමි. ඔබගේ මුරපදය ගබඩා කරන්නේ කෙසේදැයි ඔබ නොදන්නේ නම්, ඔබට සැබවින්ම රඳා පැවතිය හැක්කේ සංකීර්ණත්වය පමණි. මෙය මුරපදය සහ ක්‍රිප්ටෝ වාසි පිළිබඳ පොදු දැනුමක් විය හැකි නමුත් සාමාන්‍ය ඉන්ෆොසෙක් හෝ වෙබ් ආරක්ෂක විශේෂ expert යෙකුට මම එය තදින්ම සැක කරමි.

(මගේ අවධාරණය අවධාරණය කරන්න.)

කෙසේ වෙතත් හොඳ මුරපදයක් සෑදීමට හේතුව කුමක්ද?

එන්ට්‍රොපි . (මම රැන්ඩල්ගේ දෘෂ්ටිකෝණයට සම්පූර්ණයෙන්ම දායක වන බව නොවේ.)

කෙටියෙන් කිවහොත්, එන්ට්‍රොපි යනු මුරපදය තුළ කොපමණ විචල්‍යතාවයක් තිබේද යන්නයි. මුරපදයක් කුඩා අකුරු රෝමානු අකුරු පමණක් වන විට, එය අක්ෂර 26 ක් පමණි. එය එතරම් වෙනස් නොවේ. අක්ෂර 36 කින් යුත් ඇල්ෆා සංඛ්‍යා මුරපද වඩා හොඳය. නමුත් ඉහළ සහ පහළ අකුරුවලට සංකේත සහිතව ඉඩ දීම දළ වශයෙන් අක්ෂර 96 කි. එය අකුරු වලට වඩා බොහෝ හොඳය. එක් ගැටළුවක් නම්, අපගේ මුරපද මතකයේ තබා ගැනීම සඳහා අපි රටා ඇතුළු කරමු - එය එන්ට්‍රොපිය අඩු කරයි. අපොයි!

මුරපද එන්ට්‍රොපිය ආසන්න වශයෙන් දැක්වේ පහසුවෙන් . සම්පූර්ණ පරාසයේ ascii අක්ෂර භාවිතා කිරීමෙන් (දළ වශයෙන් වර්ග කළ හැකි අක්ෂර 96) අක්ෂරයකට 6.6 ක එන්ට්‍රොපියක් ලබා දෙයි, මුරපදයක් සඳහා අක්ෂර 8 ක් තවමත් අනාගත ආරක්ෂාව සඳහා ඉතා අඩු (එන්ට්‍රොපි බිටු 52.679) අඩුය. නමුත් ශුභාරංචිය නම්: දිගු මුරපද, සහ යුනිකෝඩ් අක්ෂර සහිත මුරපද, සැබවින්ම මුරපදයක එන්ට්‍රොපිය වැඩි කරන අතර එය බිඳ දැමීම දුෂ්කර කරයි.

Crypto StackExchange අඩවියේ මුරපද එන්ට්‍රොපිය පිළිබඳ දීර් discussion සාකච්ඡාවක් ඇත. හොඳ ගූගල් සෙවුමක් මඟින් ප්‍රති .ල රාශියක් ලැබෙනු ඇත.

අදහස් මම වන බව කී @popnoodles, සමඟ කතා බලාත්මක X බොහෝ අකුරු, අංක, සංකේත, ආදිය සමග එක්ස් දිග මුරපද ප්රතිපත්තියකට, ඇත්ත වශයෙන්ම, මුරපදය යෝජනා ක්රමය වඩා අනාවැකි කරමින් එන්ට්රොපිය අඩු කර ගත හැකිය. මම එකඟයි. අහඹු ලෙස, හැකි තරම් අහඹු ලෙස, සෑම විටම ආරක්ෂිත නමුත් අවම මතක තබා ගත හැකි විසඳුමයි.

මට කියන්නට හැකි තාක් දුරට, ලෝකයේ හොඳම මුරපදය සෑදීම Catch-22 වේ. එක්කෝ එය මතකයේ රැඳෙන, අනාවැකි කිව නොහැකි, ඉතා කෙටි, ඕනෑවට වඩා යුනිකෝඩ් අක්ෂර (වින්ඩෝස් / ජංගම උපාංගයක ටයිප් කිරීමට අපහසු), දිගු වේ. යනාදිය කිසිදු මුරපදයක් අපගේ අරමුණු සඳහා ප්‍රමාණවත් නොවේ, එබැවින් අපි ඒවා ආරක්ෂා කළ යුතුය නොක්ස් කොටුවේ.

හොඳම පුරුදු

Bcrypt හා scrypt වත්මන් හොඳ පුරුදු වේ. කාලයාගේ ඇවෑමෙන් bcrypt වලට වඩා Scrypt වඩා හොඳ වනු ඇත, නමුත් එය සම්මතයක් ලෙස ලිනක්ස් / යුනික්ස් හෝ වෙබ් සේවාදායකයින් විසින් දැක නැති අතර එහි ඇල්ගොරිතම පිළිබඳ ගැඹුරු සමාලෝචන තවම පළ කර නොමැත. එහෙත් තවමත්, ඇල්ගොරිතමයේ අනාගතය යහපත් යැයි පෙනේ. ඔබ රූබි සමඟ වැඩ කරන්නේ නම් ඔබට උදව් වන ස්ක්‍රිප්ට් මැණික් වර්ගයක් ඇති අතර Node.js සතුව දැන් එහි ම ස්ක්‍රිප්ට් පැකේජයක් ඇත. ඔබ එක්කෝ හරහා PHP හි Scrypt භාවිතා කළ හැකිය Scrypt දීර්ඝ හෝ Libsodium දීර්ඝ (දෙකම PECL ලබා ගත හැක).

මා අතිශයින් සඳහා ලේඛගතකිරීම කියවීම යෝජනා ලෙන කාර්යය ඔබ bcrypt භාවිතා කරන ආකාරය තේරුම් ගැනීමට අවශ්ය නම්, හෝ ඔබ සොයා ගැනීමේ යහපත් දවටනය වගේ දෙයක් හෝ භාවිතා PHPASS වඩාත් උරුමය ක්රියාත්මක කිරීම සඳහා. 15 සිට 18 දක්වා නොව අවම වශයෙන් bcrypt වට 12 ක් නිර්දේශ කරමි.

විචල්‍ය පිරිවැය යාන්ත්‍රණයක් සමඟ bcrypt භාවිතා කරන්නේ බ්ලූෆිෂ්ගේ ප්‍රධාන කාලසටහන පමණක් බව දැනගත් විට මම bcrypt භාවිතා කිරීම පිළිබඳ මගේ අදහස වෙනස් කළෙමි. බ්ලූෆිෂ්ගේ දැනටමත් මිල අධික යතුරු කාලසටහන වැඩි කිරීමෙන් මුරපදයක් තිරිසන් ලෙස බල කිරීම සඳහා වන පිරිවැය වැඩි කිරීමට දෙවැන්න ඔබට ඉඩ දෙයි.

සාමාන්‍ය භාවිතයන්

මට තවදුරටත් මෙම තත්වය සිතාගත නොහැකිය. PHPASS PHP 3.0.18 සිට 5.3 දක්වා සහය දක්වයි, එබැවින් එය සිතාගත හැකි සෑම ස්ථාපනයක් සඳහාම භාවිතා කළ හැකිය - ඔබේ පරිසරය bcrypt සඳහා සහය දක්වන බව ඔබ නොදන්නේ නම් එය භාවිතා කළ යුතුය .

නමුත් ඔබට කිසිසේත් bcrypt හෝ PHPASS භාවිතා කළ නොහැකි යැයි සිතමු. එසේනම් කුමක් ද?

ඔබේ පරිසරය / යෙදුම / පරිශීලක-සංජානනය දරාගත හැකි උපරිම වට ගණන සමඟ PDKBF2 ක්‍රියාත්මක කිරීමට උත්සාහ කරන්න . මම නිර්දේශ කරන අඩුම අංකය වට 2500 කි. එසේම, ප්‍රතිනිෂ්පාදනය කිරීමට මෙහෙයුම දුෂ්කර කිරීමට hash_hmac () තිබේ නම් එය භාවිතා කිරීමට වග බලා ගන්න .

අනාගත පරිචයන්

PHP 5.5 හි පැමිණීම පූර්ණ මුරපද ආරක්ෂණ පුස්තකාලයක් වන අතර එය bcrypt සමඟ වැඩ කිරීමේ ඕනෑම වේදනාවක් වළක්වයි. අප බොහෝ දෙනා PHP 5.2 සහ 5.3 සමඟ බොහෝ පොදු පරිසරයන්හි, විශේෂයෙන් හවුල් සත්කාරක සමාගම්වල සිරවී සිටින අතර, @ircmaxell විසින් එළඹෙන API සඳහා අනුකූලතා ස්ථරයක් ගොඩනගා ඇති අතර එය PHP 5.3.7 ට පසුගාමී අනුකූල වේ.

ගුප්ත ලේඛන නැවත සකස් කිරීම සහ වියාචනය

හැෂ් මුරපදයක් බිඳ දැමීමට අවශ්‍ය පරිගණක බලය නොපවතී. පරිගණකයට මුරපදයක් "ඉරිතලා" ඇති එකම ක්‍රමය එය ප්‍රතිනිර්මාණය කිරීම සහ එය සුරක්ෂිත කිරීම සඳහා භාවිතා කරන හැෂිං ඇල්ගොරිතම අනුකරණය කිරීමයි. හැෂ්හි වේගය රේඛීයව සම්බන්ධ වන්නේ තිරිසන්-බල කිරීමේ හැකියාව සමඟ ය. ඊටත් වඩා භයානක දෙය නම්, බොහෝ හැෂ් ඇල්ගොරිතම වඩාත් වේගයෙන් ක්‍රියා කිරීම සඳහා පහසුවෙන් සමාන්තරගත කිරීමයි. Bcrypt සහ scrypt වැනි මිල අධික යෝජනා ක්‍රම එතරම් වැදගත් වන්නේ මේ නිසා ය.

ප්‍රහාරයේ සියලු තර්ජන හෝ මාර්ගයන් ඔබට පුරෝකථනය කළ නොහැක, එබැවින් ඔබේ පරිශීලකයින් ඉදිරියෙන් ආරක්ෂා කිරීමට ඔබ උපරිම උත්සාහයක් ගත යුතුය . ඔබ එසේ නොකළේ නම්, ප්‍රමාද වන තුරු ඔබට පහර දුන් බව ඔබට මග හැරෙනු ඇත ... තවද ඔබ වගකිව යුතුය . එම තත්වය වළක්වා ගැනීම සඳහා, ආරම්භ කිරීමට ව්‍යාකූල ලෙස ක්‍රියා කරන්න. ඔබේම මෘදුකාංගයකට (අභ්‍යන්තරව) පහර දී පරිශීලක අක්තපත්‍ර සොරකම් කිරීමට උත්සාහ කරන්න, නැතහොත් වෙනත් පරිශීලකයින්ගේ ගිණුම් වෙනස් කිරීමට හෝ ඔවුන්ගේ දත්ත වලට ප්‍රවේශ වන්න. ඔබ ඔබේ පද්ධතියේ ආරක්ෂාව පරීක්ෂා නොකරන්නේ නම්, ඔබට මිස වෙන කිසිවෙකුට දොස් පැවරිය නොහැක.

අවසාන වශයෙන්: මම ගුප්ත ලේඛන ශිල්පියෙක් නොවේ. මා පැවසූ ඕනෑම දෙයක් මගේ මතයයි, නමුත් මම සිතන්නේ එය හොඳ සාමාන්‍ය බුද්ධියක් මත පදනම් වූවක් බවයි. මතක තබා ගන්න, හැකිතාක් ව්‍යාකූල වන්න, හැකි තරම් ආක්‍රමණය කිරීමට අපහසු වන්න, ඉන්පසු ඔබ තවමත් කනස්සල්ලට පත්ව සිටී නම්, ඔබේ කේතය / පද්ධතිය ගැන ඔවුන් පවසන දේ බැලීමට සුදු තොප්පි හැකර් හෝ ගුප්ත ලේඛන ශිල්පියෙකු අමතන්න.


9
ඔබගේ මුරපදය ඩීබී කෙසේ හෝ රහසක් විය යුතු බැවින් රහසක් උපකාරී නොවේ - ඔවුන්ට එම ඩීබී අල්ලා ගත හැකි නම්, ඔබ භාවිතා කරන ඕනෑම රහසක් ඔවුන්ට සොයාගත හැකිය. කෙසේ වෙතත් ලුණු අහඹු ලෙස වැදගත් වේ.
frankodwyer

6
මැක්කන්, මම ඔබ සමඟ වාද නොකරමි. අපගේ කාර්යයේ මෙම ප්‍රදේශය කෙතරම් ව්‍යාකූල හා සංකීර්ණද යන්න පෙන්වා දීම පමණි. කුඩා වෙබ් අඩවියක අන්තර්ගත කළමනාකරණ පද්ධතියක් සැකසීම සඳහා සියල්ලන්ටම, අවසාන-සියල්ලටම වඩා දක්ෂ, හොඳම පුහුණුව ලබා ගැනීමට මම බලාපොරොත්තු වෙමි. මම තවමත් මෙහි ඉගෙන ගන්නවා. ... අර්ථවත් යමක් කියවන සෑම අවස්ථාවකම, ඊට පටහැනි තවත් ලිපි 5 ක් මම ඉක්මනින් දකිමි. වටය සහ වටය ඉක්මනින්
කරකැවිල්ල ඇති වේ

4
සිත්ගන්නා සුළු සංශෝධනය. පරිශීලක හැඳුනුම්පත (කියන්න, ස්වයංක්‍රීය වර්ධකයක් BIGINT) හොඳ නොවන දෙයක්ද? නැතහොත් එය අහඹු නොවන බැවින් එය හොඳ නොවේ ද? එසේම, එක් එක් පරිශීලකයා සඳහා නොන්ස් එක දත්ත ගබඩාවේ ගබඩා කිරීමට මට සිදුවේ ... අඩවි යතුර + නොන්ස් + එච්එම්ඒසී විසින් ලුණු දැමූ (පරිශීලක හැඳුනුම්පත සමඟ) හෑෂ් කිහිප වතාවක් පුනරාවර්තනය කිරීමෙන් සැලකිය යුතු ලෙස වැඩි ආරක්ෂාවක් ලබා දෙයිද? ඒ හා සමානව, HMAC නැවත නැවත කිරීම ආරක්ෂාවට හොඳද?
luiscubal

4
ඊ-තැපෑල හරහා තාවකාලික මුරපදයක් යැවීම, පරිශීලකයා එය භාවිතා කරන පළමු වරට එය වෙනස් කිරීම අවශ්‍ය වන අතර ඔවුන්ගේ මුරපදය සැකසීමට ඉඩ දෙන විද්‍යුත් තැපෑල හරහා “ආරක්ෂිත” සබැඳියක් යැවීමද ඒ හා සමානවම අවදානම් සහගතය. කෙසේ වෙතත්, අපේක්ෂිත ලබන්නාට පෙර සබැඳිය හෝ මුරපදය භාවිතා කරන තාක් කල් විද්‍යුත් තැපෑලට බාධා කරන ඕනෑම කෙනෙකුට ගිණුමට පිවිසිය හැකිය.
ටිම් ගෝටියර්

3
O රොබට්කේ අක්ෂර කට්ටලය පුළුල් කිරීමෙන් ඔව් එය වැඩි වේ, නමුත් සියලු මුරපද නීති රීති අනුගමනය කිරීමට බල කිරීමෙන් හැකි විකල්ප ප්‍රමාණය අඩු වේ. යමෙකු මුරණ්ඩු බලයෙන් මුරපදයක් ලබා ගත යුතු යැයි කියමු. පරිශීලකයාගේ මුරපදයේ ඉහළ අකුරු 1 ක්, කුඩා අකුරු 1 ක්, අංකයක් සහ සංකේතයක් ඇති බව ඔවුන්ට පැවසීමෙන් අදහස් වන්නේ ඔවුන්ට අවශ්‍ය උත්සාහයන් ගණන සැලකිය යුතු ලෙස අඩු බවයි. තමන්ට අවශ්‍ය දේ තීරණය කිරීමට පරිශීලකයාට ඉඩ දීමෙන්, හැකර්ට වඩා උත්සාහ කළ යුතුය.
පොප්නූඩ්ල්ස්

138

වඩා කෙටි හා ආරක්ෂිත පිළිතුරක් - ඔබේ මුරපද යාන්ත්‍රණය කිසිසේත් ලියන්න එපා , උත්සාහ කළ හා පරීක්ෂා කළ යාන්ත්‍රණයක් භාවිතා කරන්න.

  • PHP 5.5 හෝ ඊට වැඩි: මුරපදය_හෂ් () හොඳ තත්ත්වයේ වන අතර PHP හරයේ කොටසකි.
  • පැරණි PHP අනුවාද: OpenWall හි phpass පුස්තකාලය බොහෝ අභිරුචි කේත වලට වඩා හොඳය - වර්ඩ්ප්‍රෙස්, Drupal, ආදියෙහි භාවිතා වේ.

බොහෝ ක්‍රමලේඛකයන්ට අවදානම් හඳුන්වා නොදී ආරක්ෂිතව ක්‍රිප්ටෝ ආශ්‍රිත කේතය ලිවීමේ විශේෂ ise තාවයක් නොමැත.

ඉක්මන් ස්වයං පරීක්ෂාව: මුරපදය දිගු කිරීම යනු කුමක්ද සහ ඔබ කොපමණ වාර ගණනක් භාවිතා කළ යුතුද? ඔබ පිළිතුර නොදන්නේ නම්, ඔබ භාවිතා කළ යුත්තේ password_hash(), මුරපදය දිගු කිරීම දැන් වඩා වේගවත් CPU නිසා මුරපද යාන්ත්‍රණයේ තීරණාත්මක අංගයක් වන අතර තත්පරයට බිලියන ගණනක අනුමාන කිරීම් (GPU සමඟ) මුරපද බිඳ දැමීමට GPU සහ FPGAs භාවිතා කිරීමයි. ).

උදාහරණයක් ලෙස, ඩෙස්ක්ටොප් පරිගණක 5 ක ස්ථාපනය කර ඇති GPU 25 ක් භාවිතා කරමින් ඔබට පැය 8 කින් අක්ෂර 8 කින් යුත් වින්ඩෝස් මුරපද බිඳ දැමිය හැකිය . මෙය තිරිසන්-බල කිරීමකි, එනම් විශේෂ අක්ෂර ඇතුළුව සෑම අක්ෂර 8 කින් යුත් වින්ඩෝස් මුරපදයක් ගණනය කිරීම සහ පරීක්ෂා කිරීම ශබ්ද කෝෂ ප්‍රහාරයක් නොවේ. එය 2012 දී, 2018 වන විට ඔබට අඩු GPU භාවිතා කළ හැකිය, නැතහොත් GPU 25 ක් සමඟ වේගයෙන් ඉරිතලා යා හැකිය.

සාමාන්‍ය CPU මත ධාවනය වන සහ ඉතා වේගවත් වන වින්ඩෝස් මුරපද වලට දේදුන්න වගු ප්‍රහාර රාශියක් ඇත. මේ සියල්ල වන්නේ වින්ඩෝස් 10 හි පවා වින්ඩෝස් තවමත් එහි මුරපද ලුණු හෝ දිගු නොකිරීමයි - මයික්‍රොසොෆ්ට් කළ ආකාරයටම වැරැද්දක් නොකරන්න!

මෙයද බලන්න:

  • යා යුතු හොඳම ක්‍රමය ඇයි password_hash()හෝ කෙසේද යන්න පිළිබඳ වැඩි විස්තර සහිත විශිෂ්ට පිළිතුරphpass .
  • bcrypt, scrypt සහ PBKDF2 ඇතුළු ප්‍රධාන ඇල්ගොරිතම සඳහා නිර්දේශිත 'වැඩ සාධක' (පුනරාවර්තන ගණන) ලබා දෙන හොඳ බ්ලොග් ලිපිය .

1
නමුත් මෙම පද්ධති වඩා හොඳින් දන්නා අතර සමහර විට දැනටමත් සම්මුතියකට ලක්ව ඇත. නමුත් ඔබ කරන්නේ කුමක්දැයි ඔබ නොදන්නා විට එය ඔබේම දෑ බවට පත් කර ගනී.
JqueryToAddNumbers

14
නැවත "මෙම පද්ධති වඩා හොඳින් දන්නා අතර සමහර විට දැනටමත් සම්මුතියකට පැමිණ ඇත" - සත්‍යාපනය සඳහා හොඳින් සැලසුම් කරන ලද පද්ධතියක් වඩා හොඳින් දන්නා නිසා එය "දැනටමත් සම්මුතියකට" පත්වීමට හේතුවක් නැත. Phpass වැනි පුස්තකාල විශේෂ experts යන් විසින් ලියන ලද අතර බොහෝ අය විසින් විස්තරාත්මකව සමාලෝචනය කරනු ලැබේ - ඒවා හොඳින් දන්නා කාරණය විවිධ පුද්ගලයින්ගේ සවිස්තරාත්මක සමාලෝචන සමඟ යන අතර ඒවා ආරක්ෂිත යැයි අදහස් කිරීමට වැඩි ඉඩක් ඇත.
රිච්වෙල්

LinkedIn, Last.fm සහ වෙනත් අයගේ මෑත මුරපද හැෂ් ඩම්ප් සලකා බැලීමේදී මෙය බෙහෙවින් මාතෘකාවකි. ඔබේ මුරපද යාන්ත්‍රණය ලියන්නේ කෙසේදැයි නොදැන ඔබ හොඳ සමාගමක සිටී!
රිච්වෙල්

3
@PP - එන්එස්ඒ පසුබිමක් ඇති සම-සමාලෝචනය කරන ලද මුරපද හැෂිං ඇල්ගොරිතමයේ සම්භාවිතාව ඉතා අඩු ය, මගේ මතය අනුව. සැබෑ ගුප්තකේත විශේෂ expert යෙකු නොවන අයෙකු වෙනත් අනාරක්‍ෂිතතාවයකින් තොරව නව මුරපද හැෂිං යාන්ත්‍රණයක් ලිවීමේ සම්භාවිතාව බෙහෙවින් අඩු ය. සාමාන්‍ය වෙබ් ඇප් එක භාවිතා කරන්නේ MD5 හෝ SHA-1 හැෂිං ය, එය භයානක ය - ක්‍රිස් ෂිෆ්ලෙට්ගේ වෙනත් අත්‍යවශ්‍ය PHP ආරක්ෂක පොත පවා MD5 නිර්දේශ කරයි ...
රිච්වෙල්

1
Ich රිච්වෙල් - මුරපදය_හාෂ් () ශ්‍රිතය. කලින් සඳහන් කළ පරිදි, එය PHP හරයට (aka / ext / standard) සාදා ඇත.
කියුබික්සොෆ්ට්

43

මම මුරපදය හැෂ් ආකාර දෙකකින් ගබඩා නොකරමි, මන්ද එවිට පද්ධතිය අවම වශයෙන් භාවිතයේ ඇති හැෂ් ඇල්ගොරිතම තරම් දුර්වල ය.


මුරපද හැෂිං සඳහා නොවේ. මුරපදය ලබා ගැනීම සඳහා ප්‍රහාරකයාට අවශ්‍ය වන්නේ එක් හැෂ් එකක් පමණි. MD5 හෝ SHA1 යන දෙකටම මුරපදයේ ප්‍රායෝගික විවේකයක් නොමැති බැවින් කාරණය කෙසේ වෙතත් වැදගත් වේ.
frankodwyer

2
කණගාටුයි, හැෂ් දෙකක් භාවිතා කිරීම නිර්දේශ කිරීමක් ලෙස මම ඔබේ පිළිතුර වැරදියට කියවා ඇත්තෙමි ... ඔබ ඇත්ත වශයෙන්ම නිවැරදි ය. මුරපද නඩුවේදී හැෂ් දෙකක් භාවිතා කිරීම පද්ධතිය දුර්වල කරයි, මන්ද ඔවුන්ට අවශ්‍ය වන්නේ දුර්වල හැෂ් බිඳ දැමීම පමණි.
ෆ්‍රැන්කොඩ්වයර්

40

PHP 5.5 වන විට, මුරපද හෑරීම සහ සත්‍යාපනය කිරීම සඳහා සරල, ආරක්ෂිත කාර්යයන් PHP සතුව ඇත, මුරපදය_හෂ් () සහ මුරපදය_වෛරීකරණය ()

$password = 'anna';
$hash = password_hash($password, PASSWORD_DEFAULT);
$expensiveHash = password_hash($password, PASSWORD_DEFAULT, array('cost' => 20));

password_verify('anna', $hash); //Returns true
password_verify('anna', $expensiveHash); //Also returns true
password_verify('elsa', $hash); //Returns false

password_hash()භාවිතා කරන විට , එය අහඹු ලුණු ජනනය කරන අතර එය ප්‍රතිදානය කළ හැෂ් එකට ඇතුළත් කරයි (භාවිතා කරන පිරිවැය සහ ඇල්ගොරිතම සමඟ.)password_verify() ඉන්පසු එම හැෂ් කියවා කරන ලුණු සහ සංකේතාංකන ක්‍රමය තීරණය කරයි, සහ ලබා දී ඇති සාමාන්‍ය පෙළ මුරපදයට එරෙහිව එය සත්‍යාපනය කරයි.

PASSWORD_DEFAULTPHP හි ස්ථාපිත අනුවාදයේ පෙරනිමි හැෂිං ඇල්ගොරිතම භාවිතා කිරීමට PHP වෙත උපදෙස් ලබා දීම . හරියටම කුමන ඇල්ගොරිතම යන්නෙන් අදහස් කරන්නේ අනාගත අනුවාද වල කාලයත් සමඟ වෙනස් වීමට අදහස් කරන අතර එමඟින් එය සැමවිටම පවතින ශක්තිමත්ම ඇල්ගොරිතම වලින් එකක් වනු ඇත.

පිරිවැය වැඩි කිරීම (පෙරනිමිය 10 දක්වා) හෑෂ් තිරිසන් බලයට වඩා අමාරු කරයි, නමුත් එයින් අදහස් කරන්නේ හැෂ් උත්පාදනය කිරීම සහ ඒවාට එරෙහිව මුරපද සත්‍යාපනය කිරීම ඔබේ සේවාදායකයේ CPU සඳහා වැඩි වැඩක් වනු ඇති බවයි.

පෙරනිමි හැෂිං ඇල්ගොරිතම වෙනස් විය හැකි වුවද, භාවිතා කරන ඇල්ගොරිතම හැෂ් තුළ ගබඩා වී ඇති අතර පැරණි හෑෂ් දිගටම සත්‍යාපනය වන බව සලකන්න password_verify().


33

ප්‍රශ්නයට පිළිතුරු ලැබී ඇතත්, නැවත අවධාරණය කිරීමට අවශ්‍ය වන්නේ හැෂිං සඳහා භාවිතා කරන ලවණ අහඹු විය යුතු අතර පළමු පිළිතුරෙහි යෝජනා කර ඇති පරිදි ඊමේල් ලිපිනයට සමාන නොවිය යුතුය.

වැඩි විස්තර ලබා ගත හැකිය- http://www.pivotalsecurity.com/blog/password-hashing-salt-should-it-be-random/

අහඹු බිටු වලින් ලුණු දැමූ මුරපද හැෂ් අනුමාන කළ හැකි හෝ දන්නා ලවණවලට වඩා ලුණු දැමූ ඒවාට වඩා ආරක්ෂිත දැයි මෑතකදී මම සාකච්ඡාවක් පැවැත්වුවෙමි. අපි බලමු: මුරපදය ගබඩා කරන පද්ධතිය මෙන්ම අහඹු ලුණු ගබඩා කරන පද්ධතියද සම්මුතියකට ලක් වී ඇත්නම්, ප්‍රහාරකයාට හැෂ් මෙන්ම ලුණු ද ලබා ගත හැකිය, එබැවින් ලුණු අහඹුද නැද්ද යන්න ගැටළුවක් නොවේ. ප්‍රහාරකයාට හැෂ් කඩන්නට පෙර ගණනය කළ දේදුන්න වගු ජනනය කළ හැකිය. මෙන්න සිත්ගන්නා සුළු කොටස පැමිණේ- පෙර ගණනය කළ වගු ජනනය කිරීම එතරම් සුළු දෙයක් නොවේ. WPA ආරක්ෂක ආකෘතිය පිළිබඳ උදාහරණය බලමු. ඔබගේ WPA මුරපදය ඇත්ත වශයෙන්ම කිසි විටෙකත් රැහැන් රහිත ප්‍රවේශ ස්ථානයට යවනු නොලැබේ. ඒ වෙනුවට, එය ඔබගේ SSID සමඟ සම්බන්ධ කර ඇත (ජාල නාමය - Linksys, Dlink ආදිය). මෙය ක්‍රියාත්මක වන ආකාරය පිළිබඳ ඉතා හොඳ පැහැදිලි කිරීමක් මෙහි ඇත. මුරපදය හෑෂ් වෙතින් ලබා ගැනීම සඳහා, ඔබට මුරපදය මෙන්ම ලුණු (ජාල නාමය) දැන ගැනීමට අවශ්‍ය වනු ඇත. චර්ච් ඔෆ් වයිෆයි විසින් දැනටමත් ගණනය කරන ලද හැෂ් වගු වල ඉහළම SSID 1000 ක් සහ මුරපද මිලියනයක් පමණ ඇත. සියලුම වගු වල ප්‍රමාණය 40 GB පමණ වේ. ඔබට ඔවුන්ගේ වෙබ් අඩවියේ කියවිය හැකි පරිදි, යමෙකු මෙම වගු ජනනය කිරීම සඳහා දින 3 ක් සඳහා FGPA අරා 15 ක් භාවිතා කළේය. වින්දිතයා SSID “a387csf3 as සහ මුරපදය“ 123456 as ”ලෙස භාවිතා කරයි යැයි උපකල්පනය කළහොත්, එම වගු මගින් එය ඉරිතලා යනු ඇත්ද? නැත! .. එයට බැහැ. මුරපදය දුර්වල වුවද, වගු වල SSID a387csf3 සඳහා හැෂ් නොමැත. අහඹු ලුණු තිබීමේ සුන්දරත්වය මෙයයි. එය කලින් ගණනය කළ වගු මත වැඩෙන රති ers ් ers ා වලක්වනු ඇත. අධිෂ් hack ාන සහගත හැකර්වරයකු නැවැත්විය හැකිද? බොහෝ විට නැත. නමුත් අහඹු ලවණ භාවිතා කිරීමෙන් අමතර ආරක්ෂක තට්ටුවක් ලැබේ. අප මෙම මාතෘකාවෙහි සිටින අතරතුර, අහඹු ලවණ වෙනම පද්ධතියක ගබඩා කිරීමේ අමතර වාසිය ගැන අපි සාකච්ඡා කරමු. සිදුවීම # 1: මුරපද හැෂ් X පද්ධතියේ ගබඩා කර ඇති අතර, සේදීම සඳහා භාවිතා කරන ලුණු අගයන් පද්ධතිය Y හි ගබඩා කර ඇත. හැෂින් Y පද්ධතියේ ගබඩා කර ඇත. මෙම ලුණු අගයන් අහඹුයි. ඔබට අනුමාන කළ හැකි පරිදි, X පද්ධතිය සම්මුතියකට ලක්ව තිබේ නම්, වෙනම පද්ධතියක අහඹු ලුණු භාවිතා කිරීමේ විශාල වාසියක් ඇත (සිදුවීම # 2). හැෂ් බිඳ දැමීමට හැකි වන පරිදි ප්‍රහාරකයාට එකතු කිරීමේ අගයන් අනුමාන කළ යුතුය. බිට් 32 ලුණු භාවිතා කරන්නේ නම්, අනුමාන කරන සෑම මුරපදයක් සඳහාම 2 ^ 32 = 4,294,967,296 (බිලියන 4.2 ක් පමණ) පුනරාවර්තන අවශ්‍ය වේ. මුරපද හැෂ් පද්ධති X හි ගබඩා කර ඇති අතර, සේදීම සඳහා භාවිතා කරන ලුණු අගයන් පද්ධති Y හි ගබඩා කර ඇත. පද්ධතිය Y. මෙම ලුණු අගයන් අහඹුයි. ඔබට අනුමාන කළ හැකි පරිදි, X පද්ධතිය සම්මුතියකට ලක්ව තිබේ නම්, වෙනම පද්ධතියක අහඹු ලුණු භාවිතා කිරීමේ විශාල වාසියක් ඇත (සිදුවීම # 2). හැෂ් බිඳ දැමීමට හැකි වන පරිදි ප්‍රහාරකයාට එකතු කිරීමේ අගයන් අනුමාන කළ යුතුය. බිට් 32 ලුණු භාවිතා කරන්නේ නම්, අනුමාන කරන සෑම මුරපදයක් සඳහාම 2 ^ 32 = 4,294,967,296 (බිලියන 4.2 ක් පමණ) පුනරාවර්තන අවශ්‍ය වේ. මුරපද හැෂ් පද්ධති X හි ගබඩා කර ඇති අතර, සේදීම සඳහා භාවිතා කරන ලුණු අගයන් පද්ධති Y හි ගබඩා කර ඇත. පද්ධතිය Y. මෙම ලුණු අගයන් අහඹුයි. ඔබට අනුමාන කළ හැකි පරිදි, X පද්ධතිය සම්මුතියකට ලක්ව තිබේ නම්, වෙනම පද්ධතියක අහඹු ලුණු භාවිතා කිරීමේ විශාල වාසියක් ඇත (සිදුවීම # 2). හැෂ් බිඳ දැමීමට හැකි වන පරිදි ප්‍රහාරකයාට එකතු කිරීමේ අගයන් අනුමාන කළ යුතුය. බිට් 32 ලුණු භාවිතා කරන්නේ නම්, අනුමාන කරන සෑම මුරපදයක් සඳහාම 2 ^ 32 = 4,294,967,296 (බිලියන 4.2 ක් පමණ) පුනරාවර්තන අවශ්‍ය වේ. මෙම ලුණු අගයන් අහඹුයි. ඔබට අනුමාන කළ හැකි පරිදි, X පද්ධතිය සම්මුතියකට ලක්ව තිබේ නම්, වෙනම පද්ධතියක අහඹු ලුණු භාවිතා කිරීමේ විශාල වාසියක් ඇත (සිදුවීම # 2). හැෂ් බිඳ දැමීමට හැකි වන පරිදි ප්‍රහාරකයාට එකතු කිරීමේ අගයන් අනුමාන කළ යුතුය. බිට් 32 ලුණු භාවිතා කරන්නේ නම්, අනුමාන කරන සෑම මුරපදයක් සඳහාම 2 ^ 32 = 4,294,967,296 (බිලියන 4.2 ක් පමණ) පුනරාවර්තන අවශ්‍ය වේ. මෙම ලුණු අගයන් අහඹුයි. ඔබට අනුමාන කළ හැකි පරිදි, X පද්ධතිය සම්මුතියකට ලක්ව තිබේ නම්, වෙනම පද්ධතියක අහඹු ලුණු භාවිතා කිරීමේ විශාල වාසියක් ඇත (සිදුවීම # 2). හැෂ් බිඳ දැමීමට හැකි වන පරිදි ප්‍රහාරකයාට එකතු කිරීමේ අගයන් අනුමාන කළ යුතුය. බිට් 32 ලුණු භාවිතා කරන්නේ නම්, අනුමාන කරන සෑම මුරපදයක් සඳහාම 2 ^ 32 = 4,294,967,296 (බිලියන 4.2 ක් පමණ) පුනරාවර්තන අවශ්‍ය වේ.


7
ප්‍රහාරකයාට ලුණු ලැබුණත්, “අඩවිසෝල්ට්: පරිශීලක: මුරපදය” නූල පෙර සැකසූ වගු වලට තවමත් ප්‍රතිරෝධී වේ, මන්ද ප්‍රහාරකයාට සෑම පරිශීලකයෙකුටම වගු ජනනය කළ යුතු බැවිනි (එබැවින් ප්‍රහාරය මන්දගාමී වේ), ඇත්ත වශයෙන්ම නිශ්චිත පරිශීලකයෙකු හැර ඉලක්ක කර ඇත ...
luiscubal

"ප්‍රහාරකයාට ලුණු ලැබුණත්," අඩවිසෝල්ට්: පරිශීලක: මුරපදය "නූල පෙර සැකසූ වගු වලට තවමත් ප්‍රතිරෝධී වේ" සම්බන්ධයෙන්, සම්පුර්ණයෙන්ම එකඟ වේ. මගේ අදහස නම්, සයිට්සෝල්ට් අහඹු හා දිගු නම්, එය පද්ධතියට වඩා ආරක්ෂිත වනු ඇත (අඩවිසෝල්ට්) පුරෝකථනය කළ හැකි ය. සමහර අය ඊමේල් හැඳුනුම්පත් ලුණු ලෙස භාවිතා කිරීම නිර්දේශ කරන බව මම දැක ඇත්තෙමි.
ගෞරව් කුමාර්

මා මුලින් ලියා ඇති දේ ඔබට මග හැරුණි. අහඹු ලෙස භාවිතා කරන ලෙස මම කීවෙමි, වාර්තාව සමඟ ගබඩා කර ඇති ඊමේල් ලිපිනය ප්ලස් කරන්න. ඊමේල් ලිපිනය එකතු කිරීම හැකර්ට වැඩ කිරීමට අමතර එන්ට්‍රොපිය ලබා දෙයි. මම එතැන් සිට මගේ පිළිතුර bcrypt වෙනුවෙන් නැවත ලියා ඇත.
රොබට් කේ

28

මට පෙන්වා දීමට අවශ්‍ය වන්නේ PHP 5.5 හි මුරපද හැෂිං API ඇතුළත් වන අතර එය වටා එතීමක් සපයයි crypt(). මුරපද හැෂ් හැෂ් කිරීම, සත්‍යාපනය කිරීම සහ නැවත සකස් කිරීම මෙම API සැලකිය යුතු ලෙස සරල කරයි. කතුවරයා අනුකූලතා පැකේජයක් ද නිකුත් කර ඇත (ඔබ සරලවම තනි මුරපදයක් ලෙස. Php ගොනුවක ස්වරූපයෙන්requirePHP 5.3.7 සහ ඊට පසුව භාවිතා කරන සහ දැන්ම මෙය භාවිතා කිරීමට කැමති අය සඳහා භාවිතා කිරීමට භාවිතා .

එය දැනට BCRYPT සඳහා පමණක් සහය දක්වයි, නමුත් වෙනත් මුරපද හැෂිං ශිල්පීය ක්‍රම ඇතුළත් කිරීම සඳහා එය පහසුවෙන් ව්‍යාප්ත කිරීම අරමුණු කර ඇති අතර තාක්‍ෂණය සහ පිරිවැය හැෂ් හි කොටසක් ලෙස ගබඩා කර ඇති හෙයින්, ඔබ කැමති හැෂිං තාක්‍ෂණය / පිරිවැය වෙනස් කිරීම වත්මන් හැෂ් අවලංගු නොකරනු ඇත, රාමුව ස්වයංක්‍රීයව, වලංගු කිරීමේදී නිවැරදි තාක්‍ෂණය / පිරිවැය භාවිතා කරනු ඇත. ඔබ ඔබේම දෑ නිශ්චිතවම නිර්වචනය නොකරන්නේ නම් එය "ආරක්ෂිත" ලුණු උත්පාදනය ද හසුරුවයි.

API මඟින් කාර්යයන් හතරක් නිරාවරණය කරයි:

  • password_get_info() - දී ඇති හැෂ් පිළිබඳ තොරතුරු ලබා දෙයි
  • password_hash() - මුරපද හැෂ් එකක් සාදයි
  • password_needs_rehash()- දී ඇති හැෂ් දී ඇති විකල්පයන්ට ගැලපේදැයි පරීක්ෂා කරයි. ඔබගේ වර්තමාන තාක්‍ෂණය / පිරිවැය යෝජනා ක්‍රමයට හැෂ් අනුකූලද යන්න පරීක්ෂා කිරීම ප්‍රයෝජනවත් වේ
  • password_verify() - මුරපදයක් හැෂ් එකකට ගැලපෙන බව තහවුරු කරයි

මේ මොහොතේ මෙම කාර්යයන් PASSWORD_BCRYPT සහ PASSWORD_DEFAULT මුරපද නියතයන් පිළිගන්නා අතර ඒවා මේ මොහොතේ සමාන වේ, වෙනස වන්නේ PASSWORD_DEFAULT "නව, ශක්තිමත් හැෂිං ඇල්ගොරිතම සඳහා සහය දක්වන විට නව PHP නිකුතුවල වෙනස් විය හැකිය." පුරනය වීමේදී PASSWORD_DEFAULT සහ මුරපදය_නෙඩ්ස්_රෙහාෂ් () භාවිතා කිරීම (සහ අවශ්‍ය නම් නැවත වෙනස් කිරීම) ඔබේ හැෂ් ඔබ වෙනුවෙන් කිසිදු වැඩක් නොමැතිව තිරිසන් බලවේග ප්‍රහාරයන්ට සාධාරණ ලෙස ඔරොත්තු දෙන බව සහතික කළ යුතුය.

සංස්කරණය කරන්න: රොබට් කේගේ පිළිතුරෙහි මෙය කෙටියෙන් සඳහන් කර ඇති බව මට වැටහුණි. ආරක්ෂාව නොදන්නා අයට එය ක්‍රියාත්මක වන ආකාරය සහ එය භාවිතයේ පහසුව පිළිබඳ තව ටිකක් තොරතුරු සපයන බව සිතන බැවින් මම මෙම පිළිතුර මෙහි තබමි.


19

මම භාවිතා කරනවා Phpass PHP සෑම ආසන්න ව්යාපෘතිය ඉතා පහසුවෙන් ක්රියාත්මක කළ හැකි බව සරල එක්-ගොනුව PHP පන්ති වන. එච් ද බලන්න .

පෙරනිමියෙන් එය Phpass හි ක්‍රියාත්මක කර ඇති ශක්තිමත්ම ගුප්තකේතනය භාවිතා කළ අතර එය bcryptවර්ඩ්ප්‍රෙස් වැනි රාමු වලට පසුගාමී අනුකූලතාවයක් සැපයීම සඳහා MD5 දක්වා වෙනත් සංකේතාංකනයන්ට වැටේ.

ආපසු ලබා දුන් හැෂ් දත්ත ගබඩාවේ ගබඩා කර තැබිය හැකිය. හැෂ් උත්පාදනය සඳහා නියැදි භාවිතය:

$t_hasher = new PasswordHash(8, FALSE);
$hash = $t_hasher->HashPassword($password);

මුරපදය සත්‍යාපනය කිරීමට කෙනෙකුට භාවිතා කළ හැකිය:

$t_hasher = new PasswordHash(8, FALSE);
$check = $t_hasher->CheckPassword($password, $hash);

14

මතක තබා ගත යුතු දේවල්

PHP සඳහා මුරපද සංකේතනය පිළිබඳව බොහෝ දේ පවසා ඇති අතර, ඒවායින් බොහොමයක් ඉතා හොඳ උපදෙස් වේ, නමුත් මුරපද සංකේතනය සඳහා PHP භාවිතා කිරීමේ ක්‍රියාවලිය ආරම්භ කිරීමට පෙර ඔබ පහත සඳහන් ක්‍රියාවට නැංවීමට හෝ ක්‍රියාත්මක කිරීමට සූදානම් බවට වග බලා ගන්න.

සේවාදායකයා

වරාය

ඔබ PHP සහ DB ධාවනය කරන සේවාදායකය නිසි ලෙස සුරක්ෂිත නොකරන්නේ නම් ඔබේ ගුප්තකේතනය කොතරම් හොඳ වුවත් ඔබගේ සියලු උත්සාහයන් නිෂ් .ල ය. බොහෝ සේවාදායකයන් සාපේක්ෂව එකම ආකාරයකින් ක්‍රියා කරයි, ඒවා ඔබට දුරස්ථව ftp හෝ shell හරහා ප්‍රවේශ වීමට ඉඩ සලසන වරායන් පවරා ඇත. ඔබ සක්‍රියව ඇති දුරස්ථ සම්බන්ධතාවයේ පෙරනිමි වරාය වෙනස් කිරීමට වග බලා ගන්න. මෙය සිදු නොකිරීමෙන් ඔබ ඔබේ පද්ධතියට ප්‍රවේශවීමේ එක් පියවරක් ප්‍රහාරකයාට කර ඇත.

පරිශීලක නාමය

ලෝකයේ හොඳ සියල්ල සඳහා පරිපාලක, මූල හෝ ඒ හා සමාන දෙයක් භාවිතා නොකරන්න. එසේම ඔබ යුනික්ස් මත පදනම් වූ පද්ධතියක සිටී නම් මූල ගිණුමට ප්‍රවේශ වීම ප්‍රවේශ නොකරන්න, එය සැමවිටම සුඩෝ පමණක් විය යුතුය.

මුරපදය

අනවසරයෙන් ඇතුළුවීම වළක්වා ගැනීම සඳහා හොඳ මුරපද සාදන ලෙස ඔබ ඔබේ පරිශීලකයින්ට පවසන්න. ඔබ පසුපස දොර පුළුල් ලෙස විවෘත කර ඇති විට ඔබේ ඉදිරිපස දොර අගුළු දැමීමේ සියලු උත්සාහයන් දැරීමේ තේරුම කුමක්ද?

දත්ත සමුදාය

සේවාදායකයා

ඔබේ DB සහ APPLICATION වෙනම සේවාදායකයන් සඳහා අවශ්‍යය. පිරිවැය හේතුවෙන් මෙය සැමවිටම කළ නොහැකි නමුත් එය යම් ආරක්ෂාවක් සඳහා ඉඩ සලසයි, මන්ද ප්‍රහාරකයාට පද්ධතියට පූර්ණ ප්‍රවේශ වීම සඳහා පියවර දෙකක් හරහා යාමට සිදුවනු ඇත.

පරිශීලක

සෑම විටම ඔබගේ යෙදුමට ඩීබී වෙත ප්‍රවේශ වීම සඳහා තමන්ගේම ගිණුමක් ඇති අතර එයට අවශ්‍ය වරප්‍රසාද පමණක් ලබා දෙන්න.

එවිට ඔබ වෙනුවෙන් වෙනම පරිශීලක ගිණුමක් තබා ගන්න, එය සේවාදායකයේ කොතැනකවත් ගබඩා කර නොමැත, යෙදුමේ පවා නැත.

සෑම විටම මෙන් මෙම මූල හෝ ඒ හා සමාන දෙයක් නොකරන්න.

මුරපදය

සියලුම හොඳ මුරපද සමඟ ඇති මාර්ගෝපදේශ අනුගමනය කරන්න. එකම පද්ධතියේ ඇති ඕනෑම සර්වර් හෝ ඩීබී ගිණුම්වල එකම මුරපදය නැවත භාවිතා නොකරන්න.

PHP

මුරපදය

ඔබගේ ඩීබී හි මුරපදයක් කිසි විටෙකත් ගබඩා නොකරන්න, ඒ වෙනුවට හැෂ් සහ අද්විතීය ලුණු ගබඩා කරන්න, ඊට හේතුව මම පසුව පැහැදිලි කරමි.

හැෂිං

එක් මාර්ගයක් හැෂිං !!!!!!!, කිසි විටෙකත් මුරපදයක් ආපසු හැරවිය හැකි ආකාරයකින් හෑෂ් නොකරන්න, හැෂ් එක් ක්‍රමයක් විය යුතුය, එයින් අදහස් වන්නේ ඔබ ඒවා ආපසු හරවා මුරපදයට සංසන්දනය නොකරන්න, ඔබ ඒ වෙනුවට ඇතුළත් කළ මුරපදය හැෂ් කරන්න එකම ආකාරයකින් හා හැෂ් දෙක සංසන්දනය කරන්න. මෙයින් අදහස් කරන්නේ ප්‍රහාරකයාට ඩීබී වෙත ප්‍රවේශය ලැබුණද ඇත්ත වශයෙන්ම මුරපදය යනු කුමක්දැයි ඔහු නොදන්නා බවයි. එයින් අදහස් කරන්නේ ඔබගේ පරිශීලකයින්ට සිදුවිය හැකි නරකම අවස්ථාවකදී වැඩි ආරක්ෂාවක් ලබා දෙන බවයි.

හොඳ හැෂිං කාර්යයන් රාශියක් ඇත ( password_hash,, hashආදිය ...) නමුත් හැෂ් .ලදායී වීමට හොඳ ඇල්ගොරිතමයක් තෝරා ගත යුතුය. (bcrypt සහ ඊට සමාන ඒවා හොඳ ඇල්ගොරිතම වේ.)

හැෂිං වේගය යතුර වන විට, තිරිසන් බලවේග ප්‍රහාරයන්ට වඩා ප්‍රතිරෝධී වේ.

හැෂින් කිරීමේ වඩාත් පොදු වැරැද්දක් නම් හැෂ් පරිශීලකයින්ට අද්විතීය නොවන බවයි. මෙයට ප්‍රධානතම හේතුව වන්නේ ලවණ අද්විතීය ලෙස ජනනය නොකිරීමයි.

ලුණු දැමීම

මුරපද හැෂ් කිරීමට පෙර සෑම විටම ලුණු දැමිය යුතුය. ලුණු දැමීම මුරපදයට අහඹු නූලක් එක් කරන බැවින් සමාන මුරපද DB හි නොපෙන්වයි. කෙසේ වෙතත්, ලුණු සෑම පරිශීලකයෙකුටම අනන්‍ය නොවේ නම් (එනම්: ඔබ දැඩි කේත සහිත ලුණු භාවිතා කරයි) ඔබ ඔබේ ලුණු වැඩකට නැති බවට පත් කර ඇත. මක්නිසාද යත් ප්‍රහාරකයෙකු එක් මුරපදයක් ලුණු සොයාගත් විට ඔහු ඒ සියල්ලටම ලුණු ඇති බැවිනි.

ඔබ ලුණු සාදන විට එය ලුණු දැමීමේ මුරපදයට අනන්‍ය බව තහවුරු කරගන්න, ඉන්පසු සම්පූර්ණ කරන ලද හැෂ් සහ ලුණු දෙකම ඔබේ ඩීබී තුළ ගබඩා කරන්න. මෙය කරන්නේ කුමක් ද යන්න නිසා ප්‍රහාරකයාට ප්‍රවේශය ලබා ගැනීමට පෙර එක් එක් ලුණු හා හැෂ් තනි තනිව බිඳ දැමිය යුතුය. මෙයින් අදහස් කරන්නේ ප්‍රහාරකයාට තවත් බොහෝ වැඩ සහ කාලයයි.

මුරපද නිර්මාණය කරන පරිශීලකයින්

පරිශීලකයා ෆ්‍රොන්ටෙන්ඩ් හරහා මුරපදයක් නිර්මාණය කරන්නේ නම් එයින් අදහස් වන්නේ එය සේවාදායකයට යැවිය යුතු බවයි. මෙය ආරක්‍ෂිත ගැටළුවක් විවර කරයි, එයින් අදහස් කරන්නේ සංකේතාංකනය නොකළ මුරපදය සේවාදායකයට යවන බවත් ප්‍රහාරකයාට සවන් දීමට සහ ප්‍රවේශ වීමට හැකි නම් PHP හි ඔබගේ සියලු ආරක්ෂාව නිෂ් .ල බවයි. සෑම විටම දත්ත සම්ප්‍රේෂණය කරන්නේ සුරක්ෂිතව ය, මෙය සිදු කරනු ලබන්නේ එස්එස්එල් හරහා ය, නමුත් වෙහෙසට පත් වන්න එස්එස්එල් පවා දෝෂ රහිත නොවේ (ඕපන්එස්එස්එල් හි හෘදයාබාධිත දෝෂය මෙයට නිදසුනකි).

පරිශීලකයාට ආරක්ෂිත මුරපදයක් සෑදීමට සලස්වන්න, එය සරල වන අතර සෑම විටම එය කළ යුතුය, අවසානයේදී පරිශීලකයා ඒ සඳහා කෘත ful වනු ඇත.

අවසාන වශයෙන්, ඔබ කිසිවක් නොගන්නා ආරක්ෂක පියවරයන් 100% ආරක්ෂිත වුවත්, ආරක්ෂා කිරීමේ තාක්ෂණය වඩාත් දියුණු වන විට ප්‍රහාර වඩාත් දියුණු වේ. නමුත් මෙම පියවරයන් අනුගමනය කිරීමෙන් ඔබේ වෙබ් අඩවිය වඩාත් ආරක්‍ෂිත වන අතර ප්‍රහාරකයන්ට පසුපස යෑමට වඩා අඩු ප්‍රියතාවයක් දක්වයි.

මුරපදයක් සඳහා පහසුවෙන් හැෂ් සහ ලුණු සාදන PHP පන්තියක් මෙන්න

http://git.io/mSJqpw


1
ඔබේ යහපත් හැෂ් ඇල්ගොරිතම ලැයිස්තුවෙන් ඔබ SHA512 ට පහර දිය යුතුය, මන්ද එය ඉතා වේගවත්ය. PBKDF2 සමඟ ඒකාබද්ධව පමණක් එය භාවිතා කරන්න. BCrypt බ්ලෝෆිෂ් මත පදනම් වූවත්, බ්ලූෆිෂ් යනු ගුප්තකේතනය සඳහා ඇල්ගොරිතමයකි, හැෂිං සඳහා නොවේ.
martinstoeckli

1
අහඹු ලුණු ඩීබී තුළ ගබඩා කරන්නේ කෙසේද? මම හිතන්නේ ඔබ එය හෑෂ් නොකරන්න (සත්‍යාපනය සඳහා භාවිතා කළ නොහැක) හෝ පැහැදිලිව ගබඩා නොකරයි (ප්‍රහාරකයාට ඩීබී කියවිය හැකි නම් සැබෑ ප්‍රතිලාභ නොමැත). ඉතින්, ඔබ එය කරන්නේ කෙසේද?
ඉසෙල්

wmfrancia මෙසේ ලිවීය: "ලුණු දැමීම මුරපදයට අහඹු නූලක් එක් කරයි, එබැවින් සමාන මුරපද DB හි නොපෙන්වයි". මෙය මට තේරුමක් නැත. ඩීබී හි ඇති හැෂ් දැනටමත් අසමාන ලෙස පෙනෙනු ඇත, මන්ද එය හැෂ් ක්‍රියාකාරිත්වයේ ගුණාංගයකි.
H2ONaCl

නියත ලුණු සම්බන්ධයෙන් wmfancia මෙසේ ලිවීය: “ප්‍රහාරකයෙකු එක් මුරපදයක ලුණු සොයාගත් පසු ඔහු ඒ සියල්ලටම ලුණු ඇත”. හැකර් විසින් කුමන ඩීබී ක්ෂේත්‍රය ලුණු දැයි හදුනාගත හොත්, ඒ සියල්ලටම ඔහු ලවණ ඇති බව පැවසිය හැකිය. නියත ලුණු ඩීබී තුළ නොතිබිය හැකි බැවින් එය නියත ලුණු පිළිබඳ හොඳ දෙයකි.
H2ONaCl

ඇත්ත වශයෙන්ම, මෙම අදහස් දැක්වීම් එක් පරිශීලකයෙකුට අහඹු ලුණු යෙදුමක් සඳහා එක් ලුණු එකකට වඩා හොඳ නොවන බව යෝජනා කිරීම නොවේ. එක හොදය.
H2ONaCl

12

ගූගල් පවසන්නේ SHA256 PHP සඳහා ලබා ගත හැකි බවයි.

ඔබ අනිවාර්යයෙන්ම ලුණු භාවිතා කළ යුතුය. අහඹු බයිට් භාවිතා කිරීමට මම නිර්දේශ කරමි (සහ අක්ෂර සහ අංක වලට පමණක් සීමා නොවන්න). සාමාන්‍යයෙන්, ඔබ තෝරා ගන්නා තාක් කල්, ආරක්ෂිත, මන්දගාමී වේ. බයිට් 64 ක් හොඳ විය යුතුයි, මම හිතන්නේ.


13
බිටු 64 ඕනෑම කෙනෙකුට ප්‍රමාණවත් විය යුතුද?
Konerak

On කොනරැක්, අවුරුදු 20 කට පසු මම මේ වෙත නැවත පැමිණෙන්නෙමි. :) නමුත් ඔව් SHA256 සැබවින්ම ලබා ගත හැකිය. SHA256 කෙතරම් ආරක්‍ෂිතදැයි ඔබට දැන ගැනීමට අවශ්‍ය නම්, ඔබට මෙය පරීක්ෂා කර බැලීමට අවශ්‍ය වනු ඇත: security.stackexchange.com/questions/90064/…
වින්සන්ට් එඩ්වඩ් ගෙඩාරියා බිනුවා

8

අවසානයේදී, ද්විත්ව හැෂිං, ගණිතමය වශයෙන් කිසිදු ප්‍රතිලාභයක් ලබා නොදේ. කෙසේ වෙතත්, ප්රායෝගිකව, දේදුන්න මේස මත පදනම් වූ ප්රහාර වැළැක්වීම සඳහා එය ප්රයෝජනවත් වේ. වෙනත් වචන වලින් කිවහොත්, එය ලුණු සමඟ සේදීමට වඩා වැඩි ප්‍රයෝජනයක් නැත, එය ඔබගේ යෙදුමේ හෝ ඔබේ සේවාදායකයේ ප්‍රොසෙසර් කාලය අඩු වේ.


2
බහුවිධ හැෂිං ශබ්ද කෝෂ සහ තිරිසන් බලවේග ප්‍රහාර වලින් ආරක්ෂා කරයි - එනම් එය ගණනය කිරීමට වැඩි කාලයක් ගත කරයි.
frankodwyer

6
ද්විත්ව හැෂිං මඟින් ඔබට සැලකිය යුතු වාසියක් ලබා නොදෙන නමුත් බහු වටයේ හැෂිං පුනරාවර්තන තවමත් ශබ්ද කෝෂ සහ තැලීම් බල ප්‍රහාරයන්ට එරෙහිව කළ හැකි ආරක්‍ෂාවකි. කාර්මික ශක්තිය මුරපද හැෂ් 1000+ වට භාවිතා කරයි. PKCS # 5 හි PBKDF1 අවම වට 1000 ක් යෝජනා කරයි.
බර්ක් ඩී. ඩිමීර්

8

මට මේ කාරණය පිළිබඳ පරිපූර්ණ මාතෘකාවක් මෙහි හමු විය: https://crackstation.net/hashing-security.htm , මට අවශ්‍ය වූයේ ඔබ එයින් ප්‍රතිලාභ ලබා ගැනීමයි, මෙහි ප්‍රභව කේත ද වේ.

<?php
/*
 * Password hashing with PBKDF2.
 * Author: havoc AT defuse.ca
 * www: https://defuse.ca/php-pbkdf2.htm
 */

// These constants may be changed without breaking existing hashes.
define("PBKDF2_HASH_ALGORITHM", "sha256");
define("PBKDF2_ITERATIONS", 1000);
define("PBKDF2_SALT_BYTES", 24);
define("PBKDF2_HASH_BYTES", 24);

define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);

function create_hash($password)
{
    // format: algorithm:iterations:salt:hash
    $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM));
    return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" . 
        base64_encode(pbkdf2(
            PBKDF2_HASH_ALGORITHM,
            $password,
            $salt,
            PBKDF2_ITERATIONS,
            PBKDF2_HASH_BYTES,
            true
        ));
}

function validate_password($password, $good_hash)
{
    $params = explode(":", $good_hash);
    if(count($params) < HASH_SECTIONS)
       return false; 
    $pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
    return slow_equals(
        $pbkdf2,
        pbkdf2(
            $params[HASH_ALGORITHM_INDEX],
            $password,
            $params[HASH_SALT_INDEX],
            (int)$params[HASH_ITERATION_INDEX],
            strlen($pbkdf2),
            true
        )
    );
}

// Compares two strings $a and $b in length-constant time.
function slow_equals($a, $b)
{
    $diff = strlen($a) ^ strlen($b);
    for($i = 0; $i < strlen($a) && $i < strlen($b); $i++)
    {
        $diff |= ord($a[$i]) ^ ord($b[$i]);
    }
    return $diff === 0; 
}

/*
 * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
 * $algorithm - The hash algorithm to use. Recommended: SHA256
 * $password - The password.
 * $salt - A salt that is unique to the password.
 * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
 * $key_length - The length of the derived key in bytes.
 * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
 * Returns: A $key_length-byte key derived from the password and salt.
 *
 * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
 *
 * This implementation of PBKDF2 was originally created by https://defuse.ca
 * With improvements by http://www.variations-of-shadow.com
 */
function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false)
{
    $algorithm = strtolower($algorithm);
    if(!in_array($algorithm, hash_algos(), true))
        die('PBKDF2 ERROR: Invalid hash algorithm.');
    if($count <= 0 || $key_length <= 0)
        die('PBKDF2 ERROR: Invalid parameters.');

    $hash_length = strlen(hash($algorithm, "", true));
    $block_count = ceil($key_length / $hash_length);

    $output = "";
    for($i = 1; $i <= $block_count; $i++) {
        // $i encoded as 4 bytes, big endian.
        $last = $salt . pack("N", $i);
        // first iteration
        $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
        // perform the other $count - 1 iterations
        for ($j = 1; $j < $count; $j++) {
            $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
        }
        $output .= $xorsum;
    }

    if($raw_output)
        return substr($output, 0, $key_length);
    else
        return bin2hex(substr($output, 0, $key_length));
}
?>

භාවිතයෙන් තොරව ඔබ අපට විසඳුමක් ලබා දෙයි
මයිකල්

6

මම සාමාන්‍යයෙන් SHA1 සහ ලුණු භාවිතා කරන්නේ පරිශීලක හැඳුනුම්පත සමඟය (හෝ වෙනත් පරිශීලක විශේෂිත තොරතුරු කෑල්ලක්), සමහර විට මම නියත ලුණු භාවිතා කරමි (එබැවින් මට ලුණු කොටස් 2 ක් ඇත).

SHA1 දැන් තරමක් සම්මුතියක් ලෙස සලකනු ලැබේ, නමුත් MD5 ට වඩා බෙහෙවින් අඩු මට්ටමක පවතී. ලුණු (ඕනෑම ලුණු) භාවිතා කිරීමෙන්, ඔබේ හැෂ් වලට පහර දීම සඳහා සාමාන්‍ය දේදුන්න මේසයක් භාවිතා කිරීම ඔබ වළක්වයි (සමහර අය ගූගල් භාවිතා කරමින් දේදුන්න මේසයක් ලෙස හැෂ් සෙවීමෙන් සාර්ථක වී ඇත). ඔබේ ලුණු භාවිතයෙන් ප්‍රහාරකයකුට දේදුන්න මේසයක් සිතිය හැකි පරිදි ජනනය කළ හැකිය, එබැවින් ඔබ පරිශීලක විශේෂිත ලුණු ඇතුළත් කළ යුතුය. එමඟින්, ඔබේ පද්ධතියේ සෑම වාර්තාවක් සඳහාම දේදුන්න වගුවක් ජනනය කිරීමට ඔවුන්ට සිදුවනු ඇත, ඔබේ මුළු පද්ධතියටම එකක් පමණක් නොවේ! එම වර්ගයේ ලුණු දැමීමත් සමඟ MD5 පවා විනීතව ආරක්ෂිත වේ.


2
නිරන්තර ලුණු යනු හොඳ අදහසක් නොවේ ... බොහෝ විට මාරාන්තික දෝෂයක් නොවිය හැකි නමුත් එය අනවශ්‍ය ලෙස යෝජනා ක්‍රමය දුර්වල කරයි.
frankodwyer

MD5 සහ SHA1 වේගවත් බැවින් මෙය නරක ඩයියා වේ.
CodesInChaos

4

SHA1 සහ ලුණු ප්‍රමාණවත් විය යුතුය (ස්වාභාවිකවම, ඔබ ෆෝර්ට් නොක්ස් සඳහා යමක් කේත කරනවාද යන්න හෝ ඔබේ සාප්පු ලැයිස්තුව සඳහා පිවිසුම් පද්ධතියක් තිබේද යන්න මත පදනම්ව ) අපේක්ෂිත අනාගතය සඳහා. SHA1 ඔබට ප්‍රමාණවත් නොවේ නම්, SHA256 භාවිතා කරන්න .

ලුණු පිළිබඳ අදහස නම්, හැෂිං ප්‍රති results ල සමබරතාවයෙන් ඉවතට විසි කිරීමයි. නිදසුනක් ලෙස, හිස් නූලක MD5-hash බව දන්නා කරුණකි d41d8cd98f00b204e9800998ecf8427e. ඉතින්, හොඳ මතකයක් ඇති අයෙකුට එම හැෂ් දැක එය හිස් නූලක හැෂ් බව දැන ගත හැකිය. නමුත් නූලට ලුණු දැමුවහොත් (කියන්න, " MY_PERSONAL_SALT" නූලෙන්), 'හිස් නූල' (එනම් " MY_PERSONAL_SALT") සඳහා වන හැෂ් බවට පත්වේ aeac2612626724592271634fb14d3ea6, එබැවින් පසුපසට නොපෙනේ. මම කියන්නට උත්සාහ කරන දෙය, නොකිරීමට වඩා ඕනෑම ලුණු භාවිතා කිරීම වඩා හොඳ බව. ඒ නිසා, එය දැන ගැනීමට වැදගත් ද එතරම් දෙයක් වන ලුණු භාවිතා .

ඇත්ත වශයෙන්ම මෙය කරන වෙබ් අඩවි ඇත - ඔබට එය (md5) හැෂ් එකක් පෝෂණය කළ හැකි අතර, එමඟින් එම විශේෂිත හැෂ් ජනනය කරන දන්නා සරල පා text යක් විහිදුවයි. සරල md5-hashes ගබඩා කරන දත්ත සමුදායකට ඔබට ප්‍රවේශය ලැබෙන්නේ නම්, එවැනි සේවාවක් සඳහා පරිපාලක සඳහා හැෂ් ඇතුළු කර ප්‍රවේශ වීම සුළුපටු නොවේ. එහෙත්, මුරපද ලුණු දැමුවහොත් එවැනි සේවාවක් බවට පත්වේ. අකාර්යක්ෂමයි.

එසේම, ද්විත්ව හැෂිං සාමාන්‍යයෙන් නරක ක්‍රමයක් ලෙස සලකනු ලැබේ, මන්ද එය ප්‍රති result ල අවකාශය අඩු කරයි. සියලුම ජනප්‍රිය හැෂ් ස්ථාවර දිගකින් යුක්ත වේ. මේ අනුව, ඔබට මෙම ස්ථාවර දිගෙහි සීමිත අගයන් පමණක් තිබිය හැකි අතර ප්‍රති results ල අඩු වෙනස් වේ. මෙය ලුණු දැමීමේ තවත් ආකාරයක් ලෙස සැලකිය හැකි නමුත් මම එය නිර්දේශ නොකරමි.


ඉලක්කගත අඩවියේ ඕනෑවට වඩා සංවේදී කිසිවක් අඩංගු නොවිය යුතුය (එය බැංකුවක් නොවේ), නමුත් තවමත් මම එය සුරක්ෂිතව තබා ගැනීමට කැමතියි.
luiscubal

1
ද්විත්ව හැෂිං මඟින් ප්‍රති result ල අවකාශය අඩු නොවේ. iterative hashing යනු ශබ්ද කෝෂය සහ තිරිසන් බලවේග ප්‍රහාරයන්ට එරෙහි පොදු පාලනයකි (එය ඔබගේ මුරපදය පිරික්සීමට වඩා එය මන්දගාමී කරයි).
frankodwyer

2
ranfrankodwyer: ඔව්, එය නරකයි. sha1(sha1($foo))ප්‍රතිදාන අවකාශය effectively ලදායී ලෙස අඩු කරයි, මන්ද අභ්‍යන්තර ශ්‍රිතයේ ඕනෑම ision ට්ටනයක් ස්වයංක්‍රීයව පිටත එකක ision ට්ටනයක් බවට පත්වේ. පරිහානිය රේඛීය වේ, නමුත් එය තවමත් සැලකිලිමත් වේ. පුනරාවර්තන හැෂිං ක්‍රම මඟින් සෑම වටයකම දත්ත නැවත පෝෂණය කරයි $hash = sha1(sha1($salt . $password) . $salt). නමුත් එය තවමත් හොඳ නැත ... PBKDF2 හෝ Bcrypt සමඟ රැඳී සිටින්න ...
ircmaxell

-7

හරි, අපට අවශ්‍ය ලුණු ලුණු අද්විතීය විය යුතුයි, එබැවින් එය ජනනය කිරීමට ඉඩ දෙන්න

   /**
     * Generating string
     * @param $size
     * @return string
     */
    function Uniwur_string($size){
        $text = md5(uniqid(rand(), TRUE));
        RETURN substr($text, 0, $size);
    }

මට sha512 භාවිතා කරන හැෂ් ද අවශ්‍ය වේ. එය හොඳම වන අතර එය php වලින් වේ

   /**
     * Hashing string
     * @param $string
     * @return string
     */
    function hash($string){
        return hash('sha512', $string);
    }

එබැවින් දැන් අපට මෙම කාර්යයන් ආරක්ෂිත මුරපදයක් ජනනය කිරීමට භාවිතා කළ හැකිය

// generating unique password
$password = Uniwur_string(20); // or you can add manual password
// generating 32 character salt
$salt = Uniwur_string(32);
// now we can manipulate this informations

// hashin salt for safe
$hash_salt = hash($salt);
// hashing password
$hash_psw = hash($password.$hash_salt);

දැන් අපගේ $ hash_psw විචල්‍ය අගය සහ $ ලුණු විචල්‍යය දත්ත ගබඩාවේ සුරැකිය යුතුය

අවසර දීම සඳහා අපි එකම පියවර භාවිතා කරමු ...

අපගේ සේවාදායකයින්ගේ මුරපද ආරක්ෂා කර ගැනීමට හොඳම ක්‍රමය එයයි ...

අවසාන පියවර 2 සඳහා ඔබට ඔබේම ඇල්ගොරිතම භාවිතා කළ හැකිය ... නමුත් අනාගතයේදී ඔබට පරිශීලකයාට බලය පැවරීමට අවශ්‍ය වූ විට මෙම හැෂ් මුරපදය ජනනය කළ හැකි බවට වග බලා ගන්න ...


4
මෙම ප්‍රශ්නය මුරපද සඳහා හැෂ් ගැන විය. sha512මුරපද ආරක්ෂණය සඳහා ප්‍රමාණවත් නොවන බව (ලුණු දැමූවත්) 1 ක්‍රියාත්මක කිරීම පුළුල් ලෙස සැලකේ. (RNG ගුප්ත විද්‍යාත්මකව ආරක්ෂිත නොවන බැවින් මුරපද උත්පාදනය සඳහා එය භාවිතා කිරීම අවදානම් සහිත වේ).
luiscubal

2
ඔබ කරන්නේ කුමක්දැයි ඔබට අදහසක් නැත. මෙම ලිපියේ ඉහළම පිළිතුරු කියවා බලන්න, ඔබේ කේතය අනාරක්ෂිත නොවන්නේ මන්දැයි ඔබට වැටහෙනු ඇත.
ගුප්ත ツ

හරි. මගේ කේතය ආරක්ෂිත නැත. ඉතින් මට කියන්න ඔබ ඔබේ ඇල්ගොරිතම ඔනි sha256 භාවිතා කරන්නේ ඇයි ??? මම දන්නවා sha512 හොඳම දේ ඇයි එය භාවිතා නොකරන්නේ ???
shalvasoft

1
alshalvasoft sha512 සාමාන්‍ය අරමුණු සඳහා හැෂිං සඳහා ඉතා හොඳයි, නමුත් මුරපද ආරක්ෂාවට විශේෂිත ගුණාංග සහිත හෑෂ් අවශ්‍ය වේ (“මන්දගාමී වීම” පුදුම සහගත ලෙස හොඳ දෙයකි , උදාහරණයක් ලෙස sha512 ඉතා වේගවත් වේ). සමහර අය මුරපද හෑෂ් කිරීමේ කාර්යයන් නිර්මාණය කිරීම සඳහා ගොඩනැඟිලි කොටසක් ලෙස sha512 භාවිතා කර ඇත, නමුත් වර්තමානයේ නිර්දේශිත ප්‍රවේශය වන්නේ "bcrypt භාවිතා කර ස්ක්‍රිප්ට් ගැන විමසිල්ලෙන් සිටින්න" යන්නයි.
luiscubal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.