Public Key Cryptography နှင့် Internet ပေါ်တွင် လျို့ဝှက်စွာ ဆက်သွယ်ခြင်း နည်းနာများ (Part 2)

(Part 1 ကိုအရင်ဖတ်ပေးပါ)

Asymmetric Key Encryption အကြောင်းဆက်ရေးပါမယ်။

Asymmetric ဆိုတဲ့သဘောက အချက်အလက်တွေကို encrypt လုပ်တဲ့ key က တစ်ခု decrypt လုပ်တဲ့ key က တစ်ခု (အရှင်းဆုံးအခြေအနေမှာ ဆိုရင်တော့) key ၂ ခု ရှိပါမယ်။ Key A နဲ့ Key B လို့ ကျနော်ပြောပါ့မယ်။
အပေါ်က ဥပမာလေးကိုပဲ ပြန်ယူပြပါ့မယ်

ဒီနေရာမှာ ထူးခြားချက်က

  • KeyA နဲ့ encrypt လုပ်ထားတဲ့ ဟာကို KeyA က ပြန် decrypt လုပ်လို့မရပါဘူး။ KeyB ကပဲလုပ်လို့ရပါတယ်။ ဒီလိုပဲ KeyB နဲ့ encrypt လုပ်ထားတာကိုလည်း KeyA ကပဲ decrypt လုပ်လို့ရပါတယ်။ (Note – ဘာကြောင့်မရတာလဲ ဆိုရင်တော့ Key ၂ ခုဟာ သချ်ာနည်းအရ ဆက်နွယ်နေပါတယ်၊ အသေးစိတ်ကိုတော့ ရှုပ်ထွေးတဲ့ အတွက် သပ်သပ်ပဲဆက်လက်လေ့လာ စေလိုပါတယ်၊ ဒီနေရာမှာတော့မပြောတော့ပါ၊ နောက်ကွယ်က စဉ်းစားပုံ စဉ်းစားနည်း idea ကသာ လက်တွေ့မှာ ပိုအရေးကြီးလို့ပါ) ဒါကြောင့် asymmetric key encryption လို့ခေါ်ပါတယ်။ ဒီအချက်ဟာ အားလုံးရဲ့ အခြေခံပါပဲ။
  • KeyA ကိုသိလို့လဲ KeyB ကို guess လုပ်လို့ ခန့်မှန်းလို့ မရပါဘူး။

ဒီအချက်တွေကို အသုံးပြုပြီးကျနော်တို့ လွယ်ကူတဲ့ Public Key Infrastructure တစ်ခုတည်ဆောက်ကြည့်လို့ရပါပြီ။ အပေါ်ကလိုပဲ ကျနော်က သူငယ်ချင်းတစ်ယောက်ကို အချက်အလက်တစ်ခုပေးပို့ချင်တယ်ဆိုပါစို့။

အဲ့အခါမှာ ကျနော်က တစ်ခုနဲ့ တစ်ခု ဆက်နွယ်နေတဲ့ KeyA နဲ့ KeyB တစ်စုံကို generate လုပ်လိုက်ပါတယ်။ အဲ့ထဲကမှ တစ်ခုကို ယူပြီးကျနော်က public key ဆိုသတ်မှတ်လိုက်ပါတယ်။ ကျန်တစ်ခုကိုတော့ private key ဆိုပြီး သတ်မှတ်လိုက်ပါတယ်။

တစ်ခုက public key ဖြစ်တဲ့အတွက် ကျနော်က အဲ့ key ကို လူတိုင်းကို ပေးသိထားမှာပါ။ ဥပမာ ကျနော့်စက်ကို ဆက်သွယ်ချင်ရင် ဒီ public key ကို သုံးပါဆိုပြီး ဗြောင်တင်ထားမှာပါ။ private key ကိုတော့ private ဆိုတဲ့ အတိုင်း ဘယ်သူ့ကိုမှ ပေးမသိပါဘူး။ ကျနော့် private key ကိုကျနော်တစ်ယောက်ထဲကပဲ သိနိုင်မှာပါ။

