Dec 20, 2016

Hashing နှင့် Encryption အကြောင်း

Ko Sagaing

Hashing ဆိုတာ ဘာလဲ။

စာကြောင်းတစ်ကြောင်းကို တိုတောင်းပြီး ကန့်သတ်ထားတဲ့ စကားလုံးအရေအတွက်နှင့် ဖတ်ရန်ခက်ခဲသော စာကြောင်းတစ်ကြောင်း (သို့) စကားဝှက် အဖြစ် ပုံစံပြောင်းလဲ လုပ်ဆောင်ပေးခြင်းကို ခေါ်ပါတယ်။  Hash လုပ်ထားတဲ့ တန်ဖိုးတစ်ခုဟာ ခန့်မှန်းရလည်းခက်တယ်။  နောက်ပြီး Hash လုပ်ထားတဲ့ စာသားကို နဂိုစာသားပြန်ဖြစ်အောင် လုပ်လို့မရဘူး။  တစ်လမ်းသွား (ပြန်လမ်းမဲ့ ဓါးသမား :D) နည်းလမ်းပဲဖြစ်ပါတယ်။ Hashing မှာ တစ်ခုသတိထားရမှာက Hash Value တွေကို Hack လုပ်တဲ့ Algorithms တွေရှိတယ်။  ဥပမာ RainBow Table, Dictionary Attack, Brute-Force Attack တို့ဖြစ်တယ်။  ဖြစ်နိုင်ခြေရှိတဲ့ Hash Value တွေကို Dictionary (သို့) Table တွေထဲမှာ ထည့်ထားမယ်ပြီးရင် အဲ့ဒီအထဲကနေ Hash တန်ဖိုးတွေကိုရှာပြီး Hack လုပ်တာဖြစ်တယ်။  Hack လုပ်တာ လွယ်ကူတဲ့ကိစ္စတော့ မဟုတ်ဘူး။  ဒါပေမယ့် Hash Value တွေထုတ်တဲ့အခါမှာ အားနည်းချက်တွေ ရှိခဲ့မယ်ဆိုရင်တော့ လုပ်နိုင်ပါလိမ့်မယ်။

ပေါ်ပြူလာ Algorithms များ


ကျယ်ပြန့်ပြီး လူသိများတဲ့ Hashing လုပ်ဆောင်ချက်ဖြစ်ပါတယ်။  ၄င်းက 16-byte ပါတဲ့ hash တန်ဖိုးတွေကို ထုတ်ပေးနိုင်ပါတယ်။ မြင်ရတဲ့ တန်ဖိုးကတော့ 32 digit ရှိတဲ့ hexadecimal ကိန်းဂဏန်းအနေနှင့် ဖေါ်ပြလေ့ရှိပါတယ်။

ဥပမာ (E7C7BF203E44DB22D3D52A7517E3924A)
ဒါကျွန်တော့နာမည်ကို Hash နှင့် ထုတ်ထားတာပါ။


SHA မှာတော့ ကွဲပြားခြားနားတဲ့ Algorithms (၃) မျိုးရှိပါတယ်။  အဲ့ဒါတွေက (SHA-0, SHA-1, SHA-2) ဆိုပြီးရှိတယ်။ SAH-0 ကတော့ အင်မတန်မှ လူသုံးနည်းပါတယ်။ ဘာလို့လည်းဆိုတော့ error ရှိနေတဲ့ အတွက်ကြောင့် ဖြစ်တယ်။  အဲ့ဒီ error ကို ပြင်ပြီးတော့ အသစ်ထွက်လာတဲ့ Algorithm က SHA-1 ဖြစ်တယ်။  လူသုံးလည်းများတဲ့ နည်းစနစ်တစ်ခုလည်း ဖြစ်တယ်။ သူကနေ 20-byte ပါတဲ့ hash တန်ဖိုးတွေကို ထုတ်ပေးနိုင်တယ်။  မြင်ရတာကတော့ 40 digits hexadecimal ကိုမြင်ရမှာပါ။

ဥပမာ (6CCC32CFD31F6D09A4AE424FFAAFB35A8A5F61EF)
ဒါလည်း ကျွန်တော့နာမည်ကို Hash နှင့် ထုတ်ထားတာပါ။

SHA-2 ကတော့ SHA-1 ကိုပဲ မတူကွဲပြားတဲ့ ပြောင်းလဲမှုတွေနှင့် ဖန်တီးထာတဲ့ Algorithm ဖြစ်တယ်။ အဲ့ဒါကတော့ သူ့မှာ hash လုပ်ဆောင်ချက် (၆) ခုနှင့်ဖွဲ့စည်းထားတာပဲဖြစ်တယ်။ အဲ့ဒါတွေကတော့… SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 တို့ပဲဖြစ်တယ်။  အရေးပါတဲ့ လုံခြုံရေးပိုင်းဆိုင်ရာ လုပ်ဆောင်ချက်တွေ၊ လုပ်ငန်းတွေမှာ သုံးဖို့ဆိုရင် SHA-256 နှင့် အထက်မြင့်တဲ့ Hashing Algorithm တွေကိုသာ သုံးဖို့ နည်းပညာရှင်တွေက အကြံပြုပါတယ်။  SHA-256 က 32byte ပါတဲ့ Hash တန်ဖိုးကို ထုတ်ပေးနိုင်တယ်။  မြင်ရတာကတော့ 64 digits hexadecimal ကိုမြင်ရမှာပါ။

