Monday, April 15, 2013

ဟက်ကာ ပရိုဂရမ်မာနှင့် ဒစ်ဂျစ်တယ်ခံတပ်

၁။ ဆိုင်ဘာလုံခြုံရေး နှင့် ဟက်ကာအရွေ
၂၀၁၀ လာက်ကစပြီး အမေရိကန်အစိုးရ အဂျင်စီတွေ နဲ  Google အပါအ၀င် ကာ်ပိုရေးရှင်းကြီးတွေရဲ့ ကွန်ပြူတာစနစ်တွေ မကြာခဏ ဖာက်ထွင်းတိုက်ခိုက်ခံနေရတာ မိတ်ဆွေတို  အားလုံး သိပြီးဖြစ်ပါတယ်။ ဒီ ဆိုင်ဘာ (cyber) တိုက်ခိုက်မှုတွေကို လုပ်ဆောင်တဲ့သူတွေကတော့ သူတို ကိုယ်သူတို  ‘မျိုးချစ်ဟက်ကာများ’ လို  ရည်ညွှန်းကြလေရဲ့။ မျိုးချစ်ဟက်ကာ ဆိုလို  ဘယ်လို ပုဂ္ဂိုလ်တွေပါလိမ့်ဆိုပြီး ဇာစ်မြစ်လိုက်ကြည့်တော့ “အားလုံး သိတော်မူကြတဲ့အတိုင်း ပါပဲခင်ဗျာ” လို ပဲ ဆိုရပါတော့မယ်။ ထားပါတော့ဗျာ။ ဒီဆောင်းပါးက အဲဒီလို မျိုးချစ်ပုဂ္ဂိုလ်ကြီးတွေနဲ  မိတ်ဆွေဖြစ်ရတာထက်၊ လူ ကျင့်၀တ် စာင့်ထိန်းလိုက်နာသူတွေ၊ လူ သိက္ခာ တန်ဘိုးထားသူတွေ၊ လူ  တန်ဘိုးကို လးစားနားလည်သူတွေနဲ  ရန်သူဖြစ်လိုက်ရတာကမှ ပိုကောင်းဦးမယ် ဆိုတဲ့ အကြောင်းမဟုတ်တဲ့အတွက်ပေါ့။ ကျွန်တော်တို ဆွးနွေးမှာက ကွန်ပြူတာစနစ်ရဲ့ လုံခြုံရေး နဲ ပတ်သက်တဲ့ အကြောင်းပါ။
မိတ်ဆွေတို အားလုံးသိကြတဲ့ ၀ီကီလိခ်စ် (WikiLeaks) မှာတင်လိုက်တဲ့ အမေရိကန် သံတမန်ရေးရာ အချက်အလက် နှစ်သိန်းခွဲကျော်ကို အာင်အောင်မြင်မြင် ဖါက်ထွင်း ခိုးယူနိုင်ဖို  အဲဒီမျိုးချစ်ပုဂ္ဂိုလ်ထူးတွေရဲ့ အရပ်ဖက် စစ်ဖက် ဆိုင်ရာ တာ၀န်ရှိသူဆွေကိုယ်တိုင်က ငွကြေးနဲ  နည်းပညာပါ ၀ိုင်း၀န်းကူညီခဲ့ကြတယ်ဆိုပဲ။ ဒါ့အပြင် ၂၀၀၈ တုန်းကလည်း အဲဒီမျိုးချစ်ပုဂ္ဂိုလ်တွေရဲ့စစ်တပ်နဲ ဆက်စပ်နေတဲ့ ဟက်ကာတွေက ၅၀-mega byte လာက်ရှိတဲ့ email အချက်အလက်တွေ၊ user name နဲ  password တွကို အမေရိကန်အစိုးရအေဂျင်စီတွေရဲ့ ကွန်ပြူတာစနစ်ထဲက ဖာက်ထွင်းခိုးယူခဲ့ကြတယ်။
အဲဒီတော့ ပာချင်တာက ဒီနေ ခတ်မှာ “ဟက်ကာဆိုတာ လူမသိ သူမသိ နရာတနေရာရဲ့၊ ရှုပ်ပွနေတဲ့ အခန်းတခန်းထဲက၊ ကွန်ပြူတာ လးငါးဆယ်လုံးဘေးမှာ အလုပ်ရှုပ်နေတဲ့၊ သူ၀ါသနာပါရာ စိတ်၀င်စားရာကို စမ်းသပ်နေတဲ့ မျက်မှန်ထူ  ခါင်းမွေးစုတ်ဖွား ဂုရုကြီး” မဟုတ်တော့ပါဘူး။ “နိုင်ငံတနိုင်ငံ ဒါမှမဟုတ် အဖွဲ  အစည်းတခု ရဲ့ နိုင်ငံရေး စီးပွားရေး လူမှုရေး လုံခြုံရေး တို နဲ  ပတ်သက်ပြီး လွှမ်းမိုးခြိမ်းခြောက်နိုင်လောက်တဲ့ အဆင့်ထိရှိအောင်၊ ရည်ရွယ်ချက်ရှိရှိနဲ  စနစ်တကျ၊ ဖွဲ စည်းထားတဲ့ တိုက်ခိုက်ရေးအဖွဲ တခု” အဖြစ် အသွင်ပြောင်း ရွ  လျားလာပါပြီ။
၂။ ဟက်ကာနှင့် ပရိုဂရမ်မာ၏အခန်းကဏ္ဌ
အခုလို သတင်းအချက်အလက်ခေတ်ကြီးထဲမှာ နိုင်ငံတနိုင်ငံ အဖွဲ  အစည်းတခုရဲ့ လုံခြုံမှုဟာ အဲဒီနိုင်ငံ အဲဒီအဖွဲ  အစည်းရဲ့ ကွန်ပြူတာစနစ်တွေ ဘယ်လောက် လုံခြုံသလဲ ဆိုတဲ့ အပေါ်မှာ မူတည်လာပါတယ်။ [“ဒို ကတော့ အားလုံး manual ပဲဟေ့” ဆိုတဲ့ နိုင်ငံတွေ အဖွဲ အစည်းတွေ အတွက်တော့ မပြောတတ်ဘူးပေါ့ခင်ဗျာ။] ဒါကြောင့်မို  အုပ်စုဖွဲ ကျူးလွန်တဲ့ ရာဇ၀တ်မှု (organized crime) ဆန်ဆန် ဆိုင်ဘာတိုက်ခိုက်မှုတွေကို ခုခံကာကွယ်ဖို  ကိုယ့်ရဲ့ ကွန်ပြူတာစနစ်ကို လုံခြုံအောင်လုပ်ဖို  ဘယ်လောက်အရေးကြီးမယ်ဆိုတာ မိတ်ဆွေတို  မှန်းဆကြည့်နိုင်ပါတယ်။ ဒီလိုလုပ်ဖို  အတွက် ကွန်ပြူတာစနစ် တစ်ခုလုံးမှာပါတဲ့ hardware, software, netware, ဆက်သွယ်ရေးစနစ်၊ စီမံခန် ခွဲ အုပ်ချုပ်ပုံ စတဲ့ အလွှာတွေ အားလုံး အချိုးညီညီ ပူးပေါင်းလုပ်ဆောင်ရပါမယ်။
Fig: Defense in Depth Layers
ဒီဆောင်းပါးမှာတော့ ကျွန်တော်တို ဟာ software နဲ  ဆိုင်တဲ့ အပိုင်း၊ ပိုပြီးတိတိကျကျ ပာရရင် ကျွန်တော်တို  လုံခြုံအောင်လုပ်ရမယ့် ကွန်ပြူတာစနစ် ကြီးထဲမှာ အစိပ်အပိုင်းတခုအဖြစ် ပါ၀င်နေတဲ့၊ web application ဆာဖ့်၀ဲတွေ web page တွ ရးသားတဲ့ programming အပိုင်းကိုသာ အဓိကထား ဆွးနွေးသွားမှာဖြစ်ပါတယ်။ ပုံမှာ ပထားတဲ့အတိုင်းဆိုရင် application layer ကနေ data layer ကို ဟက်ကာ တွ ဘယ်လို ဖါက်ထွင်း၀င်ရောက်ကြတယ် ၊ ဒါဟာ application layer ရဲ့ ဘယ်လိုအားနည်းချက်တွေကြောင့်ဖြစ်တယ်၊ အဲဒီအားနည်းချက်တွေကို ဘယ်လိုပြုပြင်မယ် ဆိုတာကို အကျဉ်းချုံးပြီး တင်ပြမှာပါ။
တကယ်တော့ စ့စပ်သေချာပြီး ကျွမ်းကျင်လိမ္မာတဲ့ ပရိုဂရမ်မာတစ်ရောက်ဟာ၊ ဟက်ကာတစ်ရောက်ရဲ့ application-layer ကတဆင့် ဖာက်ထွင်းခိုးယူ (hack) နိုင်မယ့် လမ်းကြောင်း တာ်တော်များများကို ပိတ်ဆို ဟန် တားနိုင်စွမ်း ရှိပါတယ်။
ဒါကြောင့်မို  web application တွ web page တွကတဆင့်၊ ဟက်ကာတွေ ဘယ်လို hack လုပ်သလဲဆိုတာ အကြမ်းဖျဉ်းသဘောပေါက်ဖို  မိတ်ဆွေအနေနဲ  programming အခြေခံလောက်နဲ  structure query language အခြေခံလောက် တာ့ရှိထားသင့်ပါတယ်။
တကယ်တော့ ဟက်ကာဆိုတာ
• Platform knowledge (Unix, Linux, Solaris, Mac, Windows စတဲ့ OS တွ နဲ  ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• Network knowledge (ကွန်ပြူတာကွန်ရက်ဆက်သွယ်ရေး နည်းပညာတွေနဲ  ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• Security knowledge (ကွန်ပြူတာစနစ်တွေရဲ့ လုံခြုံရေးနဲ ပတ်သက်တဲ့ ကျွမ်းကျင်မှု)
• technical knowledge ( programming language ပါင်းစုံ၊ အထူးသဖြင့် Assembly, C စတဲ့ low level  တွနဲ  scripting language တွကို ကျွမ်းကျင်မှု) စတာတွေရှိထားတဲ့ သူတွေပါပဲ။
တကယ့် professional programmer / developer တွလည်း အဲဒီ အသိပညာတွေနဲ ပတ်သက်ရင် အားလုံးကို အနဲဆုံး အခြေခံအဆင့်လောက်တော့ တီးမိ ခါက်မိတဲ့ သူတွေချည်းပဲ ဖစ်ပါတယ်။ programmer / developer တွဆိုတော့လည်း technical knowledge ဘက်ကိုပဲ ပိုအားသန်တာပေါ့။ ဒါပေမယ့် တခြား နယ်ပယ် သုံးခုကလည်း ကိုယ်နဲ  သိပ်မစိမ်းလှတဲ့အတွက်၊ နည်းနည်း ပါးပါး အားဖြည့်လိုက်ရင် ‘မြွှေ မွချင်း ခမြင်’ နိုင်တဲ့ သူတွေ ဖစ်လာကြမှာပါ။
၃။ တိုက်ပုံခိုက်ပုံ နည်းပေါင်းစုံ
ကွန်ပြူတာစနစ်တွေကို ဟက်ကာတွေရဲ့ ဖာက်ထွင်း ၀င်ရောက် တိုက်ခိုက်ပုံတွေကို အဓိကအုပ်စုကြီးတွေအဖြစ်ခွဲလိုက်ရင်
• Operating System Attacks (OS ရဲ့ အားနည်းချက်တွေကို ရှာဖွေတိုက်ခိုက်တာ။)
• Application-Level Attacks (error checking/testing အားနည်းခဲ့တဲ့ အသုံးချဆောဖ့်၀ဲ တွ ကတဆင့် တိုက်ခိုက်တာ။)
• Shrink Wrap Code Attacks (OS၊ အသင့်သုံး library, အသင့်သုံး application, စတာတွေမှာ ပါတဲ့ script တွ configuration တွကို ကိုယ်လိုချင်တဲ့ပုံစံ ချိန်ညှိမှုပြုလုပ်မထားရင် default setting/value တွပဲဖြစ်နေမယ်။ default value က ဘာဆိုတာ သူသူ ငါငါ အလွယ်တကူ သိနိုင်တဲ့အတွက် ဟက်ကာက ကိုယ့်ရဲ့ system ကို အလွယ်တကူ ထိုးဖောက်တိုက်ခိုက် နိုင်တယ်။ အဲဒီလိုပုံစံတိုက်ခိုက်မှုကို ခါ်တာ။ )
• Misconfiguration Attacks (file permission တွနဲ  ပတ်သက်ပြီး ပာင်းပစ်တာ၊ “ရှုပ်ပါတယ်ကွာ fire-wall ကြီး off ပစ်စမ်းပါ” “UAC - User Account Control ကြီး ပိတ်ပစ်စမ်းပါ” ဆိုတာတွေ၊ “ ‘remember me’ ဆိုတာလေး ချစ် (tick) ထားလိုက်ဟေ့” စတဲ့ system နဲ  ပတ်သက်ပြီး မှားယွင်းတဲ့ configuration တွ လုပ်မိလို  ကိုယ့် system က မလုံခြုံတော့ပဲ ဟက်ကာက အလွယ်တကူ ၀င်ရောက်တိုက်ခိုက်နိုင်တာ)
ဆိုပြီး အုပ်စုကြီး ၄-စု အဖြစ် ခွဲခြားနိုင်ပါတယ်။ အဲဒီထဲမှာမှ ကျွန်တော်တို ဟာ application level attack အပိုင်းကိုသာ လ့လာမှာပါ။
အဲဒီအပိုင်းကလည်း အတော်လေးတော့ ကျယ်ပြန် ပါတယ်။ application level attack အပိုင်းမှာ ဟက်ကာတွေ အများဆုံးသုံးတဲ့ တိုက်ခိုက်နည်းစနစ်တွေ ကတော့ SQL Injection attacks, Buffer overflow attacks, Cross-site scripting, Active content, Denial of service and SYN attacks နဲ  Malicious bots တို ပါ့။ ဒါတွေအပြင် တခြားထင်ရှား အသုံးများတာတွေကတော့ Phishing, session hijacking, Man-in-the-middle attack, Parameter/Form tampering နဲ  directory traversal attacks စတာတွေဖြစ်ပါတယ်။
၄။ SQL Injection Attack
၂၀၁၀ ဒီဇင်ဘာတုန်းက၊ အမေရိကန် နူးရော့ခ် အခြေစိုက် CitySights ကုမ္ပဏီရဲ့ မိခင်ကုမ္ပဏီဖြစ်တဲ့ Twin America ဟာ၊ သူတို customer တစ်သိန်းနီးပါးရဲ့ အကြွေး၀ယ်ကဒ်နံပါတ်တွေအပါအ၀င် ပုဂ္ဂိုလ်ရေးအချက်အလက်တွေ ခိုးယူခံလိုက်ရတယ်။ အဲဒီဖြစ်စဉ်မှာ ဟက်ကာတွေ သုံးတဲ့နည်းက SQL Injection နည်း။
နောက်တခါ အမေရိကန်သမိုင်းမှာ အကြီးမားဆုံး အချက်အလက်ခိုးယူမှု (identity theft) တခုဖြစ်တဲ့၊ credit ကဒ် နဲ  debit ကဒ် နံပါတ်ပေါင်း သန်း ၁၃၀ ကျာ် ခိုးယူခံရမှုမှာ ကျူးလွန်ခဲ့တဲ့ ဟက်ကာ အဲလ်ဘတ် ဂွန်ဇာလက် (Albert Gonzalez) သုံးတဲ့ နည်းကလည်း SQL Injection။
ဒါကြောင့် ဒီ SQL Injection attack ဆိုတာ internet ပါ်မှာ website တွအများဆုံး တိုက်ခိုက်ခံရတဲ့ နည်းစနစ်အမျိုးအစား ဆိုတာ ရှင်းရှင်းလင်းလင်း ထင်ထင်ရှားရှား သိနိုင်ပါတယ်။ အဲဒီမှာ ခက်တာက “ဟက်ကာတွေ ဒီလိုတိုက်ခိုက်နိုင်တာဟာ database ရဲ့ အားနည်းချက်ကြောင့်လည်းမဟုတ်၊ web server ရဲ့ အားနည်းချက်ကြောင့်လည်း မဟုတ်ပဲ၊ web application ရဲ့ အားနည်းချက်ကြောင့်သာဖြစ်တယ်” ဆိုတာကို ပရိုဂရမ်မာ အများစုက အခုထက်ထိ ကာင်းကောင်း မသိကြသေးတာပဲ။
၄.၁။ SQL Injection ဆိုတာ ဘာလဲ
web application တစ်ခုရဲ့ web page တွမှာ keyboard ကနေ တိုက်ရိုက် data ရိုက်ထည့် နိုင်တဲ့ input textbox တွဆိုတာရှိမြဲဖြစ်ပါတယ်။ မိတ်ဆွေတို ရဲ့ facebook တို  Gmail တို ကို သုံးဖို  registration လုပ်ရသလိုမျိုး။ login ၀င်ဖို  user name နဲ  password ရိုက်ထည့်ရသလိုမျိုးပေါ့။
အဲဒီလို ရိုက်ထည့်လိုက်တဲ့ user input value တွကို database မှာ သွားပြီး သိမ်းချင်သိမ်းမယ် (insert, update)။
ဒါမှမဟုတ် အဲဒီ input value တွကို အခြေခံပြီး database ထဲက data ကို ဆွဲထုတ်ချင်ထုတ်မယ် (select)။
အဲဒီတော့ အဲဒီ input textbox တွဟာ database ရဲ့ ၀င်ပေါက်တွေ ဖစ်လာနိုင်တဲ့ နရာတွေ။
အဲဒီနေရာတွေကနေ ဟက်ကာတွေက သူတို  လိုချင်တဲ့ပုံစံ sql script တွ ရိုက်ထည့်လိုက်တယ်။
Web application က အဲဒီလို ရိုက်ထည့်လိုက်တဲ့ input value တွကို၊ ထာင့်ပေါင်းစုံကနေပြီး ဟာကွက်မရှိအောင် စစ်ဆေးမထားပဲ၊ query string တခုအဖြစ် database မှာ သွားပြီး execute လုပ်လိုက်တဲ့အခါ၊ အဲဒီ database ကို ထိမ်းချုပ်နိုင်စွမ်း ဒါမှမဟုတ် အဲဒီ database ထဲက အချက်အလက်တွေဟာ၊ ဟက်ကာလက်ထဲ ရာက်သွားရပါတော့တယ်။
ဒီဖြစ်စဉ်ကိုကြည့်မယ်ဆိုရင် SQL Injection နည်းနဲ  တိုက်ခိုက်ခံရမှုမှာ အဓိက တာ၀န်ရှိသူဟာ web programmer/developer ပဲ ဆိုတာ ငင်းလို မရပါဘူး။
အဲဒီလို SQL Injection နည်းနဲ  ဟက်ကာတွေဟာ အာက်ပါတိုက်ခိုက်မှုပုံစံ တွကို လုပ်ဆောင်ကြပါတယ်။
• Authentication Bypass (login စစ်ဆေးမှုတွေကို ဖတ်ကျော်ခြင်း)
• Information Disclosure (လျှို ၀ှက်အချက်အလက်တွေကို ဖွင့်ချခြင်း)
• Compromised Data Integrity (web page သို မဟုတ် database ထဲက အချက်အလက်တွေကို အစားထိုး/ပုံဖျက်/ပြောင်းလဲ ပစ်ခြင်း)
• Compromised Availability of Data (web page သို မဟုတ် database ထဲက အချက်အလက်တွေကို ဖျက်ပစ်ခြင်း)
• Remote Code Execution (web application, web server, database server တို  run နတဲ့ host operating system ကို တိုက်ခိုက်ခြင်း)
စတာတွေ ဖစ်ပါတယ်။
၄.၂။ SIA တိုက်ခိုက်မှုပုံစံ - ၁ (စစ်ဆေးမှုကို ကျာ်လွှားခြင်း)
-web site တခုကို သုံးဖို  login ၀င်တဲ့အခါ user name နဲ  password ရိုက်ထည့်ရပါမယ်။
-အဲဒီ information ကို အခြေခံပြီး sql query တစ်ခု ကို ဖန်တီးတည်ဆောက်မယ်။ ပီးရင် database ရဲ့ UserTable ထဲက သူနဲ  ကိုက်ညီတဲ့ row ကိုဆွဲထုတ်မယ်။ ဒါမှမဟုတ်လည်း သူနဲ ကိုက်ညီတဲ့ row အရေအတွက်ပေါ့။
-row အရေအတွက် zero ဆိုရင် login မအောင်မြင်ဘူး။ zero ထက်ကျော်ရင် တာ့ OK ပီ။ main page ကိုသွား။
အဲဒီ business logic အတွက် လိုအပ်တဲ့ [အသေးစိပ် coding တွကိုတော့ ကျမ်းလေးအံ့စိုး၍ ချန်လှပ်ခဲ့ပါတယ်။] query ကို programmer က ဟာဒီလို တည်ဆောက်လိုက်တယ်။
String queryStr = “SELECT COUNT(*) FROM Users
WHERE UserName =’” + txtUserName.Text +
“’ AND Password = ‘” + txtPassword.Text + “ ’ ”
ပြီးရင် အဲဒီ query string ကိုသုံးပြီး command object တခု တည်ဆောက်။ နာက် command.Execute() ဘာညာပေါ့။
အဲဒီလို အခြေအနေမျိုးမှာ ဟက်ကာ က login page ရဲ့ user name အတွက် ပးထားတဲ့ text box ထဲမှာ Bla’ OR 1=1 - -
ဆိုပြီး ရိုက်ထည့်လိုက်တယ်။ password အတွက်က ကြုံရာ စာသားတခု ဒါမှမဟုတ် အလွတ်ပဲထားလိုက်တယ်။
အဲဒီအခါ database မှာ execute လုပ်မယ့် query က ဟာဒီလို ဖစ်လာမယ်။
SELECT COUNT(*) FROM Users WHERE UserName = ‘Bla’ OR 1=1 -- AND Password = ‘Bla’
ဒါဆိုရင် sql အခြေခံလောက်ပဲသိထားဦးတော့ မိတ်ဆွေတို သဘောပေါက်ပါပြီ။
-- သငေ်္ကတ က နာက်က statement အားလုံးက မှတ်ချက်(comment) ဖစ်သွားပြီဆိုတော့ AND logic ကို ထည့်စဉ်းစားစရာမလိုတော့ဘူး။
UserName က Bla ဖစ်ရင်ဖြစ်၊ မဖြစ်ရင် ၁ နဲ  ၁ ညီရင် ရပြီဆိုတော့ ဒီ query ဟာ always true, none zero ပဲ return ပန်မယ်။ ဒါဆိုရင် ဟက်ကာ အနေနဲ  login စစ်ဆေးမှုကို အသာကလေး ကျာ်လွှားသွားပြီပေါ့။
၄.၃။ SIA တိုက်ခိုက်မှုပုံစံ -၂ (လျှို ၀ှက်အချက်အလက်များ ရယူခြင်း)
ဒီ sql injection attack ပုံစံကတော့ web application user ကို သူ စိတ်ကြိုက် ရှာဖွေခွင့်ပေးပြီး ရလာတဲ့ result ကို web page ပါ်မှာ ပန်ပြပေးရမယ့် business logic မျိုး ရးသားရာမှာ ဖစ်လေ့ရှိပါတယ်။
အမှန်တော့ user ကို သူသိချင် လိုချင်တဲ့ product တွနဲ  ပတ်သက်တဲ့ အချက်အလက်တွေကို ပရမှာပါ။ ဒါကြောင့် search text box မှာ user ရိုက်ထည့်လိုက်တဲ့ စာသားကို ယူပြီး database ( product table) မှာ အဲဒီလို အလားတူ product ရှိ မရှိ ရှာမယ်။ ပီးရင် user ကို ပန်ပြမယ်ပေါ့။ အဲဒါအတွက် query ကို ဟာဒီလို တည်ဆောက်လိုက်ရင်
String queryStr = “SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductName LIKE ” + txtSearch.Text;
ဟက်ကာက search text box မှာ
Bla’ UNION SELECT 0, username, password, 0 FROM Users - -
ဆိုပြီး ရိုက်ထည့်လိုက်တယ်။ ဒါဆို ဘာတွေ ဖစ်လာမလဲ ရှင်းပါတယ် user name နဲ  password တွ ဟက်ကာလက်ထဲရောက်သွားပြီပေါ့။ ဒီနေရာမှာ မိတ်ဆွေတို ဖက်က စာဒက တက်စရာတခုရှိမှာပါ။ “ဟက်ကာက ဘယ်လိုလုပ်ပြီး table name တို  column name တို  သိ သတုန်း” ပါ့။ အးဗျာ ဒီ hacking အကြောင်းကလည်း အသေးစိပ်ရေးမယ်ဆိုရင် “ကျမ်းတစောင် ပတဖွဲ ” ရးမှ ပည့်စုံမှာဆိုတော့ ဆာင်းပါးတပုဒ် နဲ တာ့ လိပ်ပတ်လည်အောင် ပည့်စုံအောင် မတင်ပြနိုင်ဘူးပေါ့။ အတိုချုပ်ဖြေရရင် hacking လုပ်တဲ့ အဆင့် ၅-ဆင့် ဖစ်တဲ့
1. Reconnaissance (ပြင်ဆင်ခြင်း၊ အချက်အလက်စုဆောင်းခြင်း အဆင့်)
2. Scanning (တိုက်ခိုက်မည့် target ၏ နည်းပညာပိုင်းဆိုင်ရာ အသေးစိပ် အချက်များ network information, computer name, port number, IP address, etc တို  ရယူခြင်း အဆင့်)
3. Gaining Access ( target သို  ထိုးဖေါက်၀င်ရောက်နိုင်သော အဆင့်)
4. Maintaining Access (ထိုးဖောက်၀င်ရောက်ထားသော target ကို ဆက်လက် ထိမ်းချုပ်ထားသောအဆင့်)
5. Covering Tracks (ခြေရာလက်ရာ ဖျာက်တဲ့အဆင့်)
ဆိုတဲ့ အဆင့်တွေထဲက ၁ နဲ  ၂ ပီးတာနဲ တင် table name တို  column name တို  ကို သိနိုင်တဲ့ အခြေအနေရောက်နေပြီ လို  အတိုချုပ် ဖပါရစေ။
၄.၄။ SIA တိုက်ခိုက်မှုပုံစံ - ၃ (insert/update/delete)
ဒီ sql injection attack နည်းနဲ  ပတ်သက်ပြီး  ပည့်စုံအောင်ဆွေးနွေးမယ်၊ တိုက်ခိုက်ပုံ case တခုချင်းစီအတွက် ဥပမာ coding တွနဲ  တင်ပြရမယ်ဆိုရင် ဒီဆောင်းပါး တစ်ပုဒ်နဲ ဘယ်လိုမှ မဖြစ်နိုင်ပါဘူး။ ဒါ့အပြင် မိတ်ဆွေတို ကိုလည်း နည်းပညာပိုင်းဆိုင်ရာ အသေးစိပ် အချက်အလက် တွနဲ  မလေးလံစေချင်တဲ့ အတွက် ဟက်ကာအနေနဲ  ကိုယ့်ရဲ့ database မှာ ဘယ်လို data အသစ်တွေထည့်နိုင်တယ်၊ ရှိပြီးသားတွေကို ဘယ်လို ပင်သွားနိုင်တယ် ဖျက်သွားနိုင်တယ် ဆိုတာကို အလွန်  အလွန် အတိုချုံးပြီး တင်ပြလိုက်ပါတယ်။
ဥပမာဗျာ Forgot password အတွက် ကိုယ့်ရဲ့ email ရိုက်ထည့်ရမယ့် text box လို နရာမျိုးက တဆင့် ဟက်ကာက
blah' ; UPDATE Customers SET customer-email = 'hacker@hacking.com' WHERE customer-email = 'original-user-name@orginal.com'; --'; စသည်ဖြင့် ရိုက်ထည့်ပြီး ကိုယ့်ရဲ့ အစစ်အမှန် မူလ email ကို ပာင်းသွားနိုင်ပါတယ်။
ဒါ့အပြင် blah' ; DROP TABLE Customers; --'; ဆိုပြီး table ကို ဖျက်သွားနိုင်သလို
blah' ; INSERT INTO Customers (column names here) VALUES ( values here); --'; ဆို ပီး သူအလိုရှိတဲ့ အချက်အလက်တွေ ထည့်သွားနိုင်ပါတယ်။
၄.၅။ SIA မှ ကာကွယ်ရန်
Query string အဖြစ်တည်ဆောက်မယ့် user input တွကို…
-Character string indicator တွဖြစ်တဲ့ Single quote, double quote တွ ပါ မပါ စစ်။
-Single line comment တွ ဖစ်တဲ့ double dash ( -- ) တို  hash/pound sign ( #) တွ၊ multi lines comment ( /*….*/ )တွေ ပါ မပါစစ်။
-စွယ်စုံသုံး plus sign (+) ကို စစ်။
-Wildcard character (%, *) တို ၊ semi-column ( ; ) စတဲ့ special character တွနဲ  ပတ်သက်ပြီး စစ်။
-Key words (and, &&, or, ||, not, !, select, union, insert, update, delete, etc) တွ နဲ  ပတ်သက်ပြီး စစ်။
၅။ Buffer Overflow တိုက်ခိုက်မှု
Memory ပါ်က နရာတစ်ခုမှာ သူလက်ခံနိုင်တဲ့ မမာဏထက်များတဲ့ data ထည့်မိတဲ့အခါမျိုးမှာ ဖစ်တတ်တဲ့ system error အမျိုးအစားတစ်ခုဖြစ်ပါတယ်။ ဒီ error ဟာ UNIX အခြေခံ OS တွ(UNIX, Linux) မှာရော၊ NT အခြေခံ Windows OS တွမှာပါ မကြာခဏ ဖစ်လေ့ဖြစ်ထရှိနေကြ error မျိုးပဲဖြစ်ပါတယ်။ ဒါဟာလည်း အဓိက အကြောင်းရင်းကတော့၊ ပရိုဂရမ်ရေးသားရာမှာ လိုက်နာကျင့်ဆောင်သင့်တဲ့ အလေ့အကျင့်ကောင်းတွေ ‘good programming practices’ ကို တိတိကျကျ လးလေးနက်နက် လိုက်နာမှုမရှိတာကြောင့်ဖြစ်ပါတယ်။ ဥပမာ အားဖြင့်ပြောရရင် တချို  developer တွဟာ ကိုယ့်ရဲ့ program/coding ထဲမှာ သုံးတဲ့၊ စာသားတွေ ကိန်းဂဏန်းတွေရဲ့ အများဆုံး လက်ခံနိုင်မှု ပမာဏ နဲ  ပတ်သက်ပြီး၊ သူတို ထဲကို data မထည့်မီ (assign မလုပ်မီ) ကာင်းကောင်း မစစ်ဆေးကြဘူး။ တချို ဆိုရင် အဲဒီ boundary value checking ကို လုပ်ရကောင်းမှန်းမသိပဲ ဖစ်စေ သိလျက်နဲ ဖစ်စေ လုံး၀ကျော်လွှားကြတယ်။
ဒါ့အပြင် တချို  programming language တွ ရဲ့ အသင့်သုံး library ကိုယ်တိုင်က အားနည်းချက် ရှိနေလို  ဒီ buffer overflow error ဖစ်ရတာပါ။ ဥပမာ C language မှာ ရှိတဲ့ strcat(), strcpy(), sprintf(), vsprintf(), bcopy(), gets(), scanf() စတဲ့ function တွဟာ buffer size ကို စစ်ဆေးမှုမရှိတဲ့အတွက်၊ အဲဒီ function တွကို ကိုယ့်ရဲ့ application ထဲမှာ ထာင့်ပေါင်းစုံက မစစ်ဆေးပဲ သုံးလိုက်မိရင် တချိန်မဟုတ်တချိန် buffer overflow error ဖစ်ဖို  အလားအလာ အလွန်များပါတယ်။
၅.၁။ BOF မှ ကာကွယ်ရန်
-ပရိုဂရမ်ဒီဇိုင်းဆွဲတုန်းထဲက လုံခြုံရေးအတွက် ထည့်သွင်းစဉ်းစားပါ။
-ဖြစ်နိုင်ရင် Type safe language (eg. Java) တွကိုပဲသုံးပါ။
-Stack Execution ကို disable လုပ်ထားပါ။ (ဒါကတော့ Solaris OS မှာပဲ ဖစ်နိုင်ပါတယ်။)
-အန္တရယ်ရှိတဲ့ function တွ(eg. gets(), strcpy() ) တတ်နိုင်သမျှ မသုံးပါနဲ ။
-(function ရဲ့) return address တွကို overwrite လုပ်ခွင့်မပေးပါနဲ ။
-အရေးကြီး အချက်အလက် (variables) တွကို overwrite လုပ်ခွင့်မပေးပါနဲ ။
-function တွကတဆင့် ပးလိုက်တဲ့ ရလာတဲ့ Argument/parameter တွကို အမြဲ စစ်ဆေးပြီးမှ သုံးပါ။ runtime checking ကို အမြဲ စ့စပ်သေချာစွာလုပ်ပါ။
-Coding တွကို ကာင်းစွာ စစ်ဆေး(test and debug) တဲ့အပြင် ပိုမို လုံခြုံစိတ်ချရတဲ့ compiler တွကိုပဲ သုံးပါ။
၆။ နိဂုံးအမှာ
အခုဆွေးနွေးခဲ့တဲ့ ကာကွယ်နည်းတွေဟာ အလွန်ရိုးရှင်းလွယ်ကူပြီး ပရိုဂရမ်မာတိုင်း အလွယ်တကူလုပ်နိုင်တဲ့ အလုပ်တွေပါပဲ။ ဒီလိုရိုးရှင်းလွယ်ကူတဲ့ အချက်အလက်လေးတွေနဲ ပဲ ရန်သူ(ဟက်ကာ) တွ မထိုးဖေါက်နိုင်တဲ့ ခိုင်ခံ့တဲ့ ခံတပ်(ကွန်ပြူတာစနစ်) တစ်ခုတည်ဆောက်နိုင်ပါတယ်။ အသေးအဖွဲ အမှိုက်လေးတွေကို ဂရုစိုက်ပြီးရှင်းလင်းသွားမယ်ဆိုရင် ခမ်းနားတဲ့ ပသာဒ်ကြီးကို မီးဘေးအန္တရယ်က ကာကွယ်နိုင်သလိုပေါ့။ မိတ်ဆွေတို  စိတ်၀င်စားတယ်ဆိုရင် ဒီ hacking နဲ  ပတ်သက်လို  ဆက်လက်ဆွေးနွေးပါဦးမယ်။

ရွှင်လန်းချမ်းမြေ့ပါစေ။
infoTherapy-2012
မှတ်ချက်။ ကွန်ပျူတာဂျာနယ်တွင် ဖါ်ပြပြီးသော ဆာင်းပါးဖြစ်ပါသည်။

Sunday, April 7, 2013

ကွန်ပျူတာသိပ္ပံ ကိန်းသီအိုရီ နှင့် ဝှက်စာပညာ


ကိန်းသီအိုရီ မိတ်ဆက်

ကိန်းသီအိုရီ (Number Theory) ဆိုတာ တကယ်တော့ ကိန်းပြည့်တွေကို လ့လာတဲ့ ပညာပါ။ ဒီကိန်းပြည့်တွေကို ကျွန်တော်တို ဟာ ဘာကြောင့် အထူးတလည် တကူးတက လ့လာရတာလဲဆိုတာ မဆွေးနွေးခင် ပထမဆုံးအနေနဲ  ကိန်းသီအိုရီမှာပါ၀င်နေတဲ့ အဓိက စကားလုံးတွေကို နည်းနည်းလေး ပန်နွှေးပါရစေ။

#Integer (ကိန်းပြည့်) သုညအပါအ၀င် အပေါင်းကိန်းပြည့်များအားလုံး နှင့် အနှုတ်ကိန်းပြည့်များအားလုံး။

#Prime number (သုဒ္ဓကိန်း - ထပ်မံခွဲစိပ်၍ မရသောကိန်း) တစ်နှင့် သူကိုယ်တိုင်မှလွဲ၍ တခြား အပေါင်းကိန်းဖြင့်စား၍ မပြတ်သော တစ်ထက်ကြီးသည့်ကိန်း။( 2, 3, 5, 7, 11, 13, 17, etc)

#Composite number (တစ်ထက်ကြီးသော သုဒ္ဓကိန်းမဟုတ်သည့် ကိန်းမှန်သမျှ) 4, 6, 8, 9 etc

#1 သည် composite လည်းမဟုတ်၊ prime လည်းမဟုတ်။

#ဂဏန်းသင်္ချာ၏ အခြေခံသီအိုရီ (The Fundamental Theorem of Arithmetic) “အပေါင်းကိန်းပြည့်တိုင်းကို prime number များ မှက်ခြင်းဖြင့်ဖော်ပြနိုင်သည်။”

ဥပမာ 7 = 7, 21 = 3 * 7, 30 = 2 * 3 * 5, 100 = 2 *2 * 5 * 5

61 394 323 221 = 3*3*3*7*11*11*37*37*37*53

#စားခြင်းသီအိုရမ် (Division Theorem) “စားကိန်းနဲ  စားလာဒ်  မှာက်၊ အကြွင်းနဲ ပါင်း၊ မူလကိန်းပြန်ရ” [စားကိန်းသည် သုညထက် ကြီးရမည်။]

n = qd + r ( Where 0 r < d ) [d divisor, q quotient, r remainder]

အကြွင်းဆိုင်ရာဥပမာ

rem(2716, 10) = 6 (ဆိုလိုတာက 2716 ကို 10 နဲ စား တာ့ 6 ကြွင်း ပါ့။)

အနှုတ်ကိန်းကိုစားလို ကြွင်းတဲ့ဥပမာ

rem(-11, 7) = 3

Division Theorem ရဲ့ ညီမျှခြင်းအရ -11 = (-2) * 7 + 3

ဒီနေရာမှာ စိတ်၀င်စားစရာကောင်းတာက C++, Java, C# မှာရှိတဲ့ % (modulus operator) က -11%7 = -4 လို တညီတညွတ်တည်း ပကြလေရဲ့။ အမှန်တော့ ကိန်းသီအိုရီလည်းမမှား၊ ကွန်ပြူတာတို  programming language တို လည်း မမှားပါဘူး။ modulus နဲ  remainder တို ရဲ့ မတူညီတဲ့သဘောသဘာ၀ကို မိတ်ဆွေ မင်ရတာသာဖြစ်ပါတယ်။ ဒီဆောင်းပါးမှာတော့ သင်္ချာပညာရပ်ဆိုင်ရာတွေ များပြားနေမှာစိုးလို  မဆွေးနွေးတော့ပါဘူး။ မိတ်ဆွေတို စိတ်၀င်စားတယ်ဆိုရင် ကိုယ်တိုင်သာ အသေးစိပ် ဆက်လက်လေ့လာကြပါလို  ပန်ကြားလိုပါတယ်။

#Perfect Number (ပြီးပြည့်စုံကိန်း) “၁ အပါအ၀င် ကိန်းတခုကို စားလို ပတ်တဲ့ကိန်းအားလုံး ပါင်းလိုက်လို  မူလကိန်းပြန်ရရင် အဲဒီကိန်းဟာ ပီးပြည့်စုံကိန်း”။

ဥပမာ 6 ကို 1, 2, 3 တို နဲ စားလို ပတ်တယ်။ ဒါ့အပြင် ၆ = ၁ + ၂ + ၃။  နာက် ဥပမာတခုက 28 ကို 1, 2, 4, 7, 14 တို နဲ စားလို ပတ်တယ်။၂၈ = ၁ + ၂ + ၄ + ၇ + ၁၄။ ဒါကြောင်  ၆ တို  ၂၈ တို ဟာ perfect number တွပေါ့။ တခြားဥပမာအနေနဲ  ၁၀ တို  ၁၂ တို ကျတော့ perfect number မဟုတ်ဘူး။ ဘာလို တုန်းဆိုတော့ ၁၀ ကို စားနိုင်တဲ့ကိန်းတွေက ၁ + ၂ + ၅ ပါင်းတော့ ၈ ပဲရတယ်။ ၁၂ ကို စားနိုင်တဲ့ကိန်းတွေက ၁ + ၂ + ၃ + ၄ + ၆ ပါင်းရင် ၁၆ ရမယ်။ မူလကိန်း ပန်မရဘူး။ ဒါကြောင့် ပီးပြည့်စုံသောကိန်း တွမဟုတ်ဘူး။

BC 300 လာက်ကတည်းက သင်္ချာပညာရှင်ကြီး ယူကလစ် (Euclid) က စုံ(even)ကိန်း  ဖစ်တဲ့ perfect number တွကို စုဆောင်းရှာဖွေခဲ့တယ်။ အဲဒီမှာ မးခွန်းတခု ပါ်လာတော့တာပဲ ။ “ပြီးပြည့်စုံသော မ’ ကိန်း odd perfect number တွရော ရှိသလား” ဆိုတာပါ။ ယူကလစ်ခေတ်ကနေ အခုနှစ်ပေါင်းနှစ်ထောင် ကျာ်လာတဲ့ ဒီနေ ထက်ထိ အဲဒီမေးခွန်းရဲ့အဖြေကို မသိသေးပါဘူး။ ကိန်းတန်ဘိုး ပမာဏ ( 10 300) ten to the power three hundreds အထိ လက်ရှိလေ့လာပြီးသလောက်တော့ ပီးပြည့်စုံတဲ့ မကိန်းကို မတွေ သးဘူး။ ဒါပေမယ့်လည်း ခက်တာက ဘယ်သူကမှ odd perfect number မရှိဘူးလို  သက်သေမပြနိုင်သေးဘူး။

ကဲ မိတ်ဆွေမြင်တဲ့အတိုင်းပါပဲ။ ကျွန်တော်တို Number theory အကြောင်း ဆွးနွေးတာ စာတမျက်နှာတောင်မရှိသေးတဲ့ အချိန်မှာကိုပဲ၊ လူ အသိဉာဏ်ရဲ့ တစ်ဖက်ကမ်း လက်ရှိကွန်ပြူတာတွေရဲ  တွက်ချက်နိုင်မှုစွမ်းရည် (computational power) ရဲ့ ဘာင် အပြင်ဖက်ရောက်သွားပြီ ဆိုတာတွေ ရမှာပါ။ ဒါကြောင့် Number Theory နဲ  ပတ်သက်ရင် “အမေး နွားကျောင်းသား၊ အဖြေ ဘုရားလောင်း” ဆိုတာလို အလွယ်တကူ မးစရာမေးခွန်းတွေ အများအပြားရှိနေပေမယ့်လည်း၊ တချို  မးခွန်းတွေအတွက် အဖြေကိုတော့ အားလုံး သဘောပေါက် နားလည်လက်ခံတဲ့ အဆင့်ထိ ရှင်းလင်းတင်ပြဖို ဆိုတာ အလှမ်းေ၀းနေဆဲ အဆင့်မှာသာ ရှိပါသေးတယ်။

ဘာကြောင့် ကိန်းသီအိုရီကို လ့လာရတာလဲ

“နေစမ်းပါဦးဗျ။ ဒီ 1, 2, 3, 4 တို ၊ 5, 7, 11, 13 တို ၊ ၁၀ ကို ၃ နဲ စား တစ်ကြွင်း တို  ဆိုတာလောက်တော့ တတန်း နှစ်တန်းခလေးတောင်သိသေးတာဗျာ။ ကျုပ်တို လို ဆာ့ဖ်၀ဲသမားတွေက ဘာဖြစ်လို ရးကြီးခွင်ကျယ်လုပ်ပြီး လ့လာနေဖို လိုတာတုန်း။ အဲဒါတွေ လ့လာတော့ လက်တွေ ဘာအကျိုးရှိတုန်း၊ အဲဒါတွေ ဘယ်နေရာမှာ အသုံးချလို ရတုန်း” လို မးမယ်ဆိုရင် အဖြေက ဒီလိုပါ။

ဒီ Number Theory ဟာ ခတ်သစ်၀ှက်စာပညာရပ် (modern cryptography) မှာ အဓိကနေရာကပါ၀င်နေတယ်။ အဲဒီ၀ှက်စာပညာရပ်ဆိုတာလည်း ဒီနေ ခတ် အွန်လိုင်းဆက်သွယ်ရေး( online communication) ရဲ့ အသက်သွေးကြောတမျှ အရေးကြီးပါတယ်။ နိုင်ငံတနိုင်ငံရဲ့ စစ်ရေး စီးပွားရေး နဲ  သတင်းထောက်လှမ်းရေး ဆိုင်ရာအချက်အလက်တွေ၊ နာက်ဆုံးပေါ် စမ်းသပ်တည်ထွင်ဆဲ သိပ္ပံနဲ  နည်းပညာပိုင်း ဆိုင်ရာအချက်အလက်တွေ စတဲ့အရေးကြီး data တွကို  ပိုင်ဖက်နိုင်ငံတွေ ရန်လိုတဲ့နိုင်ငံတွေ အန္တရာယ်ပေးနိုင်တဲ့ အဖွဲ အစည်းတွေရဲ့လက်ကို အလွယ်တကူမရောက်နိုင်အောင်၊ ကမ္ဘာလုံးဆိုင်ရာ ကုမ္ပဏီတွေ ကာ်ပိုရေးရှင်းကြီးတွေရဲ့ အရေးကြီး အချက်အလက်တွေ အီးမေးလ်တွေ ကိုတတ်နိုင်သမျှ လုံခြုံအောင်ဆောင်ရွက်ထားဖို  စတဲ့ကိစ္စတွေ၊ လူတွေရဲ့ န တဓူ၀ on-line ငွပေးငွေယူကိစ္စတွေဆောင်ရွက်တဲ့အခါ အကြွေး၀ယ်ကဒ် (credit card) လက်ငင်း၀ယ်ကဒ်(debit card) ဘဏ်စာရင်းနံပါတ်(account number) စတာတွေကို လျှို ၀ှက်လုံခြုံ အာင်လုပ်ဆောင်နိုင်ဖို စတဲ့ကိစ္စတွေမှာ ၀ှက်စာပညာဟာ မရှိမဖြစ်ပဲမဟုတ်ပါလား။ ဟာဒီ အင်တာနက်ကြီးပေါ်က ၀ှက်စာပညာရပ်တွေကိုသာဖယ်ထုတ်လိုက်မယ်ဆိုရင် လူတိုင်းလူတိုင်းရဲ့ဘ၀ဟာ ပုဂ္ဂိုလ်ရေးလွတ်လပ်ခွင့်တွေ အားလုံးဆုံးရှုံးသွားနိုင်ပြီး၊ နိုင်ငံတိုင်း နိုင်ငံတိုင်းရဲ့ အခြေအနေဟာ ဘးကင်းလုံခြုံမှုမရှိတော့တဲ့ အကာအကွယ်မဲ့ အနေအထားကို ရာက်သွားမှာပဲဖြစ်ပါတယ်။ ကုန်ကုန်ပြောရရင် ဒီNumber Theory ကို အသုံးချထားတဲ့ ၀ှက်စာရေးနည်း ၀ှက်စာပြန်ဖေါ်နည်းတွေဟာ လူသန်းပေါင်းများစွာရဲ့ အသက်ကို အဆုံးအဖြတ်ပေးခဲ့တဲ့ စစ်ပွဲတွေ အာင်နိုင်ရေးအတွက်မှာတောင် အချက်အချာနေရာက ပါ၀င်နေခဲ့ ပါ၀င်နေဆဲ နာက်နောင်လည်း ပါ၀င်နေဦးမှာ ဖစ်တယ်ဆိုတာပါပဲ။ ထင်ရှားတဲ့ သက်သေသာဓကအနေနဲ  ဒုတိယကမ္ဘာစစ်ကာလတုန်းက နာဇီဂျာမဏီရဲ့ ရတပ်က စစ်သငေ်္ဘာတွေ ရငုပ်သငေ်္ဘာတွေ အချင်းချင်းပို တဲ့ ၀ှက်စာတွေကို၊ ကွန်ပြူတာသိပ္ပံပညာရပ်ရဲ့ ဖခင်ကြီး ထားရင်း (Alan M. Turing) ဦးဆောင်တဲ့ ဗိတိသျှ code breaker အဖွဲ က ဖည်နိုင် ဖါ်နိုင်ခဲ့လို သာ အနောက်ဥရောပစစ်မျက်နှာမှာ အင်္ဂလန်က ဂျာမဏီကို ကြံ့ကြံ့ခံ တားဆီးနိုင်ခဲ့တာပါ။ အကျိုးဆက်အနေနဲ လည်း ဂျာမဏီ စစ်ရှုံးပြီး မဟာမိတ်တို  စစ်အောင်နိုင်ခဲ့တာပဲ။ အဲဒီစစ်ပွဲရဲ့ အနိုင်အရှုံးရလာဒ်ဟာ ကမ္ဘာ့လူသားတွေအပေါ် ဘယ်လောက်ထိ အကျိုးသက်ရောက်မှုရှိခဲ့တယ်ဆိုတာ သမိုင်းအခြေခံ နည်းနည်းပါးပါးလေ့လာဖူးသူတိုင်း သိကြမယ်ထင်ပါတယ်။

၀ှက်စာပညာရပ် (cryptography)

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

Plaintext message = မ၀ှက်ရ မကွယ်ရ ပုံမဖျက်ရ သးတဲ့ မူရင်းအတိုင်းရှိနေတဲ့ သတင်းစကား။ (စာတတ်တဲ့) လူတိုင်းဖတ်နိုင်တဲ့ သတင်းအချက်အလက်။

Encrypt / Encode/ Encipher = အကုန်လုံး ကြိယာပုံစံတွေပါ။ ခုနက plaintext တွကို ၀ှက်စာရေးနည်းတခုခုသုံးပြီး လျှို ၀ှက်သငေ်္ကတတွေ ကုဒ်တွေ ၀ှက်စာတွေ ဖစ်လာအောင် ပာင်းရေးတာကို ဆိုလိုတာပါ။ အဲဒီလိုရေးပြီးတဲ့အခါ ခုနက plaintext တွဟာ ခုခါမှာ encrypted message, encoded text, ciphered text စသည်ဖြင့် အဲဒီလိုခေါ်နိုင်တဲ့ ၀ှက်စာတွေ ဖစ်လာပြီပေါ့။

Decrypt / Decode/ Decipher = ဒါတွေအကုန်လုံးကလည်း ကြိယာပုံစံတွေပါ။ ကွယ်ထား ၀ှက်ထားတဲ့ ကုဒ်သငေ်္ကတတွေ ၀ှက်စာတွေကို မူရင်း plaintext အတိုင်း ပန်ဖြစ်လာအောင် ၀ှက်စာဖြည်နည်း တခုခုကို သုံးပြီး အဓိပ္ပါယ်ဖေါ်တယ် ပန်ပြောင်းရေးတယ်ပေါ့။ အပေါ်မှာတင်ပြခဲ့သလိုပဲ ဒီနေရာမှာ Decrypted, Decoded, Deciphered တို ဟာ adjective ပုံစံတွေပါ။

ဒီ Encrytption ရာ Decryption ရာပါ၀င်တဲ့ ဖစ်စဉ် (process) တွ အားလုံးကို cryptography ၀ှက်စာ(ရေးနည်း/ဖြည်နည်း)ပညာရပ်လို  ခါ်တာပါ။

ဒီနေရာမှာ နာမ် (noun) ပုံသဏ္ဌန်ရှိနေတဲ့ Cipher ဆစ်ဖာ/ဆိုက်ဖာ ဆိုတာ ၀ှက်စာရေးနည်း ၀ှက်စာကိုပြန်ဖြည်နည်းပါ။ အင်္ဂလိပ်လိုက ပိုရှင်းမယ်ထင်ပါတယ်။ “Ciphers are algorithms used to encrypt or decrypt data.” ပါ့ဗျာ။ အဲဒီလို ၀ှက်စာရေးနည်းတွေကို၊ ရှးရိုးဂန္ထ၀င်နည်း နဲ  ခတ်သစ်နည်း ဆိုပြီး ၂-အုပ်စု ခွဲနိုင်ပါတယ်။

ရှေးရိုးစနစ်မှာ

၁. Substitution ciphers (မူရင်း bit, character, block of data တွကို တခြားမတူညီတဲ့ bit, character, block of data တွနဲ  အစားထိုး လဲလှယ်လိုက်တဲ့နည်း ) နဲ

၂. Transpositions ciphers (မူရင်း plain text ထဲမှာပါတဲ့ စာလုံး(letter)တွေကို အထားအသိုအသစ်ဖြစ်သွားအောင် ရွှ (shifted) တဲ့နည်း) ဆိုပြီး ခွဲခြားနိုင်ပါတယ်။

တခါ ခတ်သစ်၀ှက်စာရေးနည်းတွေကိုတော့

၁. သုံးတဲ့ key ပါ်မူတည်တဲ့နည်း (အဲဒီမှာမှ private key နဲ  public key ဆိုပြီး နှစ်မျိုးထပ်ခွဲပါတယ်) နဲ

၂. ပို တဲ့ data ပါ်မူတည်တဲ့နည်း (Block cipher နဲ  Stream cipher) ဆိုပြီး ခွဲခြားနိုင်ပါတယ်။ ပုံမှာကြည့်ပါ။



Fig: Types of classical ciphers and modern ciphers

ဆီဇာရဲ့ ၀ှက်စာ (Caesar’s Cipher)

သမိုင်းတစ်လျောက် ရှးအကျဆုံး၀ှက်စာရေးနည်းတွေထဲက တခုကတော့ ရာမဧကရာဇ် ဂျူးလိယက်ဆီဇာ(Julius Caesar) သုံးခဲ့တဲ့နည်းပါ။ သူ ရဲ့စနစ်က အင်္ဂလိပ် အက္ခရာစဉ်အတိုင်း စာလုံးတွေကို သတ်မှတ်ထားတဲ့ နရာ ကိန်းဂဏန်းတန်ဘိုးတခုအတိုင်း ဘယ်ဖက် သို မဟုတ် ညာဖက်ကို ရွှ လိုက်တာပါ။ ဆိုလိုတာက မူရင်းစာလုံးကို၊ ရွှ လို ရလာတဲ့ စာလုံးနဲ  အစားထိုးလိုက်တဲ့အခါ ၀ှက်စာသဘောမျိုးရလာတာပါပဲ။ ဥပမာ မူရင်းစာလုံးက DEMOCRITUS၊ ၀ှက်စာဖြစ်ဖို  ညာဖက်ကိုသုံးပေါင်းထည့်မယ် ညာဖက်ကိုသုံးနေရာရွှေ မယ် ဆိုပါတော့။ ဒါဆိုရင် D က G ဖစ်သွားမယ်၊ E က H စသည်ဖြင့် ဖစ်လာမှာပေါ့။ အဲဒီလိုနည်းနဲ  DEMOCRITUS ဆိုတဲ့ မူရင်းစာအတွက် GHPRFULWXV ဆိုတဲ့ ၀ှက်စာတခု ရလာပါပြီ။ ဘယ်ဖက်ကို ရွှ မယ်ဆိုရင်လည်းရပါတယ်။ ဥပမာဘယ်ဖက်ကို သုံးနေရာရွှေ မယ်ဆိုပါတော့ ဒါဆိုရင် E က B ဖစ်လာမယ်၊ A က X ဖစ်လာမယ်..စသည်ဖြင့်ပေါ့..ပုံမှာကြည့်လိုက်ပါ။ ပိုရှင်းသွားမယ်ထင်ပါတယ်။



Fig: ဘယ်ဖက်သို  သုံးနေရာရွှေ လျှင်ဖြစ်လာမည့် ဆီဇာ၏၀ှက်စာ

ဒါပေမယ့်လည်း ၀ှက်စာတခုရဲ့တန်ဘိုးဟာ သက်ဆိုင်သူတွေကလွဲရင် တခြား ကြားဖြတ်ဖေါက်ထွင်းခိုးယူသူတွေ အနေနဲ  အလွယ်တကူ ပန်ဖြည်နိုင်ခြင်း ရှိမရှိ၊ ၀ှက်စာရဲ့ အဓိပ္ပါယ်ကို ပန်ဖေါ်နိုင်ခြင်း ရှိမရှိဆိုတဲ့ အပေါ် မူတည်ပါတယ်။ ဆီဇာရဲ့၀ှက်စာကတော့ မိတ်ဆွေမြင်တဲ့အတိုင်းပါပဲ။ အများဆုံး ဖစ်နိုင်ချေအဖြေ သို မဟုတ် ရွှ နည်းဟာ ၂၅ မျိုးပဲရှိတဲ့အတွက် အချိန်နည်းနည်းယူလိုက်မယ်ဆိုရင် ဘယ်သူမဆို အလွယ်တကူ ဖည်နိုင်ပါတယ်။

အစားထိုး၀ှက်စာ (Substitution Cipher)

ဒီနည်းကတော့ မူရင်းစာလုံးတလုံးချင်းစီကို ကြိုတင် သတ်မှတ်ထားပြီးဖြစ်တဲ့ တခြား ကျပမ်းစာလုံးတလုံးချင်းစီနဲ  အစားထိုးလဲလှယ်တဲ့နည်းပါ။ ဥပမာဗျာ A ဆိုရင် X, B ဆိုရင် L, C ဆိုရင် S, စသည်ဖြင့် ကိုယ်ကြိုက်သလို သတ်မှတ်ထားလို ရပါတယ်။ ဒါဟာ ဆီဇာရဲ့၀ှက်စာနဲ  အဓိကကွာခြားတဲ့အချက်ပါ။ ဆီဇာရဲ့နည်းမှာက စာလုံးတလုံးကို ကြိုတင်သတ်မှတ်ထားတဲ့အတိုင်းပဲ ပုံသေ လဲလှယ်သွားတာပါ။ ဥပမာ မူရင်းစာလုံးကို တတိယမြောက်စာလုံးနဲ အစားထိုးမယ်ဆိုရင် A က D ဖစ်လာမယ်။ B က E ဖစ်လာမယ်။ C က F ဖစ်လာမယ်။ စသည်ဖြင့်ပေါ့။ ဒါမှမဟုတ် ပဉ္စမမြောက်စာလုံးနဲ အစားထိုးမယ်ဆိုရင် A က F ဖစ်သွားမယ်။ B က G ဖစ်သွားမယ်။ ဒါပါပဲ။ ဒီအစားထိုး ၀ှက်စာမှာကျတော့ စာလုံးတစ်လုံးချင်းစီအတွက် ကိုယ့်စိတ်ကြိုက် တခြား ကျပမ်း စာလုံးတလုံးကို သီးသန်  သတ်မှတ်ထားတဲ့နည်းပါ။ ဒီနည်းက ဆီဇာနည်းလောက်ဖြည်ရတာမလွယ်ပေမယ့် သင်္ချာပညာရှင်နဲ တွ တာ့လည်း ဖုံးသမျှပေါ်ရ တာပါပဲ။ ဒီ အစားထိုး၀ှက်စာကို ပန်ဖေါ်ဖို  ကြိမ်နှုန်းဆန်းစစ်လေ့လာချက် (Frequency Analysis) နည်းကို သုံးနိုင်ပါတယ်။ Frequency Analysis ဆိုတဲ့ စကားလုံးအတွက် ဘာသာပြန်လေးရေးပြထားရုံနဲ တာ့ ဘယ်လိုဖေါ်ပါလိမ်  ဆိုတာ ဘယ်မြင်သာပါ့မလဲဗျာ။ ဒါပေမယ့် မိတ်ဆွေတို ကို သင်္ချာပညာရပ်ဆိုင်ရာတွေနဲ လည်း မလေးလံစေချင်ဘူး၊ ရှင်းမပြလို လည်း မပြည့်စုံဘူး ဆိုတော့ လက်တွေ ဆန်တဲ့ ဥပမာလေးတခုပေးပါမယ်။ မိတ်ဆွေ ကြိုက်တဲ့ စာတအုပ်ယူလိုက် (တအုပ်လုံးတော့မလိုပါဘူး အခန်းတခန်းစာ ဒါမှမဟုတ်လဲ စာလေးငါးမျက်နှာစာဆိုရပါပြီ) အဲဒီစာအုပ်မှာ A ဆိုတဲ့စာလုံး စုစုပေါင်း ဘယ်နှစ်လုံးပါသလဲ၊ B ဘယ်နှစ်လုံးပါသလဲ၊ C ဘယ်နှစ်လုံးပါသလဲ စသည်ဖြင့် Z အထိပေါ့ဗျာ ရတွက်ကြည့်ပြီးမှတ်ထားလိုက်။ အခုပြောတဲ့နည်းက manual လုပ်မယ်ဆိုရင်တော့ ခက်ခဲလက်၀င် အချိန်ကုန်ပေမယ့် ကွန်ပြူတာမှာ ပရိုဂရမ်ရေးပြီးခိုင်းလိုက်ရင်တော့ သိတဲ့အတိုင်း စက္ကန် ပိုင်းပေါ့။ အဲဒီနည်းနဲ  မိတ်ဆွေဟာ အကြိမ်အရေအတွက် အများဆုံးပါတဲ့စာလုံးကနေ အနည်းဆုံးပါတဲ့စာလုံးအထိ၊ A ကနေ Z အထိ စာတလုံးချင်းစီရဲ့ ကြိမ်နှုန်း(Frequency) တွရလာပါပြီ။ ဒါဆိုရှင်းပါပြီ။ ရိုးရိုးစာမှာ E က အကြိမ်အရေအတွက်အများဆုံးပါနေပြီး အစားထိုး၀ှက်စာမှာ X ဆိုတဲ့စာလုံးက အကြိမ်အရေအတွက် အများဆုံးပါနေတယ်ဆိုပါတော့။ ကဲ ဒါဆိုရင် မိတ်ဆွေဘာလုပ်သင့်တယ် ထင်ပါသလဲ။ တွ သမျှ X ကို E နဲ  အစားထိုးပြီးဖတ်ကြည့်ပေါ့ဗျာ။ ဒါပါပဲ။ ဒီ Frequency Analysis နည်းဟာ အစားထိုး၀ှက်စာတွေဖေါ်တဲ့နေရာမှာ အလွန်ထိရောက်တဲ့ နည်းစနစ်တခုဖြစ်ပါတယ်။

Polyalphabetic Cipher (စကားစုတစုကို key အဖြစ်သုံးတဲ့ ၀ှက်စာ)

စကားစုတစု စကားလုံးတလုံးကို လျှို ၀ှက် key အဖြစ်သုံးပြီးရေးတဲ့ ၀ှက်စာရေးနည်းကို၊ ၁၅ ရာစု အလယ်ပိုင်းလောက်တုန်းကတည်းက စတင်အသုံးပြုခဲ့ပြီး ဒုတိယကမ္ဘာစစ်အတွင်းကဆိုရင် ပိုမိုရှုပ်ထွေးတဲ့ အနစ်ဂမာ (Enigma) rotar machines  တွမှာပါ အသုံးချခဲ့ပါတယ်။ ဒီ Polyalphabetic Cipher နည်းက ၀ှက်စာရေးဖို အတွက် plaintext ရဲ့ အက္ခရာတွေကို ပုံသေရွှေ တဲ့နည်းမသုံးပဲ၊ အက္ခရာအများကြီးပါ၀င်တဲ့ ကိုယ့်ရဲ့ ကိုယ်ပိုင် လျှို ၀ှက်စကားလုံးတလုံးရဲ့ အထားအသို အနေအထား တန်ဘိုးအတိုင်း လိုအပ်ရင် လိုအပ်သလို ထပ်ကာ ထပ်ကာ ရွှ တဲ့နည်းဖြစ်ပါတယ်။ ဥပမာဗျာ “Meet me at elephant lake” ဆိုတဲ့ plaintext ကို ၀ှက်စာဖြစ်အောင်ရေးချင်တယ်။ ၀ှက်စာအတွက်သုံးမယ့် လျှို ၀ှက် ကီး စကားလုံးက ‘SNAKE’ ဆိုပါတော့။ A to Z အက္ခရာစဉ်အတိုင်းဆိုရင်

S က နံပါတ် 19

N က နံပါတ် 14

A က နံပါတ် 1

K က နံပါတ် 11

E က နံပါတ် 5

ဒါဆိုရင် ကျွန်တော်တို ၀ှက်စာဖြစ်အောင်ရေးမယ့် plaintext ရဲ့

ပထမဆုံးအက္ခရာကို (ညာဖက်ကိုပေါ့ဗျာ) ၁၉ နရာ ရွှ (M က F ဖစ်လာမယ်)

ဒုတိယ အက္ခရာကို ၁၄ နရာရွှေ (E က S ဖစ်လာမယ် )

တတိယ အက္ခရာကို ၁ နရာရွှေ (ဒုတိယ E က F ဖစ်လာမယ်)

စတုတ္ထ အက္ခရာကို ၁၁ နရာရွှေ (T က E ဖစ်လာမယ်)

ပဉ္စမ အက္ခရာကို ၅ နရာရွှေ  (M က R ဖစ်လာမယ်)။

ပြီးရင် SNAKE ရဲ့ စကားလုံးအစကပြန်စပြီး plaintext ရဲ့ ဆဌမ အက္ခရာကို ၁၉ နရာ၊ သတ္တမ အက္ခရာကို ၁၄ နရာ၊ အဌမအက္ခရာကို ၁ နရာ.စသည့်ဖြင့် ..စသည်ဖြင့် ကျန်တဲ့ plaintext အက္ခရာတွေကို SNAKE အစီအစဉ်အတိုင်း ထပ်ကာ ထပ်ကာ ရွှ သွားရင် ပုံမှာပြထားသလို “Meet me at elephant lake” ဆိုတဲ့ plaintext အတွက် “FSFE RX OU PQXDILSM ZBVJ” ဆိုတဲ့ ၀ှက်စာတခု ရလာပြီပေါ့။



Fig: Polyalphabetic Cipher နည်းဖြင့်ရေးသော ၀ှက်စာ

ကဲမိတ်ဆွေတို မင်တဲ့အတိုင်းပါပဲ။ ၀ှက်စာအနေနဲ ပာင်းရေးလိုက်တော့ E ဆိုတဲ့ plaintext အက္ခရာတလုံးတည်းကိုပဲ S, F, X, P, J စသည်ဖြင့် မတူညီတဲ့ ciphered text တွ အဖြစ်တွေ ရမှာပါ။ ဒါကြောင့် ဒီ Polyalphabetic Cipher နည်းမှာတော့ Frequency Analysis နည်းဟာ လုံး၀နီးပါး အသုံးမ၀င်တဲ့ အခြေအနေကို ဆိုက်ရောက်သွားတာ တွ ရမှာဖြစ်ပါတယ်။ plaintext ထဲမှာ E ကို ခာက်ကြိမ်အထိ သုံးထားပေးမယ့် ၀ှက်စာမှာတော့ အဲဒီလောက် အကြိမ်ရေများတဲ့ ဘယ်အက္ခရာကိုမှ တွ ရမှာမဟုတ်ပါဘူး။ နာက်ဆုံး ၀ှက်စာမှာ တူညီတဲ့ အပူးအက္ခရာတွေ ပါလာစေဦးတော့ မူရင်း plaintext မှာ အဲဒီလိုအပူးအက္ခရာ ဘယ်လိုမှ ပါနိုင်ဖို အကြောင်းရှိမှာမဟုတ်ပါဘူး။ ကိုယ့်ရဲ့ ၀ှက်စာကီးစကားလုံးက ရှည်ရင်ရှည်သလို ၀ှက်စာကိုပြန်ဖေါ်ရတာ ခက်ခဲမှာဖြစ်ပါတယ်။ ဒါဆိုရင်မိတ်ဆွေကလည်း “ဒီ နည်းက ဖည်လို မရဘူးလားဗျ” မးမှာပဲ။ အဖြေကလည်း “ဖြည်နည်းရှိပါတယ်” ဆိုတာပါပဲ။ ဒါပေမယ့်လည်း အဆင့် ၇-ဆင့် ပါတဲ့ အဲဒီဖြည်နည်းကို အချက်အလက်တွေ များပြားရှုပ်ထွေးသွားမှာစိုးတဲ့အတွက် ဒီဆောင်းပါးမှာ မတင်ပြတော့ပါဘူး။ ၀ီကီပီးဒီးယား မှာပဲဖြစ်ဖြစ် တခြားပညာရေးဆိုင်ရာ ဆိုဒ်တွေမှာပဲဖြစ်ဖြစ် ကျွန်တော့ရဲ့ ဒီဆောင်းပါးထက် အများကြီး ပိုမိုကောင်းမွန်တဲ့၊ အသေးစိပ်ရှင်းလင်းထားတဲ့ အချက်အလက်တွေ မိတ်ဆွေတို  အလွယ်တကူတွေ နိုင်ပါတယ်။ စိတ်၀င်စားရင် ကိုယ်တိုင်သာ ဆက်လက်လေ့လာလိုက်ကြပါလို  လးလေးစားစား ပန်ကြားလိုပါတယ်။ “ဒီလူကကွာ ဟိုဟာလည်း ကိုယ်တိုင် ဆက်လေ့လာလိုက်ပါ၊ ဒီဟာလည်း ကိုယ်တိုင်ဆက်လက်လေ့လာလိုက်ပါနဲ ..ဘာမှလည်း ပည့်စုံအောင် ဆုံးခန်းတိုင်အောင် သသေချာချာ မရှင်းလင်းဘူး ..မဆွေးနွေးဘူး” လို များ မိတ်ဆွေတို  ထင်မလားမသိဘူး။ တကယ်တန်းကျတော့ ဘယ်ပညာရပ်မှာမဆို စိတ်၀င်တစား ကိုယ်တိုင်လေ့လာ သင်ယူတာကသာ တတ်မြောက် ကျွမ်းကျင် ပိုင်နိုင်တဲ့ အခြေအနေအဆင့်အတန်းကို ရာက်ရှိစေမှာမို လို ပါ။ ပီးတော့လည်း “A good learner never waits to be taught” ဆိုတဲ့စကားလိုပေါ့။ “တကယ့် လ့လာသင်ယူသူကောင်းတရောက်ဟာ သူများသင်ပေးတာကို ဘယ်တော့မှ စာင့်နေမှာမဟုတ်ဘူး” ဆိုတာလိုပါပဲ။ လမ်းစလေးတွေ ရှိနေရုံ တွ နရုံ နဲ  ကိုယ့်ရဲ့ သိလိုစိတ် တတ်လိုစိတ်ဟာ ကိုယ့်ကို ကျယ်ပြန် တဲ့ ပညာရပ်နယ်ပယ်ရှိရာအထိ ရာက်မှန်းမသိရောက်သွားအောင် ဆွဲခေါ်သွားနိုင်ပါတယ်။ အဲဒီလို ဖစ်စေချင်လို ပါ။

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

တကြိမ်ရေးနည်း၀ှက်စာ (One-Time Pad)

ဒီလိုနဲ ပဲ ၁၉၂၀ လာက်မှာ အမေရိကန် စီးပွားရေးသမားတဦးဖြစ်တဲ့ ဂဲလ်ဘတ် ဆဲန်ဖို  ဗာနမ် (Gilbert Sandford Vernam) က ဒီနေ ခတ်မှာ one-time pad လို  ထင်ရှားလူသိများတဲ့ ၀ှက်စာရေးနည်းတရပ်ကို ဖါ်ထုတ်တင်ပြခဲ့ပါတယ်။ သူ ရဲ့ အဲဒီ one-time pad ၀ှက်စာစနစ်မှာ

-plaintext message ကို binary string တစ်ခု M အဖြစ် ကိုယ်စားပြုဖေါ်ပြလိုက်တယ်။

-ပြီးရင် အဲဒီ M နဲ  sizeခြင်း အလျားခြင်း lengthခြင်း တူညီတဲ့ နာက်ထပ် ကျပမ်း binary string ကီးတခု K ကို သတ်မှတ်လိုက်တယ်။

-ပြီးရင် ခုနက M ကို K နဲ  XOR (Exclusive OR - တူရင်ဇီးရိုး မတူရင်၀မ်း) operation လုပ်လိုက်တယ်။

-အဲဒီအခါမှာ ၀ှက်စာ (ciphered text) C ကို ရရှိလာပါတယ်။ ပုံမှာကြည့်ပါ။

M : 1 1 1 0 1 0 1 1 0 0 0 1

K : 0 1 1 0 1 1 1 0 1 0 1 1

--------------------------------

C : 1 0 0 0 0 1 0 1 1 0 1 0

(FIG: Encryption by XOR-ing M with K to get C)

ဒီနေရာမှာ ကျွန်တော်တို အနေနဲ  သတင်းစကားကို လက်ခံမယ့်သူဟာ ယုံကြည်စိတ်ချရတဲ့သူလို  ယူဆပြီးဖြစ်တဲ့အတွက် လျှို ၀ှက်ကီး K ကိုလည်း ကြိုတင် မျှေ၀ပေးထားပြီးဖြစ်တယ်လို ယူဆထားပါတယ်။ ဒါကြောင့် လက်ခံသူအနေနဲ  ရလာတဲ့ ၀ှက်စာ C ကို၊ သူ ကိုမျှေ၀ပေးထားပြီးသားကီး K နဲ  နာက်ထပ် XOR operation တခုထပ်လုပ်လိုက်ရင် မူရင်းသတင်းစကား M ကို အလွယ်တကူ ပန်ရနိုင်ပါတယ်။ ပုံမှာကြည့်ပါဦး။

C : 1 0 0 0 0 1 0 1 1 0 1 0

K : 0 1 1 0 1 1 1 0 1 0 1 1

--------------------------------

M : 1 1 1 0 1 0 1 1 0 0 0 1

(FIG: Decryption by XOR-ing C with K to get M)

ဒီ one-time pad ရဲ့ အားသာချက်ကတော့ မိတ်ဆွေတို မင်တဲ့အတိုင်းပဲ ကြားဖြတ်ဖေါက်ထွင်းခိုးယူသူအနေနဲ  Key - K ကို သိမထားဘူးဆိုရင် ၀ှက်စာဟာ သူ အတွက် လုံး၀အဓိပ္ပါယ်မရှိတဲ့ အဓိပ္ပါယ်ဖေါ်မရတဲ့ ကျပမ်းစာသားကြီးတစ်ခုသာ ဖစ်နေမှာပါ။ ဘာလို တုန်းဆိုတော့ ဘယ်လို bit string တစ်ခုကိုမဆို တခြားကျပမ်း bit string တစ်ခုနဲ  XOR လုပ်ထားရင် ရလာတဲ့ရလာဒ်ကလည်း ကျပမ်း bit string တစ်ခုသာဖြစ်နေမှာမို လို ပါပဲ။ ဒီ ၀ှက်စာကို ဖည်ဖို လည်း ဘယ်လိုမှ ခန် မှန်းဖို မဖြစ်နိုင်ပါဘူး။ဘာလို တုန်းဆိုတော့ ဘယ်လို ကျပမ်း binary string ကို မဆို Key အဖြစ်သုံးနိုင်တာကိုး။

ဒီအချက်တွေကြောင့်ပဲ one-time pad စနစ်ဟာ ဘယ်လိုမှ မချိုးဖျက်နိုင်တဲ့ ၀ှက်စာစနစ်တခုအဖြစ် သတ်မှတ်ခြင်းခံခဲ့ရပါတယ်။ ဒါပေမယ့် မှန်မှန်ကန်ကန် သုံးမှသာ မချိုးဖျက်နိုင်တာဖြစ်ပြီး သူ ရဲ့ နာမည် one-time pad ဆိုတဲ့အတိုင်း ၀ှက်စာတခုအတွက် Key တစ်ခုကို တစ်ကြိမ်တိတိသာသုံးခွင့်ရှိတာဖြစ်ပါတယ်။ တစ်ကြိမ်ထက်ပိုသုံးမိရင်တော့ one-time pad ၀ှက်စာတွေဟာ လုံခြုံမှုမရှိတော့ပဲ သူ ရဲ့ ခိုင်ခံ့မှုစည်းလည်း ကျိုးပျက်သွားပါပြီ။ ဘာလို တုန်းဆိုတော့ ကီးကို တကြိမ်ထက်ပိုသုံးမိရင် ၀ှက်စာမှာ သုံးတဲ့ Key – K ကို ဖါက်ထွင်းခိုးယူသူတွေအနေနဲ  အလွယ်တကူ တွက်ချက်ရယူနိုင်စွမ်း ရှိသွားလို ပါ့။ တွက်နည်းကလည်း အလွန်လွယ်ကူတဲ့ ကိန်းသီအိုရီရဲ့ အခြေခံ မှာပါတဲ့ အကြီးဆုံးဘုံဆခွဲကိန်း ( Greatest Common Divisor) ရှာတဲ့နည်းအတိုင်း တွက်ချက်ရှာဖွေလိုက်တာပါပဲ။ ဆိုလိုတာကဗျာ

C1 = M1 * K

C2 = M2 * K ဆိုရင်

C1 ရာ C2 မှာ ဘုံပါနေတဲ့ K ကို အလွယ်တကူ ရှာနိုင်သလိုမျိုးပေါ့။ အဲဒီတော့ အနှစ်ချုပ်လိုက်ရင်

-သတင်းပို မယ့်သူနဲ  လက်ခံမယ့်သူဟာ လျှို ၀ှက်ကီးကို ကြိုတင်သတ်မှတ် ညှိနှိုင်းထားဖို  အသိပေးထားဖို လိုတဲ့အချက်။ [သတင်းအချက်အလက်တခုအတွက် ကီးတခု အမြဲကြိုတင်ပေးပို ထားဖို ဆိုတာ လက်တွေ မှာ အတော်လေး ခက်ခဲပါတယ်။]

-key ဟာ ပို မယ့် message နဲ  size တူရမယ့်အချက် ။ [အကျိုးဆက်အနေနဲ  သတင်းစကား ရှည်ရှည်ပို ချင်တဲ့အခါ key ရွးချယ်ရတာနဲ  တရောက်ကိုတရောက် ကြိုတင်ပြီး ကီးပေးပို ရတာ ခက်ခဲလာပါတယ်။]

-တစ်ကြိမ်သုံးပြီးသားကီးကို နာက်ထပ်ဘယ်တော့မှ ပန်သုံးမရတော့တဲ့အချက်။

စတာတွေဟာ one-time pad ရဲ့ အဓိကအားနည်းချက်တွေပဲဖြစ်ပါတယ်။





ကွန်ပြူတာသိပ္ပံ ကိန်းသီအိုရီနှင့် ၀ှက်စာပညာ (အပိုင်း-၂)

ခေတ်သစ်၀ှက်စာစနစ်များ

ခေတ်သစ်၀ှက်စာပညာရပ်မှာ သူတို ရဲ့ လျှို ၀ှက်ကီး key အသုံးပြုပုံအပေါ် မူတည်ပြီးတော့ အဓိကအုပ်စုကြီးသုံးစု ခွဲထားပါတယ်။

1. Symmetric Encryption ၀ှက်စာရေးဖို အတွက်ရော ၀ှက်စာကိုဖြည်ဖို အတွက်ပါ တူညီတဲ့ Key တခုတည်းကိုပဲ သုံးတယ်။ ဆိုလိုတာက shared-key, secret-key နဲ  private-key အားလုံးအတွက် တူညီတဲ့ Key တခုတည်းကိုပဲ အသုံးပြုတဲ့ စနစ်မျိုးကိုခေါ်တာ။ ဥပမာအနေနဲ ကတော့ မိတ်ဆွေတို  လ့လာခဲ့တဲ့ one-time pad လို စနစ်မျိုးမှာ encrypt လုပ်ဖို ရာ decrypt လုပ်ဖို ပါ တူညီတဲ့ ကျပမ်း binary string key တခုတည်းကိုပဲ သုံးစွဲသလိုမျိုးပေါ့။

2. Asymmetric Encryption ၀ှက်စာရေးဖို အတွက်က key တခု၊ ၀ှက်စာကိုဖြည်ဖို အတွက်က တခြားသီးသန်  key တခု၊ အဲဒီလို မတူညီတဲ့ Key တွကိုသုံးတယ်ဆိုရင် Asymmetric Encryption(public-key) စနစ်ဖြစ်တယ်။ အဲဒီလို မတူညီတဲ့ key တွကို public-key နဲ  private-key လို ခါ်တယ်။ ဒီအတွက် ဥပမာတွေကတော့ ကျွန်တော်တို  ဆက်လက်လေ့လာမယ့် ခတ်သစ်၀ှက်စာရေးနည်း တွမှာ အများအပြား တွ ရမှာဖြစ်ပါတယ်။

3. Hash Function ၀ှက်စာရေးဖို အတွက်ရော ဖည်ဖို အတွက်ပါ ဘာ key ကိုမှ မသုံးဘူး။ ၀ှက်စာရဖို အတွက် သူ ရဲ့ သီးသန်  လုပ်ဆောင်ချက် function ကိုသာသုံးတယ်။ ဒီ Hash Function ကို message digest (MD) သို မဟုတ် one-way encryption, one-way bash function စသည်ဖြင့့်လည်းခေါ်တယ်။

ဒီဆောင်းပါးမှာတော့ ကျွန်တော်တို ဟာ မာက်များလှစွာသော ခတ်သစ်၀ှက်စာရေးနည်းတွေထဲကမှ ထင်ရှားတဲ့ တချို ကိုပဲ အကြမ်းဖျဉ်းလောက် ဆွးနွေးတင်ပြမှာဖြစ်ပါတယ်။

Advanced Encryption Standard (AES)

AES ဟာ Symmetric-key encryption စနစ်တခုဖြစ်ပြီး အမေရိကန်အစိုးရကိုယ်တိုင် လက်ခံကျင့်သုံးနေတဲ့ ၀ှက်စာရေးနညး်စနစ်တခုဖြစ်ပါတယ်။ AES ဟာ ထပ်တလဲလဲ လည်ပတ်သုံးစွဲရတဲ့ iterated block cipher အမျိုးအစားပါ။ ဆိုလိုတာက ကြိုတင်သတ်မှတ်ထားပြီးဖြစ်တဲ့ တူညီတဲ့ လုပ်ဆောင်မှုအဆင့်တွေကိုပဲ ကြိမ်ဖန်များစွာ ထပ်မံလုပ်ဆောင်စေတဲ့ နည်းစနစ်ကို အသုံးပြုထားတာပါ။ သူ အသုံးပြုတဲ့ data ရဲ့ အပိုင်းတခုချင်းစီ (block) ရဲ့ အရွယ်အစား (size) ဟာ ၁၂၈-bit ရှိပါတယ်။ သုံးမယ့် key ရဲ့ size အနေနဲ  ကတော့ ၁၂၈-bit၊ ၁၉၂-bit နဲ  ၂၅၆-bit ဆိုပြီး ရှိပါတယ်။ AES-128, AES-192 နဲ  AES-256 လို  အသီးသီးခေါ်တာပေါ့ဗျာ။ သူ ရဲ့ လုပ်ဆောင်ပုံကို ပိုမိုသဘောပေါက်နားလည်ဖို  AES ရဲ့ Pseudo Code ကို နည်းနည်းလောက် လ့လာလိုက်ပါဦး။



Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)] )

    BEGIN

        byte state[4, Nb]

        state = in

        AddRoundKey(state, w)

   

            FOR round = 1 step 1 to Nr-1

                SubBytes(state)

                ShiftRows(state)

                MixColumns(state)

                AddRoundKey(state, w+round*Nb)

            ENDFOR



        SubBytes(state)

        ShiftRows(state)

        AddRoundKey(state, w+Nr*Nb)

        out = state

    END



Data Encryption Standard (DES)

DES ဟာ အမေရိကန်ဗဟိုအစိုးရရဲ့ သတင်းအချက်အလက် သုံးစွဲမှုဆိုင်ရာ စံ (Federal Information Processing Standard - FIPS) အမှတ် ၄၆ - ၃ ရဲ့ အမည်ပဲဖြစ်ပါတယ်။ အဲဒီစံမှာ data အချက်အလက်တွေကို ဘယ်လို encrypt လုပ်ရမယ်ဆိုတဲ့ Data Encrytion Algorithm (DEA) တခုကို တခါတည်း သတ်မှတ်ပေးထားပြီး ဖစ်ပါတယ်။ အဲဒီ DEA ဟာ Symmetric ၀ှက်စာအမျိုးအစားတခုဖြစ်ပြီး မူလရည်ရွယ်ချက်အနေနဲ  hardware တွပေါ်မှာ encrypt လုပ်ဖို  ဒီဇိုင်းဆွဲဖန်တီးထားတာဖြစ်ပါတယ်။ ဆိုလိုတာက ကွန်ပြူတာသုံးစွဲသူတရောက်အနေနဲ  သူ စိတ်ကြိုက် data တွကို hard-disk ပါ်မှာ encrypt လုပ်ဖို အတွက်လည်း ဒီ စနစ်ကို သုံးနိုင်တယ်လို ပာချင်တာပါ။ ဒါကို single-user-encryption လို  ခါ်တာပေါ့ဗျာ။

