Git में क्रिप्टोग्राफिक रूप से साइन और टैग पर हस्ताक्षर करने के क्या फायदे और नुकसान हैं?


109

तो किसी सहकर्मी ने मेरे काम की समीक्षा की, और उसने मुझसे कहा कि मुझे हमेशा अपने कमिट और टैग को क्रिप्टोग्राफिक रूप से साइन करना चाहिए। यह पूछे जाने पर कि वह मुझे यह क्यों नहीं समझाते, और कहा कि "यह सिर्फ एक अच्छी बात है"।

एक स्पष्ट चिंपांज़ी परिदृश्य से बचने की कोशिश कर रहा हूं, मुझे वास्तव में क्यों करना चाहिए? क्या वास्तव में इतने सारे अलग-अलग फायदे हैं और कोई नुकसान नहीं है?

ऐसे कौन से व्यावहारिक कारण हैं जो मुझे मेरे द्वारा किए गए हर कमिटमेंट और टैग पर हस्ताक्षर करना चाहते हैं?


3
मुझे लगता है कि ऐसा है कि आप को प्रतिबद्ध करने के लिए एक कागज निशान है। मैंने पहले कभी भी एक कमिट पर हस्ताक्षर नहीं किया है, या तो गिट या किसी अन्य स्रोत नियंत्रण प्रणाली के साथ। यदि आपके सहकर्मी का मानना ​​है कि आपकी कंपनी को धोखाधड़ी का खतरा है, तो संभवतः बड़ी सुरक्षा समस्याएं हैं।
जेम्स

@ नाम: यह कंपनी का काम नहीं है, लेकिन मैं कुछ खुले और बंद स्रोत परियोजनाओं में भाग लेता हूं।
मदार उचिहा

@ नाम: "बड़ी सुरक्षा समस्याएं" --- क्या पसंद है? हस्ताक्षर करना उन्हें हल करने का तकनीकी तरीका नहीं है?
zerkms

8
mikegerwitz.com/papers/git-horror-story.html हस्ताक्षरित कमिट और टैग के उपयोग के मामले के लिए एक प्रारंभिक बिंदु है।

1
@ नाम जब आप अपने एसवीएन खाते का उपयोग करते हैं, तो आप अपनी प्रतिबद्धता पर हस्ताक्षर करते हैं। जब आप अपने git ग्लोबल कॉन्फिग के साथ कमिट करते हैं, तो आप केवल इस बात की पुष्टि करते हैं कि आप लेखक हैं।
फ्लोरियन मार्गाइन

जवाबों:


102

(यह काफी हद तक ए गेट हॉरर स्टोरी: रिपोजिटरी इंटिग्रिटी विथ साइन्ड कमिट्स -बहुत अच्छा पढ़ा गया है, और इससे अधिक जानकारी कि मैं जवाब में रख सकूं।)

ऐसे कई तरीके हैं जिनमें एक git रिपॉजिटरी से समझौता किया जा सकता है (यह सुरक्षा दोष नहीं है, बस जीवन का एक तथ्य है - इस वजह से git का उपयोग करने से बचना चाहिए)। उदाहरण के लिए, किसी ने आपके रिपॉजिटरी को आपके होने का दावा करने के लिए धकेल दिया होगा। या उस मामले के लिए, कोई व्यक्ति आपके होने का दावा करने वाले किसी अन्य व्यक्ति के भंडार में धकेल सकता है (कोई व्यक्ति आपके स्वयं के भंडार पर भी आपको होने का दावा कर सकता है)। यह डीवीसीएस में जीवन का सिर्फ एक हिस्सा है।

एक उदाहरण के रूप में:

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com

वहाँ, मैं अपना git कॉन्फ़िगरेशन बदल कर दिखा रहा हूँ कि मैं आप हूँ। और अब मैं दूर कर सकता हूं और उन लोगों को किसी भी तरह से उत्पादन निर्माण में अपना रास्ता बनाने दे सकता हूं, और ऐसा लगता है कि आपने ऐसा किया है।

कमिट्स (और टैग) पर हस्ताक्षर करने के साथ, कोई यह साबित कर सकता है कि कुछ कमिट और टैग्स आप से थे (और जिन चीजों पर हस्ताक्षर नहीं किए गए हैं, उन्हें इसे प्रोडक्शन बिल्ड में नहीं बनाना चाहिए)। यह वास्तव में यह सब करने के लिए महत्वपूर्ण है - हस्ताक्षर करने के द्वारा आप ने कहा है कि यह आपका काम है।

"आपका काम" पहलू विशेष रूप से लिनक्स कर्नेल (और इस तरह से गिट) में महत्वपूर्ण है जो कभी-कभी कॉपीराइट के मुकदमों से प्रभावित होता है। हस्ताक्षर करने से आप कहते हैं कि आपके पास सॉफ़्टवेयर का अधिकार है - यह मूल को ट्रैक करता है। हो सकता है कि आपके पास उस स्रोत तक कोई पहुंच न हो जो कॉपीराइट के रूप में दावा किया जा रहा है और दावा आधारहीन है। यह हो सकता है कि कंपनी यह भूल गई कि आप कुछ साल पहले उनके लिए काम कर रहे थे और उनकी दिशा के तहत कर्नेल में सामग्री को जोड़ा गया था, या जो भी हो।

