
एक एन्क्रिप्टेड Git remote helper जो rust में लागू किया गया है
THIS IS AN EXPERIMENTAL PROJECT, there hasnt been a formal security audit. DO NOT rely on this for any critical repositories.
git-remote-pqcrypt एक एन्क्रिप्टेड Git रिमोट हेल्पर है जो gcrypt के समान है। यह Git पैकफ़ाइलों और रिपॉज़िटरी मेटाडेटा को आराम की स्थिति में एन्क्रिप्टेड रखता है। पहुँच पोस्ट-क्वांटम XWing रैपिंग के साथ होती है।
वर्तमान क्रेट संस्करण: 0.2.0।
git-remote-pqcrypt init एक रिपॉज़िटरी मास्टर कुंजी बनाता है।git-remote-pqcrypt रिमोट हेल्पर के माध्यम से pqcrypt का उपयोग करता है।रिमोट स्टोरेज की उदाहरण फ़ाइलें:
keys.json
manifest.enc
objects/
pack-.....pack.enc
keys.json में मेटाडेटा और एन्क्रिप्टेड मास्टर कुंजी रैपिंग होती है।
Git से डिफ़ॉल्ट बिल्ड स्थापित करें:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked
यह git-remote-pqcrypt को Cargo की बाइनरी निर्देशिका, आमतौर पर ~/.cargo/bin में स्थापित करता है।
सुनिश्चित करें कि Cargo की बाइनरी निर्देशिका आपके PATH में है, फिर जाँचें कि यह काम करता है:
git-remote-pqcrypt --help
डिफ़ॉल्ट बिल्ड में स्थानीय फ़ाइलसिस्टम और Git-समर्थित भंडारण समर्थन शामिल है।
Unix-जैसे सिस्टम पर SFTP समर्थन के साथ स्थापित करने के लिए:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
sftp सुविधा वर्तमान में Windows पर समर्थित नहीं है।
डिफ़ॉल्ट बैकएंड समर्थन के साथ बिल्ड करें:
cargo build --release
इसमें स्थानीय फ़ाइलसिस्टम और Git-समर्थित भंडारण समर्थन शामिल है।
Unix-जैसे सिस्टम पर SFTP समर्थन के साथ बिल्ड करने के लिए:
cargo build --release --features sftp
बाइनरी को अपने PATH में स्थापित करें:
sudo cp target/release/git-remote-pqcrypt /usr/local/bin/
बाइनरी का नाम git-remote-pqcrypt ही रहना चाहिए, क्योंकि Git git-remote-[name] ढूंढकर रिमोट हेल्पर ढूंढता है।
जाँचें कि यह काम करता है:
git-remote-pqcrypt --help
git स्थापित होना चाहिए--features sftp के साथ बिल्ड करना आवश्यक है और यह वर्तमान में केवल Unix-जैसे सिस्टम पर उपलब्ध हैकिसी मौजूदा Git रिपॉज़िटरी में जाएँ या एक नई बनाएँ।
pqcrypt भंडारण प्रारंभ करें।
स्थानीय पथ:
git-remote-pqcrypt init pqcrypt:///path/to/encrypted-store
SFTP के लिए sftp सुविधा के साथ बिल्ड करना आवश्यक है और यह वर्तमान में केवल Unix-जैसे सिस्टम पर समर्थित है:
git-remote-pqcrypt init pqcrypt::sftp://[email protected]/path/to/store
Git-समर्थित:
git-remote-pqcrypt init pqcrypt::[email protected]:org/store.git
यदि कोई निजी कुंजी मौजूद नहीं है, तो ~/.config/pqcrypt/key पर एक बनाई जाती है और सार्वजनिक कुंजी मुद्रित की जाती है।
आपसे एक वैकल्पिक कुंजी टिप्पणी, उदाहरण के लिए personal या work-laptop, पूछी जाएगी।
init के बाद, pqcrypt नाम का एक Git रिमोट जोड़ा जाता है:
git remote -v
उदाहरण:
pqcrypt pqcrypt::/path/to/encrypted-store (fetch)
pqcrypt pqcrypt::/path/to/encrypted-store (push)
git push pqcrypt main
git clone pqcrypt::[email protected]:Torm0r/pqcrypt-test.git my-clone
उन्हें इसके साथ एक कीपेयर उत्पन्न करना होगा:
git-remote-pqcrypt keygen
वे अपनी सार्वजनिक कुंजी इसके साथ प्राप्त कर सकते हैं:
git-remote-pqcrypt pubgen ~/.config/pqcrypt/key
या वे keygen द्वारा मुद्रित सार्वजनिक कुंजी कॉपी कर सकते हैं।
फिर एक मौजूदा अधिकृत उपयोगकर्ता उन्हें रिपॉज़िटरी में जोड़ता है:
git-remote-pqcrypt add-user <base64-public-key>
अधिक विकल्पों के लिए इसे चलाएँ:
git-remote-pqcrypt add-user -h
डिफ़ॉल्ट रूप से, add-user एक स्थानीय Git रिमोट ढूंढता है जिसका URL pqcrypt से शुरू होता है और वहाँ सार्वजनिक कुंजी जोड़ता है।
pqcrypt सामान्य push को force push से Git refspec द्वारा अलग करता है।
सामान्य push की फ़ास्ट-फ़ॉरवर्ड जाँच की जाती है और यदि वे रिमोट इतिहास को अधिलेखित करेंगे तो अस्वीकार कर दिए जाते हैं।
Git git-remote-pqcrypt बाइनरी के माध्यम से pqcrypt को एक रिमोट हेल्पर के रूप में आमंत्रित करता है।
जब Git द्वारा आमंत्रित किया जाता है, तो हेल्पर Git द्वारा उपयोग किए जाने वाले रिमोट-हेल्पर तर्क आकार की अपेक्षा करता है, उदाहरण के लिए:
git-remote-pqcrypt origin pqcrypt::/path/to/store
प्रत्यक्ष CLI उपकमांड जैसे init, add-user, keygen, pubgen, और help को सामान्य उपयोगकर्ता कमांड माना जाता है, रिमोट-हेल्पर आह्वान नहीं।
बाइनरी प्रवेश बिंदु लाइब्रेरी रनटाइम को सौंपता है, इसलिए एप्लिकेशन तर्क क्रेट लाइब्रेरी के साथ-साथ स्थापित बाइनरी के माध्यम से भी परीक्षण योग्य है।
Git-समर्थित भंडारण URL के लिए, pqcrypt सिस्टम कैश निर्देशिका के अंतर्गत एक स्थानीय कैश बनाए रखता है, उदाहरण के लिए:
~/.cache/pqcrypt/
pqcrypt संचालन से पहले अंतर्निहित Git रिपॉज़िटरी से एन्क्रिप्टेड स्थिति प्राप्त करता है और अद्यतन के बाद एन्क्रिप्टेड स्थिति को push करता है।
यदि कैश भ्रष्टाचार या कैश हानि का पता चलता है, तो pqcrypt अंतर्निहित Git रिपॉज़िटरी से पुनः प्राप्त करके स्वचालित रूप से कैश को पुनः बनाने का प्रयास करता है।
pqcrypt::, pqcrypt://, और pqcrypt: सभी स्वीकार किए जाते हैं और आंतरिक रूप से pqcrypt:: में सामान्यीकृत होते हैं।
ये समतुल्य हैं:
git-remote-pqcrypt init pqcrypt:///path/to/store
git-remote-pqcrypt init pqcrypt::/path/to/store
git-remote-pqcrypt init pqcrypt:/path/to/store
बैकएंड भंडारण पथ द्वारा निर्धारित किया जाता है:
उदाहरण:
pqcrypt::/tmp/store
pqcrypt:///tmp/store
pqcrypt:/tmp/store
pqcrypt::[email protected]:org/store.git
pqcrypt::https://github.com/org/store.git
pqcrypt::sftp://[email protected]/path/to/store
डिक्रिप्शन के दौरान pqcrypt इस क्रम में एक निजी कुंजी ढूंढता है:
PQCRYPT_KEY_PATH पर्यावरण चरgit config pqcrypt.keypath.pqcrypt/key~/.config/pqcrypt में कोई भी मिलान करने वाली कुंजी फ़ाइल, जहाँ सभी का परीक्षण किया जाता हैमल्टी-कुंजी सेटअप के लिए, उदाहरण के लिए कार्य और व्यक्तिगत कुंजियाँ:
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
कुंजी वह होनी चाहिए जिसका उपयोग init के दौरान किया गया था या add-user के माध्यम से जोड़ा गया था।
पूर्ण परीक्षण सूट चलाएँ:
cargo test
Unix-जैसे सिस्टम पर SFTP सक्षम के साथ चलाएँ:
cargo test --features sftp
कुछ एंड-टू-एंड परीक्षण जो Unix-जैसे स्थानीय पथ व्यवहार पर निर्भर करते हैं, Windows पर अनदेखा किए जाते हैं।
GitHub Actions Linux, macOS, और Windows पर प्रोजेक्ट बनाता है। वर्कफ़्लो आर्टिफैक्ट में CI रन से बाइनरी हो सकती है, लेकिन ये आधिकारिक रिलीज़ नहीं हैं।
XChaCha20Poly1305 का उपयोग करके एन्क्रिप्ट की जाती है।XWing का उपयोग करके उपयोगकर्ताओं के लिए लपेटी जाती है।0600 अनुमतियों के साथ बनाई जाती हैं।sftp सुविधा के पीछे है और वर्तमान में Windows पर समर्थित नहीं है।ssh और git स्थापित होना चाहिए।| पैटर्न | बैकएंड | नोट्स |
|---|
/local/path | स्थानीय फ़ाइलसिस्टम | डिफ़ॉल्ट |
git@host:, *.git, https://git* | Git-समर्थित | डिफ़ॉल्ट |
sftp:// या ssh:// | SFTP | --features sftp आवश्यक; केवल Unix-जैसे सिस्टम |