
أداة مساعدة عن بعد مشفرة لـ Git مطبقة بلغة 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.أمثلة على ملفات التخزين عن بعد:
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.
لتثبيت مع دعم SFTP على أنظمة شبيهة بـ Unix:
cargo install --git https://github.com/Torm0r/git-remote-pqcrypt --locked --features sftp
ميزة sftp غير مدعومة حاليًا على Windows.
بناء مع دعم الخلفية الافتراضية:
cargo build --release
يتضمن هذا دعمًا لنظام الملفات المحلي والتخزين المدعوم بـ Git.
لبناء مع دعم SFTP على أنظمة شبيهة بـ Unix:
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.
بعد التهيئة، يتم إضافة مستودع بعيد باسم pqcrypt:
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 بين الدفع العادي والدفع القسري من خلال مرجع Git. يتم فحص الدفع العادي للتقدم السريع ويتم رفضه إذا كان سيؤدي إلى استبدال التاريخ البعيد.
يستدعي Git pqcrypt كمساعد عن بعد من خلال الثنائي git-remote-pqcrypt.
عند استدعائه بواسطة Git، يتوقع المساعد شكل وسيطة المساعد البعيد الذي يستخدمه Git، على سبيل المثال:
git-remote-pqcrypt origin pqcrypt::/path/to/store
يتم التعامل مع الأوامر الفرعية المباشرة عبر سطر الأوامر مثل init وadd-user وkeygen وpubgen وhelp كأوامر مستخدم عادية، وليست استدعاءات للمساعد عن بعد.
يفوض نقطة الدخول للثنائي وقت تشغيل المكتبة، لذا يمكن اختبار منطق التطبيق من خلال مكتبة الحزمة وكذلك من خلال الثنائي المثبت.
بالنسبة لعناوين URL للتخزين المدعوم بـ Git، يحتفظ pqcrypt بذاكرة تخزين مؤقت محلية تحت دليل ذاكرة التخزين المؤقت للنظام، على سبيل المثال:
~/.cache/pqcrypt/
يجلب pqcrypt الحالة المشفرة من مستودع Git الداعم قبل العمليات ويدفع الحالة المشفرة بعد التحديثات.
إذا تم اكتشاف تلف أو فقدان في ذاكرة التخزين المؤقت، يحاول 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_PATHgit config pqcrypt.keypath.pqcrypt/key في الدليل الحالي~/.config/pqcrypt، حيث يتم اختبار الكللإعدادات متعددة المفاتيح، على سبيل المثال مفاتيح العمل والشخصية:
git config pqcrypt.keypath ~/.config/pqcrypt/work-key
يجب أن يكون المفتاح واحدًا من تلك المستخدمة أثناء init أو تمت إضافته عبر add-user.
قم بتشغيل مجموعة الاختبار الكاملة:
cargo test
قم بتشغيل مع تمكين SFTP على أنظمة شبيهة بـ Unix:
cargo test --features sftp
يتم تجاهل بعض اختبارات النهاية إلى النهاية التي تعتمد على سلوك المسار المحلي لأنظمة شبيهة بـ Unix على Windows.
تبني GitHub Actions المشروع على Linux وmacOS وWindows. قد تحتوي قطع العمل في سير العمل على ثنائيات من تشغيلات CI، لكن هذه ليست إصدارات رسمية.
XChaCha20Poly1305.XWing.0600 على أنظمة شبيهة بـ Unix.sftp الاختيارية وغير مدعوم حاليًا على Windows.ssh وgit.| النمط | الخلفية | ملاحظات |
|---|
/local/path | نظام الملفات المحلي | افتراضي |
git@host:, *.git, https://git* | مدعوم بـ Git | افتراضي |
sftp:// أو ssh:// | SFTP | يتطلب --features sftp؛ أنظمة شبيهة بـ Unix فقط |