कुछ वाद-विवाद होता है जैसे कि हर प्रतिबद्धता पर हस्ताक्षर किए जाने चाहिए। से GPG हस्ताक्षर करने Git के लिए प्रतिबद्ध? ('09 में वापस), लिनुस ने लिखा:

प्रत्येक प्रतिबद्ध पर हस्ताक्षर करना पूरी तरह से मूर्खता है। इसका सिर्फ इतना अर्थ है कि आप इसे स्वचालित करते हैं, और आप हस्ताक्षर कम मूल्य के बनाते हैं। यह किसी भी वास्तविक मूल्य को नहीं जोड़ता है, क्योंकि SHA1 के काम के git DAG- श्रृंखला के बाद से, आपको केवल कभी भी एक से सभी आने योग्य बनाने के लिए एक हस्ताक्षर की आवश्यकता होती है, जो कि प्रभावी रूप से उस एक द्वारा कवर किया जाता है। इसलिए प्रत्येक कमिट पर हस्ताक्षर करने से बिंदु गायब है।

Git में साइन करने पर विचारों के बारे में बहुत कुछ वहां भी पढ़ा जा सकता है।

इसने कहा, इसने गिट रास्ते में अपना रास्ता बना लिया।

बहुसंख्यक आम सहमति प्रतीत होती है कि हस्ताक्षर करना अनावश्यक है, लेकिन टैग पर हस्ताक्षर करना बहुत अच्छा है। शीर्ष पर लिंक की गई ब्लॉग पोस्ट बताती है कि किसी को भी सब कुछ पर हस्ताक्षर करना चाहिए। जैसा कि मैंने कहा, इस बारे में कुछ बहस है कि क्या हर कमिट जरूरी है या नहीं।

"हर प्रतिबद्ध बहस पर हस्ताक्षर करने" की कुंजी शायद आपके द्वारा उपयोग किए जाने वाले वर्कफ़्लो के साथ करना है। अधिकांश लोग अपने स्थानीय रेपो में कमिट्स का एक गुच्छा बनाते हैं, और फिर उस सेट को धक्का देते हैं। अंतिम संग्रह को टैग करने के लिए पर्याप्त होना चाहिए (यह मानते हुए, कि, आप सुनिश्चित करते हैं कि सभी परिवर्तन सही हैं)। यदि आप एक ऐसे वातावरण में काम कर रहे हैं, जहाँ बहुत सारे कमिट्स इधर-उधर घूम रहे हैं, तो टैग और कमिट के बीच अंतर कम हो जाता है ... विशिष्ट-और साइनिंग कमिट्स अधिक उपयोगी हो सकते हैं।


5
यह पर्याप्त हो सकता है (केवल पिछले एक को टैग करने के लिए), लेकिन आप हर कमिट को टैग क्यों नहीं करेंगे ?
hayd

3
एक आलसी कमीने के रूप में जो टैग का उपयोग नहीं करता है, मैं पिछली टिप्पणी को अपडेट कर रहा हूं। मेरे कार्य केंद्र पर git config में commit.gpgsign = trueऔर मेरे पास कोई नुकसान नहीं है। हालांकि यह मूर्खतापूर्ण हो सकता है, यह बहुत महंगा नहीं लगता है।
२२:५० पर pnovotnak

3
मैं इस पर @pnovotnak के साथ जा रहा हूं, आप ऐसा क्यों नहीं करेंगे? मेरा मतलब है कि मैं अपने कमिट पर हस्ताक्षर करता हूं और एक अन्य डेवलपर उसी प्रोजेक्ट पर नहीं है, जो परवाह करता है? लेकिन अगर कोई हैकर मेरी पहचान चुराने की कोशिश करता है तो मैं सिर्फ हस्ताक्षर करने की बात कह सकता हूं। मुझे लगता है कि केवल हस्ताक्षर करने के फायदे हैं। मैं इस बात से सहमत हूं कि आपके हस्ताक्षर को कम मूल्य मिलता है, लेकिन आप इस बारे में नहीं सोचने के लिए इसका व्यापार करते हैं। इसकी मूल रूप से मुक्त सुरक्षा है।
जेपी केर्क

2
मेरी निजी राय है कि हर कमिट पर हस्ताक्षर करना अच्छी बात है। मुझे पूरा यकीन है कि मेरा हस्ताक्षर मेरे साथ आया था, जबकि वेनिला गिट के साथ एक लेखक को लागू करने के लिए यह तुच्छ है। मैं इसे नि: शुल्क सत्यापन कहूंगा, यह वह व्यक्ति है जिसे आप अन्यथा मान लेते हैं, सुरक्षा नहीं।
14

1
@JosiahYoder। नहीं, जीथब पुश को मना नहीं करेगा क्योंकि ईमेल उनकी सेवा में नहीं है। मान लें कि आप अपना कोड किसी अन्य सेवा (यानी: बिटबकेट) पर होस्ट कर रहे थे और आप अपने रिपॉजिटरी को किसी अन्य प्रदाता के पास ले जाना चाहते थे। यह उपयोगकर्ताओं को एक रिपॉजिटरी (कई उपयोगकर्ताओं द्वारा कई हिट) या दर्पण बनाने आदि को रोकने से रोकेगा। यह डीवीसीएस की एक विशेषता है।
रिकी नोटारो-गार्सिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.