Shadowsocks စာတမ်း
navigation
AEAD
AEAD Associated Data with Authenticated Encryption ကို ဆိုလိုသည်။ AEAD ciphers များသည် လျှို့ဝှက်မှု၊ ခိုင်မာမှုနှင့် စစ်မှန်မှုကို တစ်ပြိုင်နက် ပေးဆောင်သည်။ ၎င်းတို့သည် ခေတ်မီ hardware များတွင် ကောင်းမွန်သော စွမ်းဆောင်ရည်နှင့် ပါဝါထိရောက်မှုရှိသည်။ အသုံးပြုသူများသည် ဖြစ်နိုင်သည့်အခါတိုင်း AEAD ciphers ကို အသုံးပြုသင့်သည်။
အောက်ပါ AEAD ciphers များကို အကြံပြုထားပါသည်။ လိုက်လျောညီထွေရှိသော Shadowsocks အကောင်အထည်ဖော်မှုများသည် AEAD_CHACHA20_POLY1305 ကို ပံ့ပိုးပေးရပါမည်။ ဟာ့ဒ်ဝဲ AES အရှိန်မြှင့်စက်များအတွက် အကောင်အထည်ဖော်မှုများသည် AEAD_AES_128_GCM နှင့် AEAD_AES_256_GCM တို့ကိုလည်း အကောင်အထည်ဖော်သင့်သည်။
အမည် | အမည်ဝှက် | သော့အရွယ်အစား | ဆားအရွယ်အစား | Nonce Size | tag ကို Size ကို |
AEAD_CHACHA20_POLY1305 | chacha20-ietf-poly1305 | 32 | 32 | 12 | 16 |
AEAD_AES_256_GCM | aes-256-gcm | 32 | 32 | 12 | 16 |
AEAD_AES_128_GCM | aes-128-gcm | 16 | 16 | 12 | 16 |
ကျေးဇူးပြု. ရည်ညွှန်းပါ IANA AEAD မှတ်ပုံတင်ခြင်း။ အမည်ပေးခြင်း အစီအစဉ်နှင့် သတ်မှတ်ချက်အတွက်။
အဓိက ဆင်းသက်လာခြင်း
မာစတာကီးကို အသုံးပြုသူမှ တိုက်ရိုက်ထည့်သွင်းနိုင်သည် သို့မဟုတ် စကားဝှက်တစ်ခုမှ ထုတ်ပေးနိုင်သည်။
HKDF_SHA1 လျှို့ဝှက်သော့၊ လျှို့ဝှက်မဟုတ်သောဆားတစ်ခု၊ အချက်အလက်ကြိုးတစ်ချောင်းကိုယူကာ လျှို့ဝှက်သော့ထည့်သွင်းမှုအားနည်းနေသော်လည်း လျှို့ဝှက်သော့သည် အားနည်းနေသော်လည်း လျှို့ဝှက်သော့ခွဲတစ်ခုကို ထုတ်လုပ်ပေးသည့် လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။
HKDF_SHA1(သော့၊ ဆား၊ အချက်အလက်) => သော့ခွဲ
အချက်အလက်စာတန်းသည် ထုတ်ပေးထားသော ကီးခွဲကို သီးခြားအပလီကေးရှင်းအကြောင်းအရာတစ်ခုနှင့် တွဲပေးသည်။ ကျွန်ုပ်တို့၏ကိစ္စတွင်၊ ၎င်းသည် ကိုးကားခြင်းမရှိဘဲ “ss-subkey” စာကြောင်းဖြစ်ရပါမည်။
ကျွန်ုပ်တို့သည် HKDF_SHA1 ကို အသုံးပြု၍ ကြိုတင်မျှဝေထားသော မာစတာကီးတစ်ခုမှ တစ်ကြိမ်စီဆက်ရှင်ခွဲကီးတစ်ခုကို ရယူထားပါသည်။ ကြိုတင်မျှဝေထားသော မာစတာကီး၏ ဘဝတစ်ခုလုံးတွင် ဆားသည် ထူးခြားရပါမည်။
အစစ်အမှန် ကုဒ်ဝှက်ခြင်း/စာဝှက်ခြင်း
AE_encrypt သည် လျှို့ဝှက်သော့၊ လျှို့ဝှက်မဟုတ်သော၊ မက်ဆေ့ချ်တစ်ခုယူကာ ciphertext နှင့် အထောက်အထားစိစစ်ခြင်းတဂ်ကို ထုတ်လုပ်ပေးသည့် လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ခေါ်ဆိုမှုတစ်ခုစီတွင် ပေးထားသောသော့တစ်ခုအတွက် Nonce သည် သီးသန့်ဖြစ်ရပါမည်။
AE_encrypt(သော့၊ nonce၊ မက်ဆေ့ချ်) => (ciphertext၊ tag)
AE_decrypt သည် လျှို့ဝှက်သော့၊ လျှို့ဝှက်မဟုတ်သော၊ ciphertext၊ အထောက်အထားစိစစ်ခြင်းတက်ဂ်ကိုယူကာ မူရင်းမက်ဆေ့ဂျ်ကိုထုတ်ပေးသည့် လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ထည့်သွင်းမှုတစ်ခုအား အနှောင့်အယှက်ဖြစ်ပါက၊ ကုဒ်ဝှက်ခြင်း မအောင်မြင်ပါ။
AE_decrypt(သော့၊ nonce၊ ciphertext၊ tag) => မက်ဆေ့ချ်
သည် TCP
AEAD ကုဒ်ဝှက်ထားသော TCP စီးကြောင်းသည် တစ်ဆက်ရှင်တစ်ခုစီခွဲကီးကို ရယူရန်အတွက် ကျပန်းထုတ်လုပ်ထားသော ဆားဖြင့် စတင်ကာ၊ ၎င်းနောက်တွင် ကုဒ်ဝှက်ထားသော အတုံးအရေအတွက်များစွာဖြင့် စတင်သည်။ အပိုင်းတစ်ခုစီတွင် အောက်ပါဖွဲ့စည်းပုံပါရှိသည်။
[ကုဒ်ဝှက်ထားသော payload length][length tag][encrypted payload][payload tag]
Payload length သည် 2x0FFF တွင် ကန့်သတ်ထားသော 3-byte big-endian လက်မှတ်မထိုးထားသော ကိန်းပြည့်ဖြစ်သည်။ ပိုမြင့်သော ဘစ်နှစ်ခုကို သီးသန့်ထားပြီး သုညဟု သတ်မှတ်ရပါမည်။ ထို့ကြောင့် Payload ကို 16*1024 – 1 bytes တွင် ကန့်သတ်ထားသည်။
ပထမဆုံး AEAD ကုဒ်ဝှက်ခြင်း/စာဝှက်ခြင်း လုပ်ဆောင်ချက်သည် 0 မှစတင်၍ ရေတွက်သော nonce ကိုအသုံးပြုသည်။ စာဝှက်ခြင်း/စာဝှက်ခြင်းလုပ်ဆောင်မှုတစ်ခုစီပြီးနောက်၊ nonce သည် လက်မှတ်မထိုးရသေးသော အဆုံးကိန်းပြည့်တစ်ခုကဲ့သို့ တစ်ခုနှင့်တစ်ခုတိုးလာသည်။ TCP အတုံးတစ်ခုစီတွင် AEAD ကုဒ်ဝှက်ခြင်း/စာဝှက်ခြင်း လုပ်ဆောင်ချက်များ နှစ်ခုပါဝင်သည်- တစ်ခုသည် payload length အတွက် တစ်ခုနှင့် payload အတွက် တစ်ခု ပါဝင်သည်ကို သတိပြုပါ။ ထို့ကြောင့် အတုံးတစ်ခုစီသည် nonce ကို နှစ်ဆတိုးစေသည်။
သည် TCP
AEAD ကုဒ်ဝှက်ထားသော TCP စီးကြောင်းသည် တစ်ဆက်ရှင်တစ်ခုစီခွဲကီးကို ရယူရန်အတွက် ကျပန်းထုတ်လုပ်ထားသော ဆားဖြင့် စတင်ကာ၊ ၎င်းနောက်တွင် ကုဒ်ဝှက်ထားသော အတုံးအရေအတွက်များစွာဖြင့် စတင်သည်။ အပိုင်းတစ်ခုစီတွင် အောက်ပါဖွဲ့စည်းပုံပါရှိသည်။
[ကုဒ်ဝှက်ထားသော payload length][length tag][encrypted payload][payload tag]
Payload length သည် 2x0FFF တွင် ကန့်သတ်ထားသော 3-byte big-endian လက်မှတ်မထိုးထားသော ကိန်းပြည့်ဖြစ်သည်။ ပိုမြင့်သော ဘစ်နှစ်ခုကို သီးသန့်ထားပြီး သုညဟု သတ်မှတ်ရပါမည်။ ထို့ကြောင့် Payload ကို 16*1024 – 1 bytes တွင် ကန့်သတ်ထားသည်။
ပထမဆုံး AEAD ကုဒ်ဝှက်ခြင်း/စာဝှက်ခြင်း လုပ်ဆောင်ချက်သည် 0 မှစတင်၍ ရေတွက်သော nonce ကိုအသုံးပြုသည်။ စာဝှက်ခြင်း/စာဝှက်ခြင်းလုပ်ဆောင်မှုတစ်ခုစီပြီးနောက်၊ nonce သည် လက်မှတ်မထိုးရသေးသော အဆုံးကိန်းပြည့်တစ်ခုကဲ့သို့ တစ်ခုနှင့်တစ်ခုတိုးလာသည်။ TCP အတုံးတစ်ခုစီတွင် AEAD ကုဒ်ဝှက်ခြင်း/စာဝှက်ခြင်း လုပ်ဆောင်ချက်များ နှစ်ခုပါဝင်သည်- တစ်ခုသည် payload length အတွက် တစ်ခုနှင့် payload အတွက် တစ်ခု ပါဝင်သည်ကို သတိပြုပါ။ ထို့ကြောင့် အတုံးတစ်ခုစီသည် nonce ကို နှစ်ဆတိုးစေသည်။