ဥပမာ (48943605964CE3204CCEF15D3856EC1D426FC5981BD8E94C351F7E7660CA082C)
ဒါလည်း ကျွန်တော့နာမည်ကို Hash နှင့် ထုတ်ထားတာပါ။

တကယ်တော့ Hashing နည်းပညာဟာ ကျွန်တော်တို့ရဲ့ Password တွေကို လုံခြုံအောင် သိမ်းရန်အလို့ငှာ အသုံးပြုဖို့ ရည်ရွယ်ထားတဲ့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ တစ်စုံတစ်ယောက်က ဒီ Hash လုပ်ထားတဲ့အချက်အလက်ကို ပြန်ဖေါ်ဖို့ဆိုတာ အင်မတန်မှကို ခက်ခဲပါတယ်။  (ခက်ခဲတယ်ဆိုတာ ဒီလိုပါ...တကယ့်ကို ကျစ်လစ်တဲ့ Hash နည်းစနစ်တစ်ခုမှာ salt ဆိုတာကိုပါ ပေါင်းစပ်ပြီး Hash တန်ဖိုးတွေကို ထုတ်လေ့ရှိပါတယ်။  ဆားနည်းနည်း ခပ်လိုက်တဲ့ သဘောပေါ့... :D) Password တွေကို သိမ်းတဲ့အခါမှာ Salt နှင့် Hash ပေါင်းစပ်ပြီး သိမ်းသင့်ပါတယ်။ Salt ဆိုတာဘာလည်းဆိုတော့ Random (ကြုံရာ၊ ကျပန်း) ကိန်းဂဏန်း တစ်ခုကိုပြောတာပဲ ဖြစ်တယ်။ အဲ့ဒီ Salt ကို Hash ထဲမှာ အပို (အရန်) တစ်ခုအနေနှင့် ထည့်သွင်းပြီး သုံးလေ့ရှိတယ်။ Password သို့မဟုတ် Passphrase တွေအတွက် သုံးလေ့ရှိတယ်။ Hashes တန်ဖိုးတွေဟာ ပင်ကိုအားဖြင့် သူ့သဘာဝက ပြန်လမ်းမရှိတဲ့ သဘောတရား အနေနှင့်တည်ရှိတယ်။ Hashing ကို ဘယ်လိုနေရာမျိုးတွေမှာ သုံးလည်းဆိုတော့ Database လိုနေရာမျိုးမှာ သိမ်းထားတဲ့ Hash တန်ဖိုးနှင့် ကျွန်တော်တို့ဆီက ထည့်လိုက်တဲ့ Hash တန်ဖိုး ၂ခုကို နှိုင်းယှဥ်ချင်တဲ့ လုပ်ဆောင်ချက်မျိုးတွေမှာ အင်မတန်မှ အသုံးတွင်ကျယ်တယ်။  အောက်ကပုံမှာ Hashing ဘယ်လို အလုပ်လုပ်လည်းဆိုတာ ပြထားတာပါ။

Encryption ဆိုတာဘာလဲ။
သူကကြတော့ ဖတ်လို့မရတဲ့ စာသားတွေအဖြစ် (စကားဝှက်) ပုံစံပြောင်းလဲ၊ လုပ်ဆောင်ပေးတာပဲ ဖြစ်တယ်။ စာကားလုံးအရေအတွက် ကန့်သတ်မထားဘူး။ Encrypt လုပ်ထားတဲ့ စာကြောင်း၊ အချက်အလက်ကို ဖတ်လို့ရတဲ့နဂိုမူလစာသားပြန်ရအောင် ပြန်ဖေါ်လို့ရတယ်။ ဒါပေမယ့် မှန်ကန်တဲ့ Key ရှိဖို့တော့လိုတယ်။  တချို့နေရာတွေမှာ Encryption ကို Hashing ရဲ့အပေါ်မှာ ထပ်ထည့်သုံးလေ့ရှိပါတယ်။  အဓိက Encryption နှစ်မျိုးရှိတယ်။  အဲ့ဒါတွေက...


