ឯកសារ Shadowsocks

អេអេដ

អេអេដ តំណាងឱ្យការអ៊ិនគ្រីបដែលបានផ្ទៀងផ្ទាត់ជាមួយនឹងទិន្នន័យដែលពាក់ព័ន្ធ។ លេខសម្ងាត់ AEAD ក្នុងពេលដំណាលគ្នាផ្តល់នូវការសម្ងាត់ សុចរិតភាព និងភាពត្រឹមត្រូវ។ ពួកគេមានដំណើរការល្អ និងប្រសិទ្ធភាពថាមពលនៅលើផ្នែករឹងទំនើប។ អ្នកប្រើប្រាស់គួរប្រើ AEAD ciphers នៅពេលណាដែលអាចធ្វើទៅបាន។

លេខកូដ AEAD ខាងក្រោមត្រូវបានណែនាំ។ ការអនុវត្ត Shadowsocks ដែលត្រូវគ្នាត្រូវតែគាំទ្រ AEAD_CHACHA20_POLY1305។ ការអនុវត្តសម្រាប់ឧបករណ៍ដែលមានការបង្កើនល្បឿន AES ផ្នែករឹងក៏គួរតែអនុវត្ត AEAD_AES_128_GCM និង AEAD_AES_256_GCM ផងដែរ។

 

 

 

ឈ្មោះ

ឈ្មោះក្លែងក្លាយ

ទំហំគន្លឹះ

ទំហំអំបិល

ទំហំ Nonce

ទំហំស្លាក

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(key, nonce, message) => (ciphertext, tag)

 

AE_decrypt គឺជាមុខងារដែលយកសោសម្ងាត់ មិនមែនសំងាត់ លេខសម្ងាត់ ស្លាកផ្ទៀងផ្ទាត់ និងបង្កើតសារដើម។ ប្រសិនបើការបញ្ចូលណាមួយត្រូវបានរំខាន ការឌិគ្រីបនឹងបរាជ័យ។

AE_decrypt(key, nonce, ciphertext, tag) => សារ

TCP

ស្ទ្រីម TCP ដែលបានអ៊ិនគ្រីប AEAD ចាប់ផ្តើមដោយអំបិលដែលបង្កើតដោយចៃដន្យ ដើម្បីទាញយកសោរងក្នុងមួយវគ្គ បន្តដោយចំនួននៃកំណាត់ដែលបានអ៊ិនគ្រីប។ ផ្នែកនីមួយៗមានរចនាសម្ព័ន្ធដូចខាងក្រោមៈ

[រយៈពេលផ្ទុកដែលបានអ៊ិនគ្រីប [ស្លាកប្រវែង] [បន្ទុកដែលបានអ៊ិនគ្រីប] [ស្លាកបង់ប្រាក់]

 

ប្រវែងបន្ទុកគឺជាចំនួនគត់ដែលមិនបានចុះហត្ថលេខា 2 បៃធំដែលបិទនៅ 0x3FFF ។ ប៊ីតពីរខ្ពស់ជាងត្រូវបានបម្រុងទុក ហើយត្រូវតែកំណត់ទៅសូន្យ។ ដូច្នេះបន្ទុកត្រូវបានកំណត់ត្រឹម 16 * 1024 - 1 បៃ។

ប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីប AEAD ដំបូងប្រើលេខរាប់ដែលចាប់ផ្តើមពី 0។ បន្ទាប់ពីប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីបនីមួយៗ លេខត្រូវបានបង្កើនដោយមួយដូចជាប្រសិនបើវាជាចំនួនគត់ដែលមិនបានចុះហត្ថលេខា។ ចំណាំថាកំណាត់ TCP នីមួយៗពាក់ព័ន្ធនឹងប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីប AEAD ចំនួនពីរ៖ មួយសម្រាប់ប្រវែងបន្ទុក និងមួយទៀតសម្រាប់បន្ទុក។ ដូច្នេះកំណាត់នីមួយៗបង្កើន nonce ពីរដង។

TCP

ស្ទ្រីម TCP ដែលបានអ៊ិនគ្រីប AEAD ចាប់ផ្តើមដោយអំបិលដែលបង្កើតដោយចៃដន្យ ដើម្បីទាញយកសោរងក្នុងមួយវគ្គ បន្តដោយចំនួននៃកំណាត់ដែលបានអ៊ិនគ្រីប។ ផ្នែកនីមួយៗមានរចនាសម្ព័ន្ធដូចខាងក្រោមៈ

[រយៈពេលផ្ទុកដែលបានអ៊ិនគ្រីប [ស្លាកប្រវែង] [បន្ទុកដែលបានអ៊ិនគ្រីប] [ស្លាកបង់ប្រាក់]

 

ប្រវែងបន្ទុកគឺជាចំនួនគត់ដែលមិនបានចុះហត្ថលេខា 2 បៃធំដែលបិទនៅ 0x3FFF ។ ប៊ីតពីរខ្ពស់ជាងត្រូវបានបម្រុងទុក ហើយត្រូវតែកំណត់ទៅសូន្យ។ ដូច្នេះបន្ទុកត្រូវបានកំណត់ត្រឹម 16 * 1024 - 1 បៃ។

ប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីប AEAD ដំបូងប្រើលេខរាប់ដែលចាប់ផ្តើមពី 0។ បន្ទាប់ពីប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីបនីមួយៗ លេខត្រូវបានបង្កើនដោយមួយដូចជាប្រសិនបើវាជាចំនួនគត់ដែលមិនបានចុះហត្ថលេខា។ ចំណាំថាកំណាត់ TCP នីមួយៗពាក់ព័ន្ធនឹងប្រតិបត្តិការអ៊ិនគ្រីប/ឌិគ្រីប AEAD ចំនួនពីរ៖ មួយសម្រាប់ប្រវែងបន្ទុក និងមួយទៀតសម្រាប់បន្ទុក។ ដូច្នេះកំណាត់នីមួយៗបង្កើន nonce ពីរដង។

ចាប់ផ្តើមការសាកល្បងឥតគិតថ្លៃរយៈពេល 5 ថ្ងៃរបស់អ្នក។