ထို့နည်းတူပဲ ကျနော့် သူငယ်ချင်းကလဲ သူ့စက်မှာ Public/Private Key တစ်စုံ generate လုပ်ထားပြီး သူ့ public key ကို လူတိုင်းကိုပေးသိထားပါတယ်။
ဆိုတော့ ကျတော်က သူ့ကို အချက်အလက်တစ်ခုကို ပေးပို့လိုတဲ့ အခါ ကျနော်က သူ့ရဲ့ public key ကိုယူပြီး ကျနော်ပို့လိုတဲ့ အချက်အလက်ကို သူ့ public key နဲ့ encrypt လုပ်ပါတယ်။ ပြီးတော့ သူ့ဆီကိုပို့လိုက်မယ် ဆိုရင် ကျတော်တို့ ကြားဖြတ် ဖတ်လို့မရနိုင်တဲ့ အရိုးရှင်းဆုံး စနစ်တစ်ခုရရှိသွားပါပြီ။

ဘာလို့လဲ? ကျနော်က သူ့ရဲ့ public key ကို သုံးပြီး အချက်အလက်ကို encrypt ထားတာဖြစ်တဲ့ အတွက် ဒီစာကို ဒီ public key နဲ့ ဆက်နွယ်နေတဲ့ private key ပိုင်ရှင်က ကမ္ဘာပေါ်မှာ ကျနော့် သူငယ်ချင်းကလွဲပြီး မရှိနိုင်ပါဘူး။ သူကသာ decrypt လုပ်ပြီး ဖတ်နိုင်မှာ ဖြစ်ကြောင်း ကျနော် စိတ်ချလို့ရပါပြီ။

ဒါပေမဲ့ ဒီနေရာမှာလည်း ပြသနာတစ်ခုက ရှိနေသေးပါတယ်။ ကျနော့်သူငယ်ချင်းရဲ့ public key က လူတိုင်းသိနေမှာပဲဆိုတော့ ကျနော်မဟုတ်တဲ့ တခြား တစ်ယောက်က ကျနော်ယောင်ဆောင်ပြီး ကျနော့်သူငယ်ချင်းရဲ့ public key ကိုသုံး encrypt လုပ်ပြီး သူ့ဆီကို ပေးပို့လာနိုင်ပါတယ်။ လောလောဆယ်မှာ ကျနော့် သူငယ်ချင်းအနေနဲ့ ဘယ်သူပို့မှန်း စစ်ဆေးပေးနိုင်စွမ်းမရှိသေးပါဘူး။

အဲ့တော့ ကျတော်တို့ဟာ “ကျနော်တို့ ထွက်ဆိုတဲ့ ကျွန်တော်တို့” ဖြစ်ကြောင်းthey are who they say they are” (ဒါကို verify လုပ်တယ်လို့ခေါ်ပါတယ်၊ ရင်းနှီးကြမှာပါ) ဆိုတဲ့ catchphrase လေးအတိုင်း ကျတော်တို့ရဲ့ identity ကို prove လုပ်ဖို့ လိုလာပါတယ်။ အဲ့ပြသနာကို ဖြေရှင်းဖို့အတွက် ဆက်သွားကြည့်ရအောင်။

ဒီလို system ကိုသုံးခြင်းအားဖြင့် နောက်စိတ်ဝင်စားဖို့ကောင်းတဲ့ အနှစ်သာရတစ်ခု ရနိုင်ပါသေးတယ်။ ဥပမာ message တစ်ခုကို ကျနော်က ကျနော့် private key နဲ့ encrypt ထားတယ်ဆိုပါစို့။

ရုတ်တရက်တော့ ကျနော့် public key ကလူတိုင်းမှာရှိမှာပဲ/ပေါ်တင် ပြထားတာပဲ private key နဲ့ encrypt လိုက်လို့ ဘာအကျိုးရှိမှာလဲ၊ လူတိုင်းဖတ်လို့ရနေမှာပေါ့ ဆိုတဲ့ မေးခွန်းမေးစရာရှိပါတယ်။ ဒါပေမဲ့ ထူးခြားတာက message တစ်ခုဟာ ကျနော့် private key နဲ့ encrypt လုပ်ထားခြင်းအားဖြင့် ဒီ message ကို လက်ခံရရှိသူမှန်သမျှဟာ ကျနော့်ရဲ့ public key ကိုသုံးပြီး decrypt လုပ်နိုင်ခြင်းအားဖြင့် ကျနော့်ဆီက လာတယ်ဆိုတာကို စစ်ဆေးနိုင်ပါတယ်။

