Shadowsocks-ի փաստաթղթեր
նավարկություն
AEAD
AEAD նշանակում է վավերացված գաղտնագրում ասոցացված տվյալների հետ: AEAD ծածկագրերը միաժամանակ ապահովում են գաղտնիություն, ամբողջականություն և իսկականություն: Նրանք ունեն գերազանց կատարում և էներգիայի արդյունավետություն ժամանակակից սարքավորումների վրա: Օգտագործողները պետք է հնարավորինս օգտագործեն AEAD ծածկագրերը:
Առաջարկվում են հետևյալ AEAD ծածկագրերը. Համապատասխան Shadowsocks-ի իրականացումները պետք է աջակցեն AEAD_CHACHA20_POLY1305-ին: Սարքավորումների AES արագացում ունեցող սարքերի ներդրումները պետք է նաև կիրառեն AEAD_AES_128_GCM և AEAD_AES_256_GCM:
Անուն | Ծածկանուն | Հիմնական չափը | Աղի չափը | Nonce Size | Tag չափը |
AEAD_CHACHA20_POLY1305 | chacha20-ietf-poly1305 | 32 | 32 | 12 | 16 |
AEAD_AES_256_GCM | աես-256-գսմ | 32 | 32 | 12 | 16 |
AEAD_AES_128_GCM | աես-128-գսմ | 16 | 16 | 12 | 16 |
Դիմեք IANA AEAD գրանցամատյան անվանման սխեմայի և ճշգրտման համար:
Բանալի ածանցում
Հիմնական բանալին կարող է մուտքագրվել անմիջապես օգտվողից կամ ստեղծվել գաղտնաբառից:
HKDF_SHA1 ֆունկցիա է, որը վերցնում է գաղտնի բանալի, ոչ գաղտնի աղ, տեղեկատվական տող և արտադրում է ենթաբանալին, որը կրիպտոգրաֆիկորեն ուժեղ է, նույնիսկ եթե մուտքային գաղտնի բանալին թույլ է:
HKDF_SHA1 (բանալի, աղ, տեղեկատվություն) => ենթաբանալին
Տեղեկատվական տողը կապում է ստեղծված ենթաբանալին կոնկրետ հավելվածի համատեքստին: Մեր դեպքում դա պետք է լինի «ss-subkey» տողը առանց չակերտների:
Մենք բխում ենք յուրաքանչյուր նստաշրջանի ենթաբանալին նախապես համօգտագործվող հիմնական բանալիից՝ օգտագործելով HKDF_SHA1: Աղը պետք է եզակի լինի նախապես համօգտագործված հիմնական բանալի ողջ կյանքի ընթացքում:
Նույնականացված գաղտնագրում/գաղտնագրում
AE_encrypt-ը ֆունկցիա է, որը վերցնում է գաղտնի բանալի, ոչ գաղտնի նոնս, հաղորդագրություն և արտադրում է գաղտնագրված տեքստ և նույնականացման պիտակ: Nonce-ը պետք է եզակի լինի տվյալ բանալիի համար յուրաքանչյուր կանչում:
AE_encrypt (բանալին, ոչ, հաղորդագրություն) => (գաղտնագրված տեքստ, պիտակ)
AE_decrypt-ը ֆունկցիա է, որը վերցնում է գաղտնի բանալի, ոչ գաղտնի ոչ միս, ծածկագրված տեքստ, իսկությունը հաստատող պիտակ և արտադրում է բնօրինակ հաղորդագրություն: Եթե մուտքագրվածներից որևէ մեկը կեղծվի, ապա գաղտնազերծումը չի հաջողվի:
AE_decrypt (բանալի, nonce, ciphertext, tag) => հաղորդագրություն
TCP
AEAD գաղտնագրված TCP հոսքը սկսվում է պատահականորեն ստեղծվող աղով, որպեսզի ստացվի յուրաքանչյուր նստաշրջանի ենթաբանալին, որին հաջորդում է ցանկացած քանակությամբ գաղտնագրված կտոր: Յուրաքանչյուր կտոր ունի հետևյալ կառուցվածքը.
[կոդավորված ծանրաբեռնվածության երկարությունը] [length tag]]
Օգտակար բեռի երկարությունը 2 բայթ մեծ-էնդիան անստորագիր ամբողջ թիվ է, որը ծածկված է 0x3FFF-ով: Ավելի բարձր երկու բիթերը վերապահված են և պետք է սահմանվեն զրոյի: Ուստի ծանրաբեռնվածությունը սահմանափակված է 16*1024 – 1 բայթով:
Առաջին AEAD գաղտնագրման/գաղտնազերծման գործողությունը օգտագործում է 0-ից սկսած հաշվող նենս: Յուրաքանչյուր գաղտնագրման/գաղտնազերծման գործողությունից հետո նոնսը ավելանում է մեկով, կարծես անստորագիր փոքր էնդյան ամբողջ թիվ է: Նկատի ունեցեք, որ յուրաքանչյուր TCP կտոր ներառում է երկու AEAD գաղտնագրման/գաղտնազերծման գործողություն՝ մեկը ծանրաբեռնվածության երկարության համար և մեկը՝ օգտակար բեռի համար: Հետևաբար, յուրաքանչյուր կտոր ավելացնում է նենսը երկու անգամ:
TCP
AEAD գաղտնագրված TCP հոսքը սկսվում է պատահականորեն ստեղծվող աղով, որպեսզի ստացվի յուրաքանչյուր նստաշրջանի ենթաբանալին, որին հաջորդում է ցանկացած քանակությամբ գաղտնագրված կտոր: Յուրաքանչյուր կտոր ունի հետևյալ կառուցվածքը.
[կոդավորված ծանրաբեռնվածության երկարությունը] [length tag]]
Օգտակար բեռի երկարությունը 2 բայթ մեծ-էնդիան անստորագիր ամբողջ թիվ է, որը ծածկված է 0x3FFF-ով: Ավելի բարձր երկու բիթերը վերապահված են և պետք է սահմանվեն զրոյի: Ուստի ծանրաբեռնվածությունը սահմանափակված է 16*1024 – 1 բայթով:
Առաջին AEAD գաղտնագրման/գաղտնազերծման գործողությունը օգտագործում է 0-ից սկսած հաշվող նենս: Յուրաքանչյուր գաղտնագրման/գաղտնազերծման գործողությունից հետո նոնսը ավելանում է մեկով, կարծես անստորագիր փոքր էնդյան ամբողջ թիվ է: Նկատի ունեցեք, որ յուրաքանչյուր TCP կտոր ներառում է երկու AEAD գաղտնագրման/գաղտնազերծման գործողություն՝ մեկը ծանրաբեռնվածության երկարության համար և մեկը՝ օգտակար բեռի համար: Հետևաբար, յուրաքանչյուր կտոր ավելացնում է նենսը երկու անգամ: