Windows အတွက် WireGuard VPN နှင့် WireGuardNT 1.0 ကို ထုတ်ပြန်လိုက်ပါပြီ

WireGuard VPN ရဲ့ စာရေးဆရာ Jason A. Donenfeld ဟာ Windows 1.0 အတွက် WireGuard client software ရဲ့ ပထမဆုံး အဓိက ဖြန့်ချိမှုနဲ့အတူ port ပါတဲ့ WireGuardNT 1.0 drivers တွေကို ဖြန့်ချိလိုက်ပါပြီ။ VPN ကို AMD64၊ x86 နှင့် ARM64 ဗိသုကာလက်ရာများကို ပံ့ပိုးပေးသည့် Windows 10 နှင့် 11 kernel အတွက် WireGuard။ Windows kernel component code ကို GPLv2 အောက်တွင် လိုင်စင်ချထားပြီး client software ကို MIT လိုင်စင်အောက်တွင် လိုင်စင်ချထားပါသည်။

port သည် Linux kernel အတွက် အဓိက WireGuard အကောင်အထည်ဖော်မှု၏ codebase ကို အခြေခံထားပြီး Windows kernel entity များနှင့် NDIS network stack ကိုအသုံးပြုရန် ပြောင်းလဲထားသည်။ user space တွင်လည်ပတ်ပြီး Wintun network interface ကိုအသုံးပြုသော wireguard-go အကောင်အထည်ဖော်မှုနှင့်နှိုင်းယှဉ်ပါက WireGuardNT သည် context switch များကိုဖယ်ရှားခြင်းနှင့် kernel မှ user space သို့ packet content များကိုကူးယူခြင်းဖြင့် သိသာထင်ရှားသောစွမ်းဆောင်ရည်တိုးတက်မှုများကို ပေးစွမ်းသည်။ Linux၊ OpenBSD နှင့် FreeBSD တို့အတွက် အကောင်အထည်ဖော်မှုများနှင့်ဆင်တူသည်မှာ WireGuardNT ရှိ protocol processing logic အားလုံးသည် network stack level တွင်တိုက်ရိုက်လည်ပတ်သည်။

ဗားရှင်း 1.0 ကို မှတ်တိုင်တစ်ခုအဖြစ် မှတ်သားထားပြီး ပြဿနာအများအပြားကို ဖြေရှင်းခြင်းနှင့် ရည်ရွယ်ထားသော လုပ်ငန်းတာဝန်များ ပြီးမြောက်အောင်မြင်ခြင်းတို့ကို မှတ်သားထားပါသည်။ ဥပမာအားဖြင့် Reserved field တွင် driver state ၏ လုံခြုံမှုနည်းသော သိမ်းဆည်းမှုအစား NdisWdfGetAdapterContextFromAdapterHandle() function ကို အသုံးပြုခြင်းနှင့် မှတ်တမ်းမတင်ထားသော offsets များကို အသုံးပြုခြင်းကဲ့သို့သော လုပ်ဆောင်ချက်များ ပါဝင်သည်။ system calls များကို ကြားဖြတ်ခြင်းဖြင့် MTU (Maximum Transmission Unit) အရွယ်အစားကို မှန်ကန်စွာနှင့် လျင်မြန်စွာ ခြေရာခံခြင်း၊ ကုဒ်တွင် C23 စံနှုန်းကို အသုံးပြုခြင်း။

သတိပေးလိုသည်မှာ WireGuard VPN သည် ခေတ်မီ encryption နည်းလမ်းများပေါ်တွင် အခြေခံထားပြီး၊ ထူးကဲသောစွမ်းဆောင်ရည်ကို ပေးစွမ်းနိုင်ခြင်း၊ အသုံးပြုရလွယ်ကူခြင်း၊ ရှုပ်ထွေးမှုများ ကင်းစင်ခြင်းနှင့် ကြီးမားသော traffic ပမာဏကို ကိုင်တွယ်သည့် ကြီးမားသော ဖြန့်ကျက်မှုအများအပြားတွင် ၎င်းကိုယ်တိုင် သက်သေပြခဲ့သည်။ ဤပရောဂျက်ကို ၂၀၁၅ ခုနှစ်မှစ၍ တီထွင်ခဲ့ပြီး ၎င်း၏ encryption နည်းလမ်းများဆိုင်ရာ audit နှင့် တရားဝင်အတည်ပြုခြင်းကို ခံယူခဲ့သည်။ WireGuard သည် key-based encryption routing concept ကို အသုံးပြုပြီး ၎င်းတွင် network interface တစ်ခုချင်းစီသို့ private key တစ်ခု ချိတ်ဆက်ခြင်းနှင့် key binding အတွက် public key များကို အသုံးပြုခြင်း ပါဝင်သည်။

ချိတ်ဆက်မှုတစ်ခုတည်ဆောက်ရန် public keys များဖလှယ်ခြင်းသည် SSH နှင့်ဆင်တူသည်။ user space တွင် သီးခြား daemon တစ်ခုမလည်ပတ်ဘဲ keys များကိုညှိနှိုင်းပြီး ချိတ်ဆက်ရန်အတွက် SSH ရှိ authorized_keys များကို ပြုပြင်ထိန်းသိမ်းခြင်းနှင့်ဆင်တူသော Noise Protocol Framework မှ Noise_IK ယန္တရားကို အသုံးပြုသည်။ ဒေတာလွှဲပြောင်းခြင်းကို UDP packets များတွင် encapsulation မှတစ်ဆင့် ဆောင်ရွက်သည်။ ပြောင်းလဲခြင်းကို ပံ့ပိုးပေးသည်။ IP လိပ်စာများ အလိုအလျောက် client ပြန်လည်ပြင်ဆင်သတ်မှတ်ခြင်းဖြင့် ချိတ်ဆက်မှုပြတ်တောက်ခြင်းမရှိဘဲ VPN ဆာဗာများ (roaming)။

Daniel J. Bernstein၊ Tanja Lange နှင့် Peter Schwabe မှ တီထွင်ထားသော ChaCha20 stream cipher နှင့် Poly1305 message authentication algorithm (MAC) တို့ကို encryption အတွက် အသုံးပြုပါသည်။ ChaCha20 နှင့် Poly1305 တို့ကို AES-256-CTR နှင့် HMAC တို့၏ ပိုမိုမြန်ဆန်ပြီး ပိုမိုလုံခြုံသော အခြားရွေးချယ်စရာများအဖြစ် ဈေးကွက်တင်ထားပြီး၊ ယင်း software အကောင်အထည်ဖော်မှုသည် အထူး hardware အထောက်အပံ့ မလိုအပ်ဘဲ fixed-time execution ကို ခွင့်ပြုသည်။ shared secret key ကို Daniel Bernstein မှလည်း အဆိုပြုထားသော Curve25519 အကောင်အထည်ဖော်မှုတွင် elliptic curve Diffie-Hellman protocol ကို အသုံးပြု၍ ထုတ်ပေးပါသည်။ BLAKE2s algorithm (RFC7693) ကို hashing အတွက် အသုံးပြုပါသည်။

source: opennet.ru