Sunday, January 2, 2011

මොනවද මේ Password Salt කියන්නෙ???


අළුත් අවුරුද්දෙත් ඔන්න පොඩි දෙයක් ලියන්න හිතුව. අද Networking වලින් ටිකක් ඈත් වෙලා වෙනස් දෙයක් ලියන්න තමයි හිතුවෙ. මම ලියපු Networking ලිපි 3ට ගොඩක් අයගෙ හොද ප්‍රතිචාර ලැබුන. ඒ ලිපි 3 තාම කියවල නැත්නම් මෙන්න මෙතනින් ගිහින් කියවල බලන්නකො.
ඒක පොඩ්ඩකට නවත්තල අද ටිකක් වෙනස් ඒත් ගොඩක් අය ආසවෙයි කියල හිතෙන දෙයක් ගැන තමයි ලියන්න හදන්නෙ.
මොනවද මේ Password Salt. Password නම් හැමෝම දන්න දෙයක්නෙ. Salt, ඒකත් දන්නව නේ. හැබැයි Password Salt එකට ගත්තාම ටිකක් වෙනස් දෙයක්. හරි ඒක ගැන කියන්න කලින් වට පිටාවෙ දේවල් ටිකක් ගැන කියන්න තියනව. මුලින්ම ටිකක් හිතල බලන්න අපි පරිගණකය භාවිතා කරන කොට අවස්ථා කීයකදි Password භාවිතා කරනවද කියල. Operating System එකට Log වෙන්නෙම Password එකක් දීලනෙ. ඈයි එතකොට Gmail, Facebook, Yahoo ඔය වගේ Website(Web Applications) වලට Log වෙන්නත් Password එකක් අපි දෙනවනෙ. හරි දැන් මේ Password එක කොහෙද save වෙලා තියෙන්නෙ. අපි හිතමු මගේ Facebook account එකේ password එක 'keshan' කියල. ඒක මම මගේ Account එක හදනකොට දෙනවනෙ. දැන් ඒක කොහේ හරි Save වෙන්න ඕනෙනෙ. නැත්නම් මම ආපහු log වෙනකොට දෙන Password එක හරිද කියල එයාට හොයාගන්න විදියක් නෑනෙ. මොකද හිතෙන්නෙ... හරි හරි එහෙම තමයි. එයා ලග තියෙනව අපේ user name හා password තියන Database එකක්. ඒකෙන් තමයි හොයා ගන්නෙ මම type කරපු user name එකට password එක ගැලපෙනවද කියල. පොඩ්ඩක් හිතල බලන්න දැන් මේ Database එක වෙනකෙනෙක් හොයාගත්තොත්, ඒක open කරගත්තොත් මොකද වෙන්නෙ. ඔක්කොම user name වලට ගැලපෙන password එයාට හම්බවෙනවනේද? හපොයි ඉවරයි..... Windows/Linux වලත් මේ විදියට අමු අමුවෙ user name password save කරල තියෙනවනම්... හපොයි...

බයවෙන්න එපා එහෙම password save කරල තියාගන්නෙ නෑ. මොකද ඒක ගොඩක් භයානක වැඩක්. එතනදි පොඩ් උපක්‍රමයක් යොදාගන්නව. ඒකට කියන්නෙ Message Digest කියල. ඔය Computer Science ගැන ඉගන ගන්න අය Cryptographic Systems කියන විෂය කරනවනම් මේ ගැන හොදට දන්නව. මගේ මේ උත්සාහය ඒ ගැන දන්නෙ නැති අයට ඒ ගැන කියල දෙන්න. මොකක්ද මේ Message Digest(කෙටියෙන් MD කියමු නේද???) එකක් කියන්නෙ. MD is a one way hash function. ඔය තියෙන්නෙ. නියමයි මුකුත් තේරුනේ නෑ නේද?? මටත් මුලින්ම එහෙමයි. මේක සරල function එකක්. මේකට අපි Input එකක් විදියට String (ඒ කියන්නෙ අකුරු) එකක් දුන්නාම එයා ඒක යොදාගෙන නියමිත දිගක් සහිත තව අළුත් String එකක නිර්මානය කරනව. මෙතන තියන විශේෂම දෙය තමයි, අපි දෙන වචනෙ දිග මොකක් වුනත් එයා නිර්මානය කරන එකේ දිග නියතයක්. සරලව තේරුනා නේද??? ඇයි මේක One way කියන්නෙ. ඒකියන්නෙ අපි දෙන වචනෙන් MD එකක් හදාගත්තට, ඒ MD එකෙන් ආපහු අපි දීපු වචනෙ ගන්න බෑ. One way. තේරුනා නේද?? තවත් පොඩි දෙයක් තියනව, අපි හිතමු අපි දෙන වචනෙ එක එකුරක් අපි ​වෙනස් කරනව කියල. දැන් MD එක වෙනස් වෙන්නෙ එක අකුරකින් නෙමේ, සම්පුර්ණයෙන්ම වෙනස් වෙනව. මෙන්න මේක පොඩ්ඩක් බලන්නකො. එතකොට වැඩේ තේරේවි.

