VPN ऐप्स के लिए पुनरुत्पाद्य बिल्ड: मिलान क्या साबित करता है
मेल खाता पुनर्निर्माण वितरित बाइनरी को घोषित स्रोत और टूल्स से जोड़ता है। यह उस बाइनरी के पीछे की VPN सेवा या उसके लॉग के बारे में कुछ नहीं कहता।
पुनरुत्पाद्यता आपूर्ति-शृंखला का एक गुण है: समान घोषित इनपुट से समान आर्टिफ़ैक्ट बनना चाहिए। VPN क्लाइंट के लिए यह कथन आपके द्वारा डाउनलोड किए गए इंस्टॉलर को ऐसे स्रोत और टूलचेन से बाँधता है जिसे कोई भी फिर से बना सकता है। यह उस सेवा के बारे में कुछ नहीं कहता जिससे क्लाइंट जुड़ता है।
इसलिए उपयोगी प्रश्न संकीर्ण और उत्तर-योग्य है। क्या प्रोजेक्ट कोई प्रक्रिया प्रकाशित करता है, और क्या आपका विशिष्ट आर्टिफ़ैक्ट उससे मेल खाता है?
कहाँ बिल्ड नियतात्मक रहना बंद कर देता है
कंपाइलर टाइमस्टैम्प, निरपेक्ष पथ और बिल्ड होस्ट के नाम अंदर डालते हैं, जब तक उन्हें ऐसा करने से रोका न जाए। आर्काइव फ़ाइलों का क्रम और संशोधन समय दर्ज करते हैं, लिंकर टूलचेन संस्करण के साथ अपना आउटपुट बदलते हैं, और समानांतर संपीड़न ब्लॉकों को फिर से क्रमबद्ध कर सकता है। इनमें से कोई भी एक कारण एक ही स्रोत के दो बिल्ड को बाइट्स में अलग कर देता है, बिना कुछ भयावह हुए। नियतत्व बिल्ड में अभियांत्रिकी से डाला जाता है, डिफ़ॉल्ट रूप से कभी विरासत में नहीं मिलता।
जो प्रोजेक्ट पुनरुत्पाद्यता का दावा करता है, उसे अपने लागू सामान्यीकरण का नाम बताना होगा: स्थिर टाइमस्टैम्प, मैप किए गए पथ, क्रमबद्ध आर्काइव प्रविष्टियाँ, स्थिर कंपाइलर और निर्भरता संस्करण। उस सूची के बिना किसी असंगति की व्याख्या नहीं हो सकती, क्योंकि वैध भिन्नता का क्षेत्र अपरिभाषित है।
घोषित इनपुट भी पूर्ण होने चाहिए। टैग के बिना रिपॉज़िटरी URL कोई संशोधन नहीं है, hash के बिना लॉकफ़ाइल निर्भरता-समुच्चय नहीं है, और रनटाइम पर टूल डाउनलोड करने वाली बिल्ड स्क्रिप्ट का ऐसा इनपुट होता है जिसे कोई स्थिर नहीं कर सकता। हर अंतराल बाद में एक फ़र्क़ बन जाता है। कुछ भी तुलना करने से पहले सूची पूरी करें, क्योंकि अपूर्ण सूची ऐसे विफल नहीं हो सकती जिसका कोई अर्थ हो।
| Input | How it drifts | What pins it |
|---|---|---|
| Source | Branch moves after release | Commit hash in the build metadata |
| Toolchain | Compiler patch level differs | Container image digest |
| Packaging | Archive order and mtimes vary | Normalised archive settings |
तुलना वास्तव में क्या जाँचती है
एक स्वतंत्र पक्ष घोषित परिवेश में फिर से बनाता है और आउटपुट की तुलना प्रकाशित आर्टिफ़ैक्ट से करता है। बिट-समानता मज़बूत रूप है; एक प्रलेखित सामान्यीकरण चरण, जिसमें दर्ज फ़र्क़ को उलटा जाता है और परिणाम फिर मेल खाते हैं, कमज़ोर पर फिर भी उपयोगी रूप है।
तुलना बाइनरी के बारे में है। हस्ताक्षर एक अलग प्रश्न का उत्तर देता है: वह किसी रिलीज़ को कुंजी से और कुंजी को पहचान से जोड़ता है, और किसी प्रोजेक्ट के पास ऐसे आर्टिफ़ैक्ट पर वैध हस्ताक्षर हो सकते हैं जिन्हें किसी ने फिर से नहीं बनाया। दोनों जाँचें एक-दूसरे को बदलने के बजाय ऊपर-ऊपर जुड़ती हैं।
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
इंस्टॉल करने से पहले दोनों चलाएँ, और hash की तुलना उसी रिलीज़ और प्लेटफ़ॉर्म के लिए प्रकाशित hash से करें। विक्रेता के पृष्ठ से मेल खाता hash साबित करता है कि डाउनलोड अक्षुण्ण पहुँचा; विक्रेता के प्रकाशित hash से मेल खाती पुनर्निर्मित बाइनरी इस बात का अधिक मज़बूत प्रमाण देती है कि वह कैसे बनी।
असंगति छेड़छाड़ का प्रमाण क्यों नहीं है
अधिकांश असंगतियाँ ऐसे इनपुट से आती हैं जिसे किसी ने नियंत्रित नहीं किया। कंपाइलर का अलग पैच रिलीज़, डिबग प्रतीकों में रिसा बिल्ड पथ, क्रम बदलने वाला लोकेल, या तुलना के बाद लागू पैकेजिंग चरण — सभी ईमानदार काम से अलग hash पैदा करते हैं।
इसलिए असंगति को कहानी बनने से पहले प्रलेखित प्रक्रिया के सामने पढ़ना होता है। यदि प्रक्रिया सब कुछ स्थिर करती है और फ़र्क़ अव्याख्यायित रहता है, तो यह एक वास्तविक खोज है जिसे प्रोजेक्ट के सामने रखना चाहिए। यदि प्रक्रिया पैकेजिंग पर चुप है, तो फ़र्क़ पूरी तरह अपेक्षित हो सकता है।
यहाँ समरूपता भी मायने रखती है: मिलान यह साबित नहीं करता कि स्रोत दोषों से मुक्त है, केवल यह कि बाइनरी उससे मेल खाती है। अच्छी तरह ऑडिट किया गया कोड और पुनरुत्पाद्य कोड अलग गुण हैं, और प्रोजेक्ट एक के बिना दूसरा रख सकता है।
दावा ऐप के पीछे की सेवा के बारे में क्या कहता है
क्लाइंट आपके डिवाइस पर एक प्रोग्राम है; सेवा कहीं और के सर्वर, खाता प्रणालियाँ और प्रतिधारण नीतियाँ है। पुनरुत्पाद्यता पहले को सीमित करती है और दूसरे के बारे में कुछ नहीं कहती, चाहे इंस्टॉलर कितनी ही सावधानी से सत्यापित हो।
एंडपॉइंट कॉन्फ़िगरेशन इंस्टॉल के बाद भी बदल सकता है, दूरस्थ सेटिंग्स या प्रदाता-नियंत्रित प्रोफ़ाइल के माध्यम से। वे परिवर्तन नेटवर्क से आते हैं और जुड़ने से पहले आपके द्वारा गणना किए गए किसी भी hash में शामिल नहीं होते।
दावे को उसके वास्तविक दायरे में पढ़ें, फिर पड़ोसी प्रश्न को अलग से जाँचें: प्रदाता क्या दर्ज करता है, और किस अधिकारक्षेत्र के तहत अनुरोधों का उत्तर देता है। एक सत्यापित बाइनरी और एक असत्यापित सेवा साथ-साथ मौजूद रह सकती हैं, और यही वह स्थिति है जिसे आपूर्ति-शृंखला जाँच दृश्यमान बनाने के लिए है, ठीक करने के लिए नहीं।