වියාචනය : මෙම පිළිතුර 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 වැනි මිල අධික යෝජනා ක්රම එතරම් වැදගත් වන්නේ මේ නිසා ය.
ප්රහාරයේ සියලු තර්ජන හෝ මාර්ගයන් ඔබට පුරෝකථනය කළ නොහැක, එබැවින් ඔබේ පරිශීලකයින් ඉදිරියෙන් ආරක්ෂා කිරීමට ඔබ උපරිම උත්සාහයක් ගත යුතුය . ඔබ එසේ නොකළේ නම්, ප්රමාද වන තුරු ඔබට පහර දුන් බව ඔබට මග හැරෙනු ඇත ... තවද ඔබ වගකිව යුතුය . එම තත්වය වළක්වා ගැනීම සඳහා, ආරම්භ කිරීමට ව්යාකූල ලෙස ක්රියා කරන්න. ඔබේම මෘදුකාංගයකට (අභ්යන්තරව) පහර දී පරිශීලක අක්තපත්ර සොරකම් කිරීමට උත්සාහ කරන්න, නැතහොත් වෙනත් පරිශීලකයින්ගේ ගිණුම් වෙනස් කිරීමට හෝ ඔවුන්ගේ දත්ත වලට ප්රවේශ වන්න. ඔබ ඔබේ පද්ධතියේ ආරක්ෂාව පරීක්ෂා නොකරන්නේ නම්, ඔබට මිස වෙන කිසිවෙකුට දොස් පැවරිය නොහැක.
අවසාන වශයෙන්: මම ගුප්ත ලේඛන ශිල්පියෙක් නොවේ. මා පැවසූ ඕනෑම දෙයක් මගේ මතයයි, නමුත් මම සිතන්නේ එය හොඳ සාමාන්ය බුද්ධියක් මත පදනම් වූවක් බවයි. මතක තබා ගන්න, හැකිතාක් ව්යාකූල වන්න, හැකි තරම් ආක්රමණය කිරීමට අපහසු වන්න, ඉන්පසු ඔබ තවමත් කනස්සල්ලට පත්ව සිටී නම්, ඔබේ කේතය / පද්ධතිය ගැන ඔවුන් පවසන දේ බැලීමට සුදු තොප්පි හැකර් හෝ ගුප්ත ලේඛන ශිල්පියෙකු අමතන්න.