හරි දැන් ආපහු අපේ Password save කරන වැඩේට එමුකො. ඔයාල Account එකක් හදනකොට User name එකයි pass word එකයි දෙනවනෙ. ඒකෙන් user name එක ඒ විදියටම Database එකේ save කරනව. password එක MD Function එකකට දීල MD එකක් generate කරගෙන ඒ MD එක තමයි Database එකේ save කරගන්නෙ. තේරුනා නේද?? දැන් ඔයා ඒකට Log වෙන්න උත්සහ කරන කො​ට මොකද වෙන්නෙ??? ඔයා ඔයාගෙ User Name එකයි Pass word එකයි Type කරනව. ඒ user name එක යොදාගෙන System එක data base එකේ ඒ user name එකට අදාල MD එක Data Base එකෙන් කියවනව. දැන් ඒකෙන් ආපහු Pass word එක ගන්න පුළුවන්ද??? බෑ නේ. ඇයි මතක නැද්ද One Way..... එහෙනම් මොකද කරන්නෙ. මෙන්න මේකයි. ඔයා Enter කරන Password එක MD Function එක හරහ යවනව. දැන් ඒකටත් MD එකක් Generate වෙනවනෙ. අන්න ඒකයි Database එකේ තියන MD එකයි තමයි සමානද බලන්නෙ. තේරුනාද වැඩේ. පහල තියෙන පින්තූරෙ බලන්නකො. දැන් එතකොට කවුරුහරි Database එක Open කරගත්ත කියල වැඩක් නෑ. ඇයි ඒකෙ තියෙන්නෙ Password MD විතරයිනෙ. ඒකෙන් වැඩක් නෑනේ. හරි දැන් ඒක පැහැදිලි නේ. ඒත් මේකෙ පොඩි අවුලත් තියනව. මේ MD function හොයාගත්ත කාලෙ ඒව නිර්මාණය කරපු අය කිවුවෙ එකම MD එක ලැබෙන වෙනස් Input දෙකක් හොයා ගන්න කාටවත් බෑ කියල. එයාලගෙ වචනෙන්ම කියනවනම් 'Infeasible to find any x,y such that MD(x) = MD(y). උදාහරනයක් විදියට අපි හිතමු keshan කියන එකට ලැබෙන MD එකම ගන්න පුළුවන් තවත් වචනයක් හොයාගත්ත කියල.( උදා G#sz2Ts වගේ.) ඉතින් මොකද වෙන්නෙ. මොකද තමයි හිතල බලන්න. දැන් කවුරු හරි මගේ User name එකට අදාල MD එක Database එකෙන් හොරා අරන් ඒ MD එකට ගැලපෙන වෙනින් වචනයක් හොයාගත්තොත් එයාට Log වෙන්න පුළුවන්නෙ. Password එක වෙනස් වුනාට MD එක එකයිනෙ. තේරුනා නේද අවුල. හරි දැන් කොහොමද MD එකකට ගැලපෙන වචන හොයාගන්නෙ. හරි ලේසියි. ඒකට තියනව Rainbow table කියල දෙයක්. මේව යොදාගෙන පුළුවන් MD එකකට ගැලපෙන වචන හොයාගන්න. හෝව් හෝව් කොහෙද ඔය දුවන්න හදන්නෙ මේක කියවන එකත් නවත්තල. Rainbow Table එකක් හොයාගෙන වෙන කෙනෙක්ගෙ Account එකකට Log වෙන්න නේද? කියන්න කනගාටුයි ඒක හරියන්නෙ නෑ. ඈයි ඒ දැන් මෙච්චර වෙලා කිවුවෙ පුළුවන් කියල. ඔව් පුළුවන් තමයි මම කලින් කියපු විදියට MD Generate කරල Save කරල තියනවනම්. ඒත් දැන් ගොඩක් අය එහෙම කරන්නෙ නෑ. ඒකට අමතරව තව දේවල් ටිකක් කරනව. එයින් සරලම දෙයක් තමයි Password Salt කියන්නෙ.( හපෝ ඇති යන්තම් කියන්න ආපු දේ කියන්න හදන්නෙ)
මේක හරිම සරලයි. දැන් Password එකක් අපි Register වෙනකොට දුන්නාම System එක ඒකට තවත් මොකක් හරි Add කරනව. අපි හිතමු මගේ password එක 'keshan' කියල. System එක කරන්නෙ ඒකට මොකක් හරි අතින් එකතු කරනව. අපි හිතමු 'uwu' කියල. හැබැයි user දන්නෙ නෑ මොකක්ද එකතු කලේ තියල. දැන් මගේ password එක 'keshanuwu' ඔන්න ඕක තමයි MD Function එක හරහ යවල MD එකක් Generate කරල Database එකේ Store කරගන්නෙ. දැන් මම ආපහු Log වෙනකොට password එක (keshan )දුන්නාම එයා ඒකට අර වැඩිපුර කෑල්ල එකතු (keshanuwu)කරල MD එක Generate කරල Databese එකේ තියෙන එකත් එක්ක Compare කරල බලනව. ඔන්න ඔය වැඩිපුර දාන එකට තමයි Password Salt කියන්නෙ. නිකන් ලුණු දානව වගේම තමයි. මේ පින්තූරෙ බලන්නකො. එතකොට තේරේවි.
හරි දැන් මේකෙන් හොහොමද අර කලින් කිවුව හොර වැඩේ නවත්වන්නෙ. හරිම සරලයි. ටිකක් හිතන්න. ඔන්න මම මගේ password එක දෙනව (keshan). ඒකට මගදි System එක ලුණු දානව දැන් password එක 'keshanuwu'. ඒකට තමයි MD එක හදන්නෙ. දැන් අපි හිතමු කවුරු හරි Database එකෙන් මේ MD එක හොරාට අරගෙන ඒකට හරියන වෙන වචනයක් හොයාගන්නව. (ටිකකට කලින් ඔයත් කරන්න හැදුවනෙ...) අපි හිතමු 'Sdx@sd' කියල(උදාහරණයක් විදියට..). පොඩ්ඩක් බලන්න දැන් 'keshanuwu' කියන වචනෙටයි 'Sdx@sd' කියන එකටයි තියෙන්නෙ එක සමාන MD. ඔන්න දැන් කවුරු හරි 'Sdx@sd' කියන එක password එක විදියද දෙනව හොරාට log වෙන්න හිතාගෙන. System එක මේ හොරෙක් කියලවත් දන්නෙ නැතුව පුරුදු පරිදි ඒකටත් ලුණු දානව. දැන් password එක 'Sdx@sduwu' විදියට වෙනස් වෙනව. දැන් මේකට MD එකක් Generate කරනව. ඒක Database එකේ තියන එකට ගැලපෙන්නෙ නෑනෙ. (ඇයි ඒකට හරියන්නෙ 'Sdx@sd' කියන එකේ MD එක මිසක් 'Sdx@sduwu' කියන එකේ MD එකක් නෙමේනෙ.) හි හි.... දැක්කද ලුණු වැඩි වෙලා වැඩේ අවුල් වුණා... ටිකක් කල්පනා කරල බලන්න එතකොට ​හොදටම තේරේවි. මේක හරි ලස්සන දෙයක් කියල හිතුනු නිසා ලියන්න හිතුනෙ.