Digital Signature Algorithm

DSA ဟာ အမေရိကန်ဗဟိုအစိုးရရဲ့ သတင်းအချက်အလက် သုံးစွဲမှုဆိုင်ရာ စံ (U.S Federal Information Processing Standard - FIPS) အမှတ် 186 အနေနဲ  သုံးစွဲနေတဲ့ Digital Signature Standard (DSS) တခု ဖစ်ပါတယ်။ ဒီစနစ်ဟာ အစိုးရတရပ်ရဲ့ ပထမဆုံး တရား၀င်အသိအမှတ်ပြု သုံးစွဲခံရတဲ့ Ditital Signature အစီအစဉ် စနစ် တခုလည်းဖြစ်ပါတယ်။ Digital Signature Algorithm မှာ Asymmetric cryptography နည်းစနစ်ကို အသုံးပြုထားပြီး၊ signature တစ်ခုရဲ့ လုံခြုံမှုဆိုင်ရာ ဂုဏ်သတ္တိတွေကို အရေးပုံသဏ္ဌာန်ထက် ဒစ်ဂျစ်တယ်ပုံသဏ္ဌာန်အဖြစ်သာ ပုံဖေါ်တဲ့နည်းစနစ်ဖြစ်ပါတယ်။ ဒီစနစ်မှာ ပးပို သူက သတင်းစကားကို တရား၀င်ဖြစ်အောင်လက်မှတ်ထိုးဖို  (sign လုပ်ဖို ) private key ကို အသုံးပြုပြီး၊ လက်ခံရရှိသူက အဲဒီလက်မှတ်ထိုးမှန်မမှန် စစ်ဆေးဖို ကိုတော့ public key ကို အသုံးပြုပါတယ်။ ဒီ DS algorithm ဟာ လုံခြုံမှု မင့်မြင့်မားမားလိုအပ်တဲ့ အီးမေးလ် ပို ဆာင်ဆက်သွယ်မှုတွေအတွက် မရှိမဖြစ် နည်းပညာတရပ်ပေါ့။

ဒါ့အပြင် တခြားထင်ရှားအသုံးများတဲ့ RC4, RC5, RC6 Algorithms, Message Digest (One-Way Bash) Functions, Message Digest 5 (MD5), Secure Hashing Algorithm (SHA1, SHA2 နဲ  လက်ရှိ သုတေသနပြုဆောင်ရွက်နေဆဲ SHA3) စတာတွေ အပြင် Secure Shell(SS) စတဲ့ ၀ှက်စာရေးနည်း၊ ၀ှက်စာပို ဆာင်နည်း စနစ်တွေ အများအပြားကျန်ပါသေးတယ်။ ဒါပေမယ့် ဒီဆောင်းပါးမှာတော့ ကျွန်တော်တို ဟာ private key နဲ  public key သဘောတရားကို တတ်နိုင်သမျှနားလည်သဘောပေါက်စေဖို နဲ  ကိန်းသီအိုရီ၊ အကြွင်းသင်္ချာနဲ သုဒ္ဓကိန်းတွေကို ခတ်သစ်၀ှက်စာရေးနည်းတွေမှာ ဘယ်လိုအသုံးချတယ်ဆိုတဲ့ အပိုင်းကိုသာ ဦးစားပေး ဆက်လက်ဆွေးနွေးသွားမှာဖြစ်ပါတယ်။

