ឯកសារ 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 ពីរដង។