අපි යොදගෙන්න ගොඩක් Computer Languages වල මේ MD generate කරන්න පහසුකම් දීල තියනව. ඒ නිසා ඊලග වතාවෙ ඔයාලත් පොඩි පොඩි Program , web applications හදනකොට මේ විදිය යොදගෙන්න. අපි Group Project දෙකක (Chat System - JAVA , Online Library - PHP) මේක යොදාගත්ත. Java,PHP වලින් මේක කරන විදිය ගැන දැනගන්න ඕන නම් Comment එකක් දාන්නකො මම උදවු කරන්නම්.

එහෙනම් හැමෝටම බුදු සරණයි. සුභ නව වසරක්. ඒ වගේම ඔය පහලින් මොනව හරි ලියලම යන්නකො...


14 comments:

  1. අයියටත් පවුලේ සැමටත් සුභම සුභ නව වසරක්......!!!! (ඊයේ කමෙන්ට් එපා කියලා තිබුන නිසා ලීවේ නෑ..... )

    කතාව නම් බොහොම සිම්පල්..... ඒකනේ මට තේරුනේ..... බය වෙන්න එපා හැමෝටම තේරෙනවා ඕක......... :f :f

    අපි නොදන්න කොච්චර දේවල් තියද.......

    ReplyDelete
  2. නියම ලිපියක් නේ. අපිත් නියම ලිපියක් නේ. අපිත් තුන්වෙනි වසරේ ඉදිද්දි ඔය සබ්ජෙක්ට් එක කලා. ලුනු දානවා කියන්නේ යමක් කල් තියා ගන්න පුලුවන් කරනවා කියන එක නේ. පාස් වර්ඩ් එකට ලුනු දානවා කියන්නෙ පාස්වර්ඩ් එක කල් තියා ගන්න වා කියන එක වගේ එකක් . :-)

    Network attack අවම කරන්න අනුගමනය කරන තව ගොඩ ක්‍රම තියෙනවා. ඒ වගේම ඇටෑක් වෙන විදිත් ගොඩක් තියෙනවා. ඒවා ගැනත් ඉදිරියේ දී ලියන්න

    ReplyDelete
  3. නියමෙටම පැහැදිලි කරල තියනව මල්ලියො.දැන්නම් මේව ගැන තව ටිකක් දුරට study කරන්න ආස හිතෙනව.කොහෙද ඒ දවස් වල ඕව ඉගෙන ගන්න උනන්දුවක් තිබුනෙ නෑනෙ.
    ඔයාටත් සියලු පැතුම් ඉ‍ටුවෙන සුබම සුබ නව වසරක් වේවා......................!!

    ReplyDelete
  4. නියම ලිපියක්....

    ReplyDelete
  5. එලටම තෙරුනා මචන්. තැන්කූ..

    ReplyDelete
  6. හොද ලිපියක්. මම නම් මේ ගැන කලින් දැනගෙන හිටියේ නැහැ. System එකෙන් දාන Password Salt එකත් Password එකෙන් Password එකට වෙනස් වෙනවද?

    ReplyDelete
  7. @හා පැටික්කි (MS)
    ස්තූතියි... මම මේ දැක්කමයි එපා කියන දෙයක් අහන ගෑනු ලමයෙක්. හරි හොදයි නෙ. ඈත්ත තමයි අපි දන්නෙ නැති දේවල් ඕන තරම් තියනවනේ. අපි කොහොම හරි ඒව ටික ටික දැනගන්න උත්සහ කරන එක තමයි මැරෙනකන්ම කරන්නෙ..

    @මධුරංග
    ස්තූතියි... ඔව් මේක ගොඩක් කැම්පස් වල කරන විෂයක්. ඒත් සාමාන්‍ය පරිගණකය පාවිච්චි කරන අයට දැනගන්න ලැබෙන්නෙ නැති දෙයක් කියල හිතුනු නිසා ලිවුවෙ...

    @dinesh
    ස්තූතියි අයියෙ. ඉක්මනින්ම සියලුම බලාපොරොත්තු ඉටුකරගෙන ඉක්මනට ලංකාවට එන්න ලැබෙන්න කියල පතනව.

    @hamparawa, @Anonymous
    ස්තූතියි comment එකට. Anonymous දෙන්නටම ස්තූතියි.

    @Kenny Dematagoda
    ස්තූතියි comment එකට. ඔව් ඒක ගොඩක් වෙලාවට Password එකෙන් එකට වෙනස් වෙනව. මොකද නැත්නම් එච්චර ආරක්ෂිත නෑනෙ. ඒ වගේම ඒක Encrypt කරල Database එකේම තියාගන්න අවස්ථාවනුත් තියනව. ඒක ඉතින් තීරණය කරන්නෙ System එක Design කරන අය තමයි.

    ReplyDelete
  8. නියමයි කේෂාන් අය්යා......

    ReplyDelete
  9. @Anonymous ස්තූතියි comment එකට

    ReplyDelete
  10. හොඳ පැහැදිලි කිරීමක් .. සුභ පැතුම්.෴

    ReplyDelete
  11. Thank you for share your Knowledge

    ReplyDelete
  12. හොඳටම තෙරුනා....

    ReplyDelete

ටිකක් ඡනප්‍රිය ඒව