Public-key cryptography နှင့် စိတ်ကူးပြဿနာ

ဆိုပါစို  အ ကနေ ဘီ ကို ငွထည့်ထားတဲ့ သတ္တာတလုံး ပို ချင်တယ်။ လမ်းမှာ ဘယ်သူကမှ ဖွင့်ပြီးမယူစေချင်ဘူး။ ရှင်းပါတယ် သတ္တာကို သာ့ခတ်ပြီးပို ပါ့။ ဒီနေရာမှာ ကြားဖြတ်နဲနဲပြောရရင်တော့ သာ့ဆိုတာလည်း Number Theory ကို အခြေခံထားတာပဲဗျ။ သာ့တံ(key) တစ်ခုတည်းနဲ  သာ့ခလောက်(lock) နှစ်လုံးကို ဖွင့်လို မရတဲ့ အကြောင်းက၊ သာ့တစ်လုံးစီကို သီးသန် ဖစ်တဲ့ မတူညီတဲ့ နံပါတ်တစ်ခုစီပေါ်မှာ အခြေခံတည်ဆောက်ထားတာကိုး။ ဆိုလိုတာက သာ့ အရဲ့ နံပါတ်ကို 30 လို သတ်မှတ်ထားရင် ကိန်းသီအိုရီအရ 30 ရဖို  2*3*5 မှာက်မှရမယ်။ အထားအသိုတော့ ပာင်းနိုင်တာပေါ့ဗျာ။ ဒါကတော့ မိတ်ဆွေတို အနေနဲ  အာ်တို အန်ဒါစတွတ်ပါ။ တခြား prime number အတွဲမြှောက်ခြင်းနဲ  လုံး၀ ၃၀ မရနိုင်ဘူး။ အဲဒီလို နည်းနဲ  သာ့တလုံးချင်းစီကို လုံး၀သီးသန် (unique - ယူးနစ်ခ်) ဖစ်အောင် တည်ဆောက်ထားတာပါ။

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

