Shadowsocks ডকুমেন্টেশন
ন্যাভিগেশন
এএইডি
এএইডি অ্যাসোসিয়েটেড ডেটা সহ প্রমাণীকৃত এনক্রিপশনের জন্য দাঁড়িয়েছে। AEAD সাইফার একই সাথে গোপনীয়তা, অখণ্ডতা এবং সত্যতা প্রদান করে। আধুনিক হার্ডওয়্যারে তাদের চমৎকার কর্মক্ষমতা এবং পাওয়ার দক্ষতা রয়েছে। যখনই সম্ভব ব্যবহারকারীদের AEAD সাইফার ব্যবহার করা উচিত।
নিম্নলিখিত AEAD সাইফার সুপারিশ করা হয়. কমপ্লায়েন্ট শ্যাডোসক বাস্তবায়ন অবশ্যই AEAD_CHACHA20_POLY1305 সমর্থন করবে। হার্ডওয়্যার AES ত্বরণ সহ ডিভাইসগুলির জন্য প্রয়োগগুলি AEAD_AES_128_GCM এবং AEAD_AES_256_GCMও প্রয়োগ করা উচিত৷
নাম | উপনাম | কী আকার | লবণের আকার | ননস সাইজ | ট্যাগের আকার |
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 হল একটি ফাংশন যা একটি গোপন কী, একটি গোপন ননস, একটি বার্তা নেয় এবং সাইফারটেক্সট এবং একটি প্রমাণীকরণ ট্যাগ তৈরি করে। প্রতিটি আহ্বানে একটি প্রদত্ত কী-এর জন্য ননস অবশ্যই অনন্য হতে হবে।
AE_encrypt(কী, nonce, বার্তা) => (সাইফারটেক্সট, ট্যাগ)
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 এনক্রিপ্ট/ডিক্রিপ্ট অপারেশন জড়িত: একটি পেলোড দৈর্ঘ্যের জন্য এবং একটি পেলোডের জন্য। তাই প্রতিটি খণ্ড নন্সকে দ্বিগুণ করে।