သူကတော့ Encrypt လုပ်တာ နှင့် Decrypt (ပြန်ဖေါ်) လုပ်တာကို Key တစ်ခုတည်းနှင့် သုံးပြီး အလုပ်လုပ်တဲ့ လုပ်ဆောင်ချက် ဖြစ်တယ်။ သုံးရတာ ရိုးရှင်းပြီး မြန်ဆန်စွာ လုပ်ဆောင်နိုင်တယ်။


နောက်တစ်မျိုးက...


သူ့မှာတော့ Key နှစ်ခုရှိတယ်။ တစ်ခုက Encrypt လုပ်ဖို့ဖြစ်ပြီး၊ အဲ့ဒီ Key ကို Public Key လို့ခေါ်တယ်။ နောက် Key တစ်ခုက Decrypt လုပ်ဖို့ဖြစ်ပြီး၊ အဲ့ဒီ Key ကိုကြတော့ Private Key လို့ခေါ်တယ်။ Client (သို့) User တစ်ယောက်မှာ Private Key တစ်ခုစီရှိကြတယ်။ Public Key ကကြတော့ အချက်အလက်တွေကို မည်သူမဆို Encrypt လုပ်နိုင်အောင် လုပ်ထားတယ်။ သို့သော် Private Key ရှိတဲ့သူသာလျှင် အချက်အလက်ကို Decrypt (ပြန်ဖေါ်) လုပ်လို့ရမှာ ဖြစ်တယ်။ Private Key သည်လည်း သီးသန့် သတ်မှတ်ထားတဲ့ သူတွေသာလျှင် အသုံးပြုလို့ရတယ်။

ပေါ်ပြူလာ Algorithmsများ


Symmetric Key Encryption အမျိုးအစားဖြစ်ပြီး၊ ခေတ်နောက်ကျနေပြီဖြစ်တဲ့ Algorithm တစ်ခုဖြစ်တယ်။ Encrypt/Decrypt လုပ်တဲ့ Key အရွယ်အစားက 56 bits ထိပဲသုံးနိုင်တဲ့အတွက် Hack လုပ်ချင်တဲ့သူတွေအကြိုက် Algorithm တစ်ခုဖြစ်တယ်။  နောက်ပြီး Version အသစ် 3DES ဆိုတာလည်း ရှိတယ်။  သူက Key အရွယ်အစား (၃) မျိုးထိပြောင်းသုံးနိုင်တယ်။  ဒါပေမယ့် DES Algorithm ဟာ လုံခြုံရေးပိုင်းဆိုင်ရာ အားနည်းချက်၊ စွမ်းဆောင်ရည် နှေးကွေးမှုတွေကြောင့် လူသုံးနည်းတဲ့ စနစ်တစ်ခုဖြစ်ခဲ့တယ်။


AES ကို လုံခြုံရေးပိုင်းဆိုင်ရာနှင့် ပတ်သက်ပြီး Gold Standard လို့သတ်မှတ်ကြတယ်။ Symmetric Key Encryption ဖြစ်ပြီးတော့ Key အရွယ်အစားနှင့် ပတ်သတ်ပြီး  (128, 192 နှင့် 256 bits) ဆိုပြီး (၃) မျိုးရှိတယ်။ AES ကိုသုံးမယ်ဆိုရင် Key အရွယ်အစားကို 256 bits ထိသတ်မှတ်ပြီး သုံးဖို့ နည်းပညာရှင်တွေက အကြံပြုကြတယ်။ ဘာကြောင့်လည်းဆိုတော့ ပိုပြီးတော့ လုံခြုံအောင်လို့ဖြစ်တယ်။


PGP က လူသုံးများပြီး Public Key Encryption အမျိုးအစားဖြစ်တယ်။  PGP ကို ဘယ်နေရာတွေမှာ သုံးကြလည်းဆိုတော့ Digital Signing, Email, Files, Hard Disk Partition စတာတွေအတွက် အသုံးပြုကြတယ်။

မှတ်စုရေးသူအကြောင်း

Ko Sagaing / Software Engineer

နာမည်အရင်းမှာ လှိုင်မင်းထက်ဖြစ်ပြီး၊ ကိုစစ်ကိုင်းဆိုသည့် နာမည်ပြောင်နှင့် မိတ်ဆွေ၊ သူငယ်ချင်းများက ရင်းနှီးစွာခေါ်ကြပါသည်။ ယခင်ကမြန်မာနိုင်ငံတွင် သင်ကြားရေး နှင့် Software Development လုပ်ငန်းများတွင် ဝင်ရောက်လုပ်ကိုင်ခဲ့ပြီး၊ ယခုလက်ရှိမှာ စင်ကာပူနိုင်ငံရှိ နည်းပညာကုမ္ပဏီတစ်ခုတွင် ဝင်ရောက်လုပ်ကိုင်နေပါသည်။

0 ခုမှတ်ချက်ပေးထားတယ်။:

Post a Comment

ကိုစစ်ကိုင်း၏ မှတ်စုများ. Powered by Blogger.