အ က ပို မယ့်သေတ္တာကို သူ သာ့နဲ သူခတ်။ ဘီ ကို ပို ။

ဘီက သူ ဆီရောက်လာတဲ သတ္တာကို တခြား သူ ကိုယ်ပိုင်သော့ နဲ  ထပ်ခတ်။ (သေတ္တာက သာ့ နှစ်လုံး ခတ်လို ရတယ်ပေါ့ဗျာ။) ပီးရင် အ ဆီကို ပန်ပို ။

အက သူ ဆီပြန်ရောက်လာတဲ့ (သော့နှစ်လုံး ခတ်ထားတဲ့) သတ္တာ က သူ ခတ်ထားတဲ့ သာ့ကို ဖွင့်ပြီး (ဖြုတ်ပြီး) ဘီ ကို ပန်ပို ။

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



Diffie-Hellman Protocol

တကယ်တန်းကျတော့ ကျွန်တော်တို ပို ရမှာက ရုပ်၀တ္ထု ပစ္စည်းတွေဖြစ်တဲ့ သတ္တာတို  ဘာတို မဟုတ်ပဲ၊ ကွန်ပြူတာကွန်ယက်တွေပေါ်မှာ data အချက်အလက်တွေ (bit stream or signal) ပဲ ပို ရမှာကိုး။ အဲဒီလိုပို တဲ့အခါမှာဆိုရင် ကျွန်တော်တို  အထက်မှာ ဆွးနွေးခဲ့တဲ့ ပို ဆာင်ဆက်သွယ်ရေးပုံစံ (protocol) ကို ဘယ်လို အကောင်အထည်ဖေါ်ကြမလဲ။ အဲဒီမေးခွန်းရဲ့အဖြေနဲ ပါတ်သက်ပြီး ပဿနာဖြေရှင်းပုံ နည်းလမ်းအဆင့်ဆင့်ကို၊ ၁၉၇၆ ခုနှစ်မှာ Whitfield Diffie နဲ  Martin Hellman ဆိုတဲ့ ပုဂ္ဂိုလ်နှစ်ဦးက ပထမဆုံး စတင်ဆွေးနွေးတင်ပြခဲ့ပါတယ်။ သူတို နှစ်ဦးကို ဂုဏ်ပြုတဲ့အနေနဲ  အဲဒီ နည်းစနစ်ကို Diffie-Hellman Protocol လို ခါ်ပါတယ်။ ဒါပေမယ့်လည်း ၂၀၀၂ ခုနှစ်မှာ Hellman က အဲဒီ algorithm ကို “Diffie–Hellman–Merkle key exchange” လို ခါ်ဖို  အကြံပြုတင်ပြခဲ့ပါတယ်။ ဘာလို လဲဆိုတော့ အဲဒီ public key cryptography နည်းစနစ်ကို တည်ထွင်ရာမှာ Ralph Merkle ဆိုတဲ့ ပုဂ္ဂိုလ်ရဲ့ ပူးပေါင်းပါ၀င်ဆောင်ရွက်မှုတွေ အများအပြားရှိခဲ့လို ဖစ်တယ်လို  ဆိုပါတယ်။