အကယ်၍ သာ ကျနော်မဟုတ်တဲ့ တခြားသူဆီကသာလာတယ်ဆိုရင် ကျနော့် private key နဲ့ encrypt လုပ်ထားတာမဟုတ်တဲ့ အတွက် ကျနော့်ရဲ့ public key ကိုသုံးပြီး decrypt လုပ်နိုင်မှာလည်းမဟုတ်ပါဘူး။ ထိုအခါမှာ အဲ့ message ကိုကျနော်ပို့တာမဟုတ်ကြောင်း သိနိုင်ပါတယ်။

ဒါဆို စောစောက ပြသနာကို ကျတော်တို့ ရှင်းလို့ရပါပြီ။

ကျနော်က သူငယ်ချင်းဆီကို message ပို့ချင်တယ်ဆိုရင် ကျနော်လုပ်ရမယ့်အဆင့် (၂) ဆင့်ရှိလာပါပြီ။

အရင်ဆုံး ကျနော့်အနေနဲ့ အချက်အလက်ကို ကျနော့် private key သုံးပြီး encrypt လုပ်ပါမယ်။

အဲ့ဒီ encrypt လုပ်ထားတဲ့ encrypted message ကို လက်ခံသူ ကျနော့် သူငယ်ချင်းရဲ့ public key သုံးပြီး ထပ် encrypt လုပ်ပါတယ်။ မျက်လုံးထဲမြင်အောင် ပြောရရင် စာအိတ် ၂ ထပ်လိုမျိုးမြင်ကြည့်ပါ။

အဲ့တာဆို ကျတော်တို့ ကြားလူအနေနဲ့လည်း ကျနော့် သူငယ်ချင်းရဲ့ public key နဲ့ encrypt လုပ်ထားတဲ့ message (စာအိတ်အပေါ်ဆုံးအလွှာ) ကိုပဲမြင်ရမှာ ဖြစ်ပြီး သူတို့မှာ လည်း သူငယ်ချင်းရဲ့ private key မရှိနိုင်တာကြောင့် ဖွင့်လို့ရမှာမဟုတ်ပါဘူး။

သူငယ်ချင်းဆီရောက်တော့လည်း သူက သူ့ရဲ့ private key သုံးပြီး ဖောက်လိုက်တဲ့ အခါမှာ ကျတော့်ရဲ့ private key သုံးပြီး encrypt လုပ်ထားတဲ့ အတွင်းထဲက encrypted message (စာအိတ်အတွင်းအလွှာ) ကိုတွေ့ပါမယ်။

အဲ့အခါမှာ သူက ကျနော့် public key ကိုသုံး decrypt လုပ်ပြီး original plain text message ကိုရရှိမှာဖြစ်ပြီး ကျနော့် public key နဲ့ ဖောက်နိုင်ခြင်းအားဖြင့် ကျနော်ကသာ ပေးပို့သူဖြစ်ကြောင်း verify လုပ်နိုင်မှာ ဖြစ်ပါတယ်။

ဒါဆိုရင်တော်တော်လေး secure ဖြစ်တဲ့ system တစ်ခုကို ရရှိနေပြီးပဲ ဖြစ်ပါတယ်။ ဒါက အခြေခံအကျဆုံး Public Key Infrastructure တစ်ခုဖြစ်ပါတယ်။ လက်တွေ့မှာတော့ ဒီထက်နည်းနည်း ရှုပ်ထွေးပေမဲ့ စိတ်ဝင်စားဖို့ကောင်းတဲ့ အဆင့်တွေ အများကြီး တွေ့ရမှာပါ။ နောက်ပိုင်းမှာ Digital Signature နဲ့ Certificate authority တွေအကြောင်း ဆက်လက်ဖော်ပြသွားပါ့မယ်။

Part 3 မှာ ဆက်လက်ဖတ်ရှုနိုင်ပါတယ်။

References
L5 Network Security and Cryptography Text Book
Computerphile

Kevin

အသိအမြင်၊ အတွေးအခေါ် အသစ်တစ်ခုခုရသွားလို့ လှူဒါန်းလိုပါက Science Nuts (Facebook Page) ကို ဆက်သွယ်လှူဒါန်းနိုင်ပါတယ်။
လှူသမျှငွေအကုန်လုံးကို လိုအပ်တဲ့နေရာတွေမှာ ပြန်လည်လှူဒါန်းပေးသွားမှာပါ။

Leave a comment

Design a site like this with WordPress.com
Get started