ເອກະສານ Shadowsocks

AEAD

AEAD ຫຍໍ້ມາຈາກ Authenticated Encryption with Associated Data. ເຄື່ອງເຂົ້າລະຫັດ AEAD ພ້ອມໆກັນໃຫ້ຄວາມລັບ, ຄວາມຊື່ສັດ, ແລະຄວາມຖືກຕ້ອງ. ພວກເຂົາເຈົ້າມີປະສິດທິພາບທີ່ດີເລີດແລະປະສິດທິພາບພະລັງງານໃນຮາດແວທີ່ທັນສະໄຫມ. ຜູ້ໃຊ້ຄວນໃຊ້ລະຫັດ AEAD ທຸກຄັ້ງທີ່ເປັນໄປໄດ້.

ແນະນໍາການເຂົ້າລະຫັດ AEAD ຕໍ່ໄປນີ້. ການປະຕິບັດ Shadowsocks ທີ່ສອດຄ້ອງກັນຕ້ອງຮອງຮັບ AEAD_CHACHA20_POLY1305. ການປະຕິບັດສໍາລັບອຸປະກອນທີ່ມີຮາດແວ AES ເລັ່ງຄວນປະຕິບັດ AEAD_AES_128_GCM ແລະ AEAD_AES_256_GCM.

 

 

 

ຊື່

Alias

ຂະໜາດກະແຈ

ຂະຫນາດເກືອ

Nonce Size

Tag ຂະຫນາດ

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 ເປັນຟັງຊັນທີ່ເອົາລະຫັດລັບ, ຂໍ້ຄວາມທີ່ບໍ່ແມ່ນຄວາມລັບ, ຂໍ້ຄວາມ, ແລະຜະລິດລະຫັດລັບ ແລະແທັກການຢືນຢັນ. Nonce ຈະຕ້ອງບໍ່ຊໍ້າກັນສຳລັບກະແຈທີ່ໃຫ້ໄວ້ໃນແຕ່ລະຄຳຮ້ອງ.

AE_encrypt(key, nonce, message) => (ລະຫັດ, ແທັກ)

 

AE_decrypt ເປັນຟັງຊັນທີ່ເອົາລະຫັດລັບ, ບໍ່ແມ່ນຄວາມລັບ, ciphertext, ໂຄດຄໍາສັ່ງການກວດສອບ, ແລະຜະລິດຂໍ້ຄວາມຕົ້ນສະບັບ. ຖ້າການປ້ອນຂໍ້ມູນໃດໆຖືກລົບກວນ, ການຖອດລະຫັດຈະລົ້ມເຫລວ.

AE_decrypt(key, nonce, ciphertext, tag) => ຂໍ້ຄວາມ

TCP

ກະແສ TCP ທີ່ຖືກເຂົ້າລະຫັດ AEAD ເລີ່ມຕົ້ນດ້ວຍເກືອທີ່ສ້າງຂຶ້ນແບບສຸ່ມເພື່ອເອົາກະແຈຍ່ອຍຕໍ່ເຊສຊັນ, ຕິດຕາມດ້ວຍຊຸດທີ່ເຂົ້າລະຫັດໄວ້. ແຕ່ລະຊິ້ນມີໂຄງສ້າງດັ່ງຕໍ່ໄປນີ້:

[encrypted payload length][length tag][encrypted payload][payload tag]

 

ຄວາມຍາວຂອງ payload ແມ່ນຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ 2-byte big-endian ຈຳກັດຢູ່ທີ່ 0x3FFF. ສອງບິດທີ່ສູງກວ່າຈະຖືກສະຫງວນໄວ້ ແລະຕ້ອງຖືກຕັ້ງເປັນສູນ. ດັ່ງນັ້ນການໂຫຼດແມ່ນຈຳກັດຢູ່ທີ່ 16*1024 – 1 bytes.

ການປະຕິບັດການເຂົ້າລະຫັດ/ຖອດລະຫັດ AEAD ທໍາອິດໃຊ້ການນັບ nonce ເລີ່ມຈາກ 0. ຫຼັງຈາກແຕ່ລະການປະຕິບັດການເຂົ້າລະຫັດ/ຖອດລະຫັດ, nonce ຈະຖືກເພີ່ມຂຶ້ນໂດຍອັນໜຶ່ງຄືກັບວ່າມັນເປັນຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ. ໃຫ້ສັງເກດວ່າແຕ່ລະ TCP chunk ກ່ຽວຂ້ອງກັບການປະຕິບັດການເຂົ້າລະຫັດ / ຖອດລະຫັດ AEAD ສອງອັນ: ຫນຶ່ງສໍາລັບຄວາມຍາວ payload, ແລະຫນຶ່ງສໍາລັບ payload. ດັ່ງນັ້ນແຕ່ລະ chunk ເພີ່ມຂຶ້ນ nonce ສອງເທື່ອ.

TCP

ກະແສ TCP ທີ່ຖືກເຂົ້າລະຫັດ AEAD ເລີ່ມຕົ້ນດ້ວຍເກືອທີ່ສ້າງຂຶ້ນແບບສຸ່ມເພື່ອເອົາກະແຈຍ່ອຍຕໍ່ເຊສຊັນ, ຕິດຕາມດ້ວຍຊຸດທີ່ເຂົ້າລະຫັດໄວ້. ແຕ່ລະຊິ້ນມີໂຄງສ້າງດັ່ງຕໍ່ໄປນີ້:

[encrypted payload length][length tag][encrypted payload][payload tag]

 

ຄວາມຍາວຂອງ payload ແມ່ນຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ 2-byte big-endian ຈຳກັດຢູ່ທີ່ 0x3FFF. ສອງບິດທີ່ສູງກວ່າຈະຖືກສະຫງວນໄວ້ ແລະຕ້ອງຖືກຕັ້ງເປັນສູນ. ດັ່ງນັ້ນການໂຫຼດແມ່ນຈຳກັດຢູ່ທີ່ 16*1024 – 1 bytes.

ການປະຕິບັດການເຂົ້າລະຫັດ/ຖອດລະຫັດ AEAD ທໍາອິດໃຊ້ການນັບ nonce ເລີ່ມຈາກ 0. ຫຼັງຈາກແຕ່ລະການປະຕິບັດການເຂົ້າລະຫັດ/ຖອດລະຫັດ, nonce ຈະຖືກເພີ່ມຂຶ້ນໂດຍອັນໜຶ່ງຄືກັບວ່າມັນເປັນຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ. ໃຫ້ສັງເກດວ່າແຕ່ລະ TCP chunk ກ່ຽວຂ້ອງກັບການປະຕິບັດການເຂົ້າລະຫັດ / ຖອດລະຫັດ AEAD ສອງອັນ: ຫນຶ່ງສໍາລັບຄວາມຍາວ payload, ແລະຫນຶ່ງສໍາລັບ payload. ດັ່ງນັ້ນແຕ່ລະ chunk ເພີ່ມຂຶ້ນ nonce ສອງເທື່ອ.

ເລີ່ມການທົດລອງໃຊ້ຟຣີ 5 ມື້ຂອງທ່ານ