शॅडोसॉक्स दस्तऐवजीकरण
जलवाहतूक
AEAD
AEAD याचा अर्थ असोसिएटेड डेटासह ऑथेंटिकेटेड एनक्रिप्शन. AEAD सिफर एकाच वेळी गोपनीयता, अखंडता आणि सत्यता प्रदान करतात. आधुनिक हार्डवेअरवर त्यांच्याकडे उत्कृष्ट कार्यक्षमता आणि उर्जा कार्यक्षमता आहे. वापरकर्त्यांनी जेव्हा शक्य असेल तेव्हा AEAD सिफर वापरावे.
खालील AEAD सिफरची शिफारस केली जाते. अनुरूप Shadowsocks अंमलबजावणी 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-सबकी" स्ट्रिंग असणे आवश्यक आहे.
आम्ही HKDF_SHA1 वापरून पूर्व-सामायिक मास्टर की मधून प्रति-सत्र उपकी मिळवतो. पूर्व-सामायिक मास्टर कीच्या संपूर्ण आयुष्यात मीठ अद्वितीय असणे आवश्यक आहे.
प्रमाणीकृत एनक्रिप्शन/डिक्रिप्शन
AE_encrypt हे एक फंक्शन आहे जे एक गुप्त की, एक गुप्त नॉन्स, संदेश घेते आणि सिफरटेक्स्ट आणि प्रमाणीकरण टॅग तयार करते. प्रत्येक आमंत्रणात दिलेल्या कीसाठी Nonce अद्वितीय असणे आवश्यक आहे.
AE_encrypt(की, nonce, संदेश) => (सिफरटेक्स्ट, टॅग)
AE_decrypt हे एक फंक्शन आहे जे गुप्त की, गैर-गुप्त नॉन्स, सिफरटेक्स्ट, एक प्रमाणीकरण टॅग घेते आणि मूळ संदेश तयार करते. कोणत्याही इनपुटमध्ये छेडछाड केल्यास, डिक्रिप्शन अयशस्वी होईल.
AE_decrypt(key, nonce, ciphertext, tag) => संदेश
टीसीपी
एईएडी एनक्रिप्टेड टीसीपी प्रवाह प्रति-सत्र उप-की प्राप्त करण्यासाठी यादृच्छिकपणे व्युत्पन्न केलेल्या मीठाने सुरू होतो, त्यानंतर कितीही एन्क्रिप्ट केलेले भाग असतात. प्रत्येक भागाची खालील रचना असते:
[एनक्रिप्टेड पेलोड लांबी][लांबीचा टॅग][एनक्रिप्टेड पेलोड][पेलोड टॅग]
पेलोड लांबी 2x0FFF वर कॅप केलेला 3-बाइट बिग-एंडियन अस्वाक्षरित पूर्णांक आहे. उच्च दोन बिट आरक्षित आहेत आणि शून्य वर सेट करणे आवश्यक आहे. पेलोड म्हणून 16*1024 - 1 बाइट्सपर्यंत मर्यादित आहे.
प्रथम AEAD एन्क्रिप्ट/डिक्रिप्ट ऑपरेशन 0 पासून सुरू होणारी मोजणी नॉन्स वापरते. प्रत्येक एनक्रिप्ट/डिक्रिप्ट ऑपरेशननंतर, नॉन्सला एकाने वाढवले जाते जणू ते एक स्वाक्षरी न केलेले लिटल-एंडियन पूर्णांक आहे. लक्षात घ्या की प्रत्येक TCP भागामध्ये दोन AEAD एन्क्रिप्ट/डिक्रिप्ट ऑपरेशन्स समाविष्ट आहेत: एक पेलोड लांबीसाठी आणि एक पेलोडसाठी. म्हणून प्रत्येक भाग नॉन्स दोनदा वाढवतो.
टीसीपी
एईएडी एनक्रिप्टेड टीसीपी प्रवाह प्रति-सत्र उप-की प्राप्त करण्यासाठी यादृच्छिकपणे व्युत्पन्न केलेल्या मीठाने सुरू होतो, त्यानंतर कितीही एन्क्रिप्ट केलेले भाग असतात. प्रत्येक भागाची खालील रचना असते:
[एनक्रिप्टेड पेलोड लांबी][लांबीचा टॅग][एनक्रिप्टेड पेलोड][पेलोड टॅग]
पेलोड लांबी 2x0FFF वर कॅप केलेला 3-बाइट बिग-एंडियन अस्वाक्षरित पूर्णांक आहे. उच्च दोन बिट आरक्षित आहेत आणि शून्य वर सेट करणे आवश्यक आहे. पेलोड म्हणून 16*1024 - 1 बाइट्सपर्यंत मर्यादित आहे.
प्रथम AEAD एन्क्रिप्ट/डिक्रिप्ट ऑपरेशन 0 पासून सुरू होणारी मोजणी नॉन्स वापरते. प्रत्येक एनक्रिप्ट/डिक्रिप्ट ऑपरेशननंतर, नॉन्सला एकाने वाढवले जाते जणू ते एक स्वाक्षरी न केलेले लिटल-एंडियन पूर्णांक आहे. लक्षात घ्या की प्रत्येक TCP भागामध्ये दोन AEAD एन्क्रिप्ट/डिक्रिप्ट ऑपरेशन्स समाविष्ट आहेत: एक पेलोड लांबीसाठी आणि एक पेलोडसाठी. म्हणून प्रत्येक भाग नॉन्स दोनदा वाढवतो.