Diffie-Hellman Protocol ၏ လုပ်ဆောင်ပုံအဆင့်များ

1.  အေ နဲ  ဘီ ဟာ prime number p = 23 နဲ  အခြေ base g = 5 ကို သုံးစွဲဖို  သဘောတူထားကြတယ်။

2.  အေ  ဟာ သူ ရဲ့ ကိုယ်ပိုင် လျှို ၀ှက် ကိန်းပြည့် a = 6 ကို သုံးဖို  ရွးချယ်လိုက်တယ်။ ပီးတော့  ဘီ ဆီကို  A = ga mod p  ကို ပို လိုက်တယ်။

·         A = 56 mod 23

·         A = 15,625 mod 23

·         A = 8

3.  ဘီ  ကတော့ သူ ရဲ့ ကိုယ်ပိုင် လျှို ၀ှက် ကိန်းပြည့်အဖြစ် b = 15 ကို ရွးချယ်လိုက်တယ်။ ပီးတော့ အ ဆီကို  B = gb mod p  ကိုပို လိုက်တယ်။

·         B = 515 mod 23

·         B = 30,517,578,125 mod 23

·         B = 19

4.  အေ ဟာ သူတို ရဲ့ လျှို ၀ှက်သတင်းစကား s ကို ဒီလိုတွက်ယူလိုက်တယ်။

o   s = B a mod p

o   s = 196 mod 23

o   s = 47,045,881 mod 23

o   s = 2

ဘီ ကလည်း လျှို ၀ှက်သတင်းစကား s ကို ဒီလိုတွက်ယူတယ်။

o   s = A b mod p

o   s = 815 mod 23

o   s = 35,184,372,088,832  mod 23

o   s = 2







1.  ကဲမိတ်ဆွေ မင်တဲ့အတိုင်းပါပဲ။  အ နဲ  ဘီ ဟာ သူတို ရဲ့ လျှို ၀ှက်ချက် s = 2ကို နှစ်ရောက်လုံး မျှေ၀သုံးစွဲနိုင်တဲ့ အဆင့်ကိုရောက်နေပါပြီ။ ဒါဟာ ဘာလို တုန်းဆိုတော့  6*15  နဲ  15*6 နဲ ဟာ အတူတူပဲဖြစ်လို ပါ့။ ဒါကြောင့် နှစ်ရောက်စလုံး (အေ နဲ  ဘီ) ရဲ့ ကိုယ်ပိုင် လျှို ၀ှက်ကိန်းပြည့်တွေကို သိထားတဲ့ သူကပဲ  လျှို ၀ှက်သတင်းစကား s ကို အာက်ပါအတိုင်း တွက်ယူနိုင်မှာဖြစ်ပါတယ်။ [နှစ်ရောက်လုံးရဲ့ လျှို ၀ှက်ကိန်းတွေကို သိနိုင်ဖို ဆိုတာ တကယ်တော့ မလွယ်ပါဘူး။]

·         s = 56*15 mod 23

·         s = 515*6 mod 23

·         s = 590 mod 23

·         s =807,793,566,946,316,088,741,610,050,849,573,099,185,363,389,551,639,556,884,765,625 mod 23

·         s = 2



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

RSA Encryption Algorithm

အထက်မှာတင်ပြခဲ့တဲ့ Diffie-Hellman Protocol ရဲ့ လိုအပ်ချက်တွေကိုအခြေခံပြီး၊ ၁၉၇၇ ခုနှစ်မှာ မက်ဆာချူးဆက်နည်းပညာသိပ္ပံက ကျာင်းသားတွေဖြစ်တဲ့ Ronald Rivest, Adi Shamir နဲ  Leonard Adleman တို က အကြွင်းသင်္ချာနဲ  အခြေခံ ကိန်းသီအိုရီကို အသုံးချပြီး အလွန်လုံခြုံမှုမြင့်မားတဲ့ ၀ှက်စာစနစ်တရပ်ကို “A Method for Obtaining Digital Signatures and Public-Key Cryptosystems” ဆိုတဲ့ စာတမ်းမှာ ဖါ်ထုတ်တင်ပြခဲ့ကြပါတယ်။ သူတို ရဲ့ နာမည်တွေကို စွဲယူဂုဏ်ပြုတဲ့အနေနဲ  အဲဒီနည်းစနစ်ကို RSA နည်းလို ခါ်ပါတယ်။

ဒီ RSA ရဲ့ ရှးရိုးစနစ်တွေထက် သိသိသာသာ အားသာတဲ့အချက်က “ပေးပို သူနဲ  လက်ခံသူတို ဟာ နှစ်ဦးသဘောတူ လျှို ၀ှက်ကီး (secret key) တခုသတ်မှတ်ဖို အတွက် တရောက်နဲ  တရောက် ကြိုတင်တွေ ဆုံ ညှိနှိုင်းဖို မလိုတဲ့အချက်ပဲဖြစ်တယ်”။ လက်ခံမယ့်သူမှာ လုံခြုံအောင် ထိန်းသိမ်းထားတဲ့ လျှို ၀ှက်ကီး နှစ်ခုလုံးရှိထားတဲ့အပြင်၊ လူအများဆီကို တတ်နိုင်သမျှ ပျံ့နှံ အာင်ဖြန် ၀နိုင်တဲ့ public key ပါရှိထားတယ်။ သတင်းစကား ပးပို မယ့်သူဟာ လက်ခံမယ့်သူကဖြန် ၀ပေးထားတဲ့ public key ကို အသုံးပြုပြီး၊ သူပေးပို ချင်တဲ့ message ကို encrypt လုပ်ပြီး ပို လိုက်တယ်။ လက်ခံရရှိတဲ့သူက သူ ရဲ့ secret private key နဲ  ပန်ပြီး decrypt လုပ်ပြီး ဖတ်တယ်ပေါ့။ RSA algorithm ကို လက်တွေ  သဘောပေါက်နားလည်စေဖို အတွက် အာက်ပါ ဥပမာကို လ့လာလိုက်ပါဦး။

RSA Algorithm ၏ လုပ်ဆောင်ပုံအဆင့်ဆင့်

o P = 61 (first prime number, destroy this after computing E and D)

o Q = 53 (second prime number, destroy this after computing E and D)

o PQ = 3233 (modulus, give this to others)

o E = 17 (public exponent, give this to others)

o D = 2753 (private exponent, keep this secret!)

 Your public key is (E, PQ)

 Your private key is D.

 The encryption function is: Encrypt (T) = (T^E) mod PQ

= (T^17) mod 3233

(Where T is plaintext message)

 The decryption function is: Decrypt (C) = (C^D) mod PQ

= (C^2753) mod 3233

(Where C is ciphered text)

To encrypt the plaintext value 123, do this:

Encrypt (123) = (123^17) mod 3233

=337587917446653715596592958817679803 mod 3233

=855

To decrypt the ciphered text value 855, do this:

Decrypt (855) = (855^2753) mod 3233

= …………………(very large number) mod 3233

= 123



တကယ်တော့ ဒီ RSA နည်းဟာ အလွန်ကြီးမားတဲ့ သုဒ္ဓကိန်းနှစ်ခု တွက်ချက်ခြင်းကို အခြေခံပြီး တည်ထွင်ဖန်တီးထားတာပါ။ သူ ရဲ့ ခိုင်မာမှုနဲ ပတ်သက်လို ကတော့ “အလွန်ကြီးမားတဲ့ကိန်းတွေကို ဆခွဲကိန်းခွဲဖို  ဆိုတာ ခက်ခဲတယ်။ အဲဒီလို ဆခွဲကိန်းခွဲဖို ခက်ခဲသလောက် ဒီ နည်းဟာလည်း ဖည်ဖို  (break လုပ်ဖို ၊ ချိုးဖျက်ဖို ) ခက်ခဲတယ်” ဆိုတဲ့ မရေရာတဲ့ သီအိုရီအဆိုတခုအပေါ်ကို အခြေခံထားတာဖြစ်တဲ့အတွက်၊ RSA နည်းစနစ်ဟာ ဆယ်စုနှစ်နဲ ချီပြီး ၀ဖန်တိုက်ခိုက်ခံခဲ့ရပါတယ်။ ဒါပေမယ့်လည်း ဒီနေ ထက်ထိ RSA ရဲ့ သိသာထင်ရှားတဲ့ ဘယ်လိုအားနည်းချက်ကို ဘယ်သူကမှ ရှာမတွေ ခဲ့ကြသေးပါဘူး။ ဒါကြောင့် ခုအခါမှာတော့ ဒီ RSA နည်းနဲ  သူ ရဲ့မျိုးကွဲ နည်းစနစ်တွေဟာ ခတ်သစ် e-commerce စနစ်ကြီးတစ်ခုလုံးမှာ အကျယ်ပြန် ဆုံးအသုံးပြုတဲ့ ၀ှက်စာစနစ်တွေဖြစ်နေပါပြီ။ ဒါကြောင့် ဒီ RSA encryption စနစ်ဟာ စံ စနစ်တခုအဖြစ် တရား၀င် သတ်မှတ်မခံရပေမယ့်လည်း၊ လက်တွေ လာကမှာတော့ ၀ှက်စာရေးနည်းစံ (de-facto encryption standard) တခုသဖွယ် လူတိုင်းသုံးစွဲနေကြပါပြီ။

ဒါဆိုရင် မိတ်ဆွေက “ဒီ RSA နည်းက ဘယ်လောက်ထိ လုံခြုံစိတ်ချရလို လဲ” ဆိုတဲ့ မးခွန်းကို မးချင်မှာပါ။ တကယ်တော့ ဒီမေးခွန်းဟာ RSA စတင်တည်ထွင်ခဲ့တဲ့အချိန်ကနေ အခု နှစ်ပေါင်း ၃၀ ကျာ်လာတဲ့ ဒီနေ ထက်ထိ အဖြေမရှိသေးတဲ့ အဖြေမသိသေးတဲ့ မးခွန်းတခုအဖြစ်ပဲ ရှိနေပါသေးတယ်။ မိတ်ဆွေမေးခွန်းရဲ့အဖြေအတွက် ကျွန်တော်တို  ဆက်လက်လေ့လာ သုတေသနလုပ်ရပါဦးမယ်။ ဒါပေမယ့် အလွန်ရှင်းလင်းတဲ့ အချက်တချက်ရှိနေပါတယ်။ ဒါဟာဘာလဲဆိုတော့ “ဒီနေ အခါမှာ ဘတ်ဂျက်အလုံအလောက်၊ အခြေခံနဲ  အဆင့်မြင့်အဆောက်အဦ (infrastructure) အပြည့်အစုံ နဲ ၊ state-sponsored-hackers(အစိုးရကိုယ်တိုင် ပးကျွေး လက်သပ်မွေးပြီး စနစ်တကျဖွဲ စည်းပေးထားတဲ့ ကွန်ပြူတာအဖျက်သမား) တွဟာ ‘ငါနဲ မတူ ငါ့ရန်သူ’ သီအိုရီကို ကိုင်စွဲပြီး သူတို ပိုင်ဖက်တွေရဲ့ လုံခြုံရေးကို ဖျက်ဆီးဖို  ချိုးဖျက်ဖို ၊ သူတို နဲ အမြင်မတူသူတွေရဲ့ လျှို ၀ှက် သတင်းအချက်အလက်တွေကို ဖါက်ထွင်းခိုးယူဖို နည်းမျိုးစုံနဲ  မပြတ်ကြံစည် လုပ်ဆောင်နေကြတယ်” ဆိုတဲ့ အချက်ပဲဖြစ်ပါတယ်။ သူတို ဟာ Ciphertext only attck, Adaptive chosen-plaintext attack, Known-plaintext attack, Chosen-Key attack, Rubber hose attack, Timing attack စတဲ့ နည်းပေါင်းစုံနဲ  ပိုင်ဖက်အဖွဲ အစည်း လူပုဂ္ဂိုလ်တွေရဲ့ အီးမေးလ်တွေ ကွန်ပြူတာတွေ ဆာဗာတွေကို တိုက်ခိုက်ထိုးဖေါက်နေတဲ့အပြင်၊ code breaking နည်းစနစ်တွေဖြစ်တဲ့ Burce-Force attack, Meet-In-The-Middle attack, Social Engineering နည်းပညာကိုသုံးထားတဲ့ Trickery and Deceit နည်းစနစ်တွေအပြင် One-Time pad နဲ  Frequency Analysis နည်းစနစ်တွေကိုပါ အသုံးပြုပြီး ပိုင်ဖက်တွေကို ဒုက္ခပေးဖို ကြံစည်နေကြပါတယ်။ (အဲဒီတိုက်ခိုက်ပုံတွေကို နာက်လ ဆာင်းပါးမှာ သီးသန် ဆွးနွေးတင်ပြပါမယ်။) ကဲ..ဒါဆိုရင် မိတ်ဆွေတို  ဖက်ကရော အဲဒီ state-sponsored-hacker တွရဲ့ ရန်ကို ခုခံကာကွယ်တားဆီးဖို  ဘယ်လို algorithm တွ ၊ ဘယ်လို security policy တွ၊ ဘယ်လိုနည်းစနစ်အသစ်တွေနဲ  ပင်ဆင်ထားပါသလဲ။ “ထားပါဗျာ ဒီကောင်တွေကို ဂရုမစိုက်ပါဘူး။ လူဆိုးနဲ  လူကောင်းရဲ တိုက်ပွဲမှာ နာက်ဆုံးတော့ လူကောင်းကသာ အနိုင်ရမှာ ဆိုတဲ့ လာကပါလတရားကို ယုံကြည်မှုမပျောက်သေးတဲ့အတွက် ကျုပ်တို ကတော့ သိပ်ပူမနေပါဘူး လို များ ဆိုလေမလား မိတ်ဆွေတို ရ။ အင်း..ခက်တာက ကြားကာလမှာ ‘ရွှေဘ ကတော့ အလူးအလဲပဲဗျို ။



ရွှင်လန်းချမ်းမြေ့ပါစေ။

Kyaw Khaing Soe (infoTherapy-2013)



REFERENCES:

1. Chapter 14 Number Theory, “Mathematics for Computer Science” by Prof. Albert R. Meyer (Massachusetts Institute of Technology) revised May 9, 2010

2. Chapter 15 Derandomization / cryptography double feature, Chapter 16 Private-key cryptography, Chapter 17 Public-key cryptography, “Great Ideas in Theoretical Computer Science” By Prof. Scott Aaronson (Massachusetts Institute of Technology)

3. CEHv7, Module 18, Cryptography

4. “Journey into Cryptography” 11-Video Series From Khan Academy

5. Various related articles from “Wikipedia, the free encyclopedia” 

မှတ်ချက်။ ၂၀၁၃ March နှင့် April လထုတ် ကွန်ပြူတာဂျာနယ် တွင်ဖေါ်ပြပြီးသော ဆာင်းပါးများကို ပန်လည်တင်ပြခြင်းဖြစ်ပါသည်။