Shadowsocks დოკუმენტაცია

AEAD

AEAD ნიშნავს ავთენტიფიცირებულ დაშიფვრას ასოცირებული მონაცემებით. AEAD შიფრები ერთდროულად უზრუნველყოფს კონფიდენციალურობას, მთლიანობას და ავთენტურობას. მათ აქვთ შესანიშნავი შესრულება და ენერგოეფექტურობა თანამედროვე აპარატურაზე. მომხმარებლებმა უნდა გამოიყენონ AEAD შიფრები შეძლებისდაგვარად.

რეკომენდებულია შემდეგი AEAD შიფრები. Shadowsocks-ის შესაბამისმა განხორციელებებმა უნდა უზრუნველყოს AEAD_CHACHA20_POLY1305. ტექნიკის AES აჩქარების მქონე მოწყობილობების დანერგვა ასევე უნდა დანერგოს AEAD_AES_128_GCM და AEAD_AES_256_GCM.

 

 

 

სახელი

Alias

გასაღების ზომა

მარილის ზომა

Nonce ზომა

საკვანძო ზომა

AEAD_CHACHA20_POLY1305

ჭაჭა20-იეტფ-პოლი1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-გსმ

32

32

12

16

AEAD_AES_128_GCM

aes-128-გსმ

16

16

12

16

Გთხოვთ მიმართეთ IANA AEAD რეესტრი დასახელების სქემისა და სპეციფიკაციისთვის.

გასაღების წარმოშობა

ძირითადი გასაღები შეიძლება იყოს შეყვანილი უშუალოდ მომხმარებლისგან ან გენერირებული პაროლიდან.

HKDF_SHA1 არის ფუნქცია, რომელიც იღებს საიდუმლო გასაღებს, არასაიდუმლო მარილს, ინფორმაციის სტრიქონს და აწარმოებს ქვეგასაღებს, რომელიც კრიპტოგრაფიულად ძლიერია მაშინაც კი, თუ შეყვანის საიდუმლო გასაღები სუსტია.

HKDF_SHA1(გასაღები, მარილი, ინფორმაცია) => ქვეგასაღები

ინფორმაციის სტრიქონი აკავშირებს გენერირებულ ქვეკლავიშს კონკრეტულ აპლიკაციის კონტექსტთან. ჩვენს შემთხვევაში, ეს უნდა იყოს სტრიქონი „ss-subkey“ ბრჭყალების გარეშე.

ჩვენ ვიღებთ თითო სესიის ქვეკლავიშს წინასწარ გაზიარებული ძირითადი გასაღებიდან HKDF_SHA1-ის გამოყენებით. მარილი უნდა იყოს უნიკალური წინასწარ გაზიარებული ძირითადი გასაღების მთელი ცხოვრების განმავლობაში.

ავთენტიფიცირებული დაშიფვრა/გაშიფვრა

AE_encrypt არის ფუნქცია, რომელიც იღებს საიდუმლო გასაღებს, არასაიდუმლო ნონსს, შეტყობინებას და აწარმოებს შიფრულ ტექსტს და ავთენტიფიკაციის ტეგს. Nonce უნდა იყოს უნიკალური მოცემული გასაღებისთვის თითოეულ გამოძახებაში.

AE_encrypt (გასაღები, არაერთი, შეტყობინება) => (შიფრული ტექსტი, ტეგი)

 

AE_decrypt არის ფუნქცია, რომელიც იღებს საიდუმლო გასაღებს, არასაიდუმლო ნონსს, შიფრულ ტექსტს, ავთენტიფიკაციის ტეგს და აწარმოებს ორიგინალურ შეტყობინებას. თუ რომელიმე შეყვანის გაყალბება მოხდება, გაშიფვრა ვერ მოხერხდება.

AE_decrypt (გასაღები, არაერთი, შიფრული ტექსტი, ტეგი) => შეტყობინება

TCP

AEAD დაშიფრული TCP ნაკადი იწყება შემთხვევით გენერირებული მარილით, რათა გამოიტანოს თითო სესიის ქვეკლავი, რასაც მოჰყვება ნებისმიერი რაოდენობის დაშიფრული ბლოკები. თითოეულ ნაწილს აქვს შემდეგი სტრუქტურა:

[დაშიფრული დატვირთვის სიგრძე] [სიგრძის ტეგი] [დაშიფრული დატვირთვა] [გადატვირთვის ტეგი]

 

დატვირთვის სიგრძე არის 2-ბაიტი დიდი-ენდიანის ხელმოუწერელი მთელი რიცხვი, რომელიც დახურულია 0x3FFF-ზე. უმაღლესი ორი ბიტი დაცულია და უნდა დაყენდეს ნულზე. ამიტომ დატვირთვა შემოიფარგლება 16*1024 – 1 ბაიტით.

პირველი AEAD დაშიფვრის/გაშიფვრის ოპერაცია იყენებს 0-დან დაწყებული დამთვლელი ნონსს. ყოველი დაშიფვრის/გაშიფვრის ოპერაციის შემდეგ, ნონსი იზრდება ერთით, თითქოს ეს იყოს ხელმოუწერელი პატარა-ენდიანი მთელი რიცხვი. გაითვალისწინეთ, რომ თითოეული TCP ბლოკი მოიცავს ორ AEAD დაშიფვრის/გაშიფვრის ოპერაციას: ერთი დატვირთვის სიგრძისთვის და ერთი დატვირთვისთვის. ამიტომ თითოეული ბლოკი ორჯერ ზრდის ნონსს.

TCP

AEAD დაშიფრული TCP ნაკადი იწყება შემთხვევით გენერირებული მარილით, რათა გამოიტანოს თითო სესიის ქვეკლავი, რასაც მოჰყვება ნებისმიერი რაოდენობის დაშიფრული ბლოკები. თითოეულ ნაწილს აქვს შემდეგი სტრუქტურა:

[დაშიფრული დატვირთვის სიგრძე] [სიგრძის ტეგი] [დაშიფრული დატვირთვა] [გადატვირთვის ტეგი]

 

დატვირთვის სიგრძე არის 2-ბაიტი დიდი-ენდიანის ხელმოუწერელი მთელი რიცხვი, რომელიც დახურულია 0x3FFF-ზე. უმაღლესი ორი ბიტი დაცულია და უნდა დაყენდეს ნულზე. ამიტომ დატვირთვა შემოიფარგლება 16*1024 – 1 ბაიტით.

პირველი AEAD დაშიფვრის/გაშიფვრის ოპერაცია იყენებს 0-დან დაწყებული დამთვლელი ნონსს. ყოველი დაშიფვრის/გაშიფვრის ოპერაციის შემდეგ, ნონსი იზრდება ერთით, თითქოს ეს იყოს ხელმოუწერელი პატარა-ენდიანი მთელი რიცხვი. გაითვალისწინეთ, რომ თითოეული TCP ბლოკი მოიცავს ორ AEAD დაშიფვრის/გაშიფვრის ოპერაციას: ერთი დატვირთვის სიგრძისთვის და ერთი დატვირთვისთვის. ამიტომ თითოეული ბლოკი ორჯერ ზრდის ნონსს.

დაიწყეთ თქვენი 5-დღიანი უფასო საცდელი ვერსია