ZKC ، Zero Knowledge Communications ، هي مجموعة من البرامج لتمكين الاتصالات الخاصة والآمنة بين أي عدد من الأطراف.
جناح ZKC هو أداة إثبات المفهوم! يعكس الكود هذا من خلال كونه متشابك إلى حد ما بدلاً من فصله تمامًا وبشكل صحيح. على الرغم من أننا انتهينا كثيرًا للتأكد من أن البتات المهمة صحيحة ، فمن المؤكد أنها أخطاء تتربص. سنأخذ بسعادة PRS التي تنقل ZKC إلى مشروع أكثر نضجًا.
من الجيد إنشاء مستخدم ZkServer وتسجيل الدخول لإنهاء عملية التثبيت. قم بإنشاء دليل ZkServer ونسخ ملف التكوين في مكانه ثم قم بتحرير ملف التكوين.
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.confهناك عنصران يجب النظر إليهما في ملف التكوين.
allowidentify = no
createpolicy = noالسماح لـ Iduday هو إعداد يخبر ZkServer بشكل صريح إذا كان يُسمح بتحديد نفسه للأطراف الخارجية. هذا المقبض موجود لتمكين الأنظمة المغلقة الحقيقية. عندما يتم ضبط هذا الإعداد على عدم وجود الطريقة الوحيدة للتواصل معه ، فإن وجود ZKClient قد تواصل مع ZkServer هذا قبل أو يستخدم ZkClient Zkimport لإدراج سجل هوية ZkServer في تكوينه. إذا تم تعيين هذا المقبض على نعم ، فسيسمح ZkServer باستعلامات هويته خلال مرحلة ما قبل الجلسة.
يحتوي CreatePolicy على ثلاثة إعدادات: نعم ، لا ورمز. عندما يتم ضبط CreatePolicy على عدم وجود طرف خارجي لا يمكن إنشاء حساب. إذا تم تعيين CreatePolicy على نعم ، يمكن لأي ZkClient إنشاء حساب على ZkServer هذا. وأخيراً إذا تم ضبط CreatePolicy على رمز ، فيجب على ZkClient توفير رمز رمز أثناء إنشاء الحساب. يمكن الحصول على هذا الرمز المميز من إدارة ZkServer. يمكن إنشاء رمز رمزًا كمسؤول ZkServer عن طريق تشغيل أمر ZkServerToken. سيؤدي ذلك إلى بصق رمز يمكن استخدامه مرة واحدة لإنشاء حساب.
ملاحظة: إذا كنت لا تستخدم دليل ~/.zkserver الافتراضي الذي تحتاجه لمراجعة جميع إدخالات أسماء الدليل/الملفات في ملف التكوين.
العناصر المتبقية في ملف التكوين هي توضيحية ذاتية للغاية.
ZkClient هو عميل اتصال IRSSI على حد سواء. سيجد مستخدمو IRSSI واجهة مألوفة.
إذا تم بدء تشغيل ZKClient لأول مرة ، فسيقوم بإنشاء ملف وتكوين افتراضي في ~/.zkclient/zkclient.conf . إذا كنت ترغب في إجراء تغييرات على ملف التكوين ، فيجب عليك الخروج من البرنامج ، وتعديل ملف التكوين وإعادة تشغيل ZKClient.
يمكن للإصدارات أكبر من 0.3.0 تصدير ملف التكوين الافتراضي باستخدام الطريقة التالية:
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.confقم بإنشاء دليل ZKClient ونسخ ملف التكوين في مكانه ثم قم بتحرير ملف التكوين.
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.confهناك عنصر واحد يجب النظر إليه في ملف التكوين.
savehistory = noSaveHistory هو بشكل افتراضي تعيين إلى لا. إذا كنت ترغب في الحصول على تاريخ مستمر (بعد الخروج من ZKClient) ، قم بتعيين هذا على نعم.
ملاحظة: إذا كنت لا تستخدم دليل ~/.zkclient الافتراضي الذي تحتاجه لمراجعة جميع إدخالات أسماء الدليل/الملفات في ملف التكوين.
العناصر المتبقية في ملف التكوين هي توضيحية ذاتية للغاية.
عند الإطلاق الأول لـ ZKClient ، سيطالب المستخدم بـ: اسم المستخدم ، Nick ، Server و Token. اسم المستخدم هو اسمك (على سبيل المثال alice mcalice) ، Nick هو Nick المفضل لديك كما يتم عرضه من قبل مستلمة (على سبيل المثال alice1337) ، الخادم هو عنوان ZkServer الخاص بك وأخيراً الرمز المميز هو مدير ZkServer الذي قدمه الرمز المميز من أجل إنشاء حساب (إذا لزم الأمر). بمجرد اكتمال هذه الخطوة ، يمكنك الآن التواصل مع ZkServer.
في هذه المرحلة ، يكون ZkClient TUI أعلى بالكامل وبمجرد كتابة /مساعدة للحصول على فكرة عن الأوامر المتاحة.
يستخدم ZkClient تشفيرًا مشوشًا للاتصالات ، ولا يستطيع الخادم التطفل على الرسائل. الشيء الوحيد الذي يمكن أن يراه ZkServer هو أن شخصًا ما يتواصل مع شخص آخر. لذلك يتطلب هذا من المستخدمين إعداد مساكن بينهم. دعونا نوضح التدفق بمثال.
افترض أن أليس تريد التواصل مع بوب وأن كلاهما لديه حساب على ZkServer المشترك ثم العملية على النحو التالي:
1. Alice must upload her identity as an encrypted blob to the zkserver. This
can be accomplished by typing /kx and then filling out a password that is
going to be shared with Bob. The server will return a PIN code upon
completion.
2. Using an out-of-band communication mechanism Alice must share the PIN and
password with Bob.
3. Bob needs to fetch Alice's identity by typing the following /fetch PIN
("PIN" is replaced with the actual number provided by Alice). If the PIN is
correct Bob will be prompted for the password of the encrypted blob. If the
blob decrypts properly Bob will additionally be prompted to accept Alice's
fingerprint. If Bob accepts Alice's fingerprint then the rest of the key
exchange will be finalized.
يمر ZkServer فقط النقط المشفرة ذهابًا وإيابًا بين المستخدمين. ليس لديها أي معرفة على كل ما يتم تبادله. لذلك لا يمكن الانتهاء من التبادل الرئيسي إلا بعد أن تكون جميع الأطراف متاحة على الإنترنت لفترة كافية لجميع النقط للسفر ذهابًا وإيابًا.
عند هذه النقطة ، سيكون إما Alice أو Bob قادرين على إرسال الرسائل مرة أخرى و Fort باستخدام أمر /M (على سبيل المثال ، سوف Alice إلى ما يلي /M Bob Hello!).
هناك العديد من الأوامر في Zkclient و Tui Keys ولكن يتم وصفها في مكان آخر.
Zkexport تصدير إما هوية ZkServer أو Zkclient العامة. تتضمن هوية ZkServer عنوان المضيف أيضًا. يمكن إرسال سلسلة BASE64 الناتجة عبر البريد الإلكتروني أو تبادلها بطريقة أخرى مع نظيرك.
مثال ZkClient:
$ zkexport -root /Users/marco/.zkclient1/
AAAAEU1hcmNvIFBlZXJlYm9vbSAxAAAAAAAABm1hcmNvMQAAY3rsUd6bTpLI/n2EwmGKPkK3dA/V+wyz5HHLiQgzHNJ9KAZTOrGznd9Ulhe0Y0EVoW8OkuM/G51w6BdvIOm1CWaOAhw8SJi0/vbjZzETd8k397Vl3LPcDUFUbp+JQVKdtBWDhevh3MFN0DY7Oc5ZZrT+lIE+KVwQm/PaPpeIohoWAEBu3HEE6vuq4eQt7BQ6dbEV61ZKUHbMm/61ymhXCA==مثال ZkServer:
$ zkexport -s -root /Users/marco/.zkserver/
AAAACHprc2VydmVyAAAACHprc2VydmVyr51dJzm8pxrjiQsxFF3Bez+6izPdWAcEWZFHka7OwoTAoamQ1hm5eU5HwgQdSS7Ek+nd2LkvjUcu55l3jUhKdBwpfrCn/N/mGWpJS6iMSFSxU/OcRvWe9pEySQZR4gyjjb4TKuaaaReGBI4d8rUfOwoDTs1y05YO4Fgtx9a0BOQsBHvxoPKeqGJ6gxf5QlF4Xu8RRashfRYcTVG44uMpBwAAAmUwggJhMIIBw6ADAgECAhBGHi9VXIHCoQ6W3uSSG9OLMAoGCCqGSM49BAMEMAsxCTAHBgNVBAoTADAeFw0xNjExMjgxNzQwNThaFw00OTEyMzEyMzU5NTlaMAsxCTAHBgNVBAoTADCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAPHlelHUjxH+4JR2+PP71imPZ5b0JjF4vq86UYdgzJXzYmVShJgd+f8qK4ZP+GjLDiZjfl8ov+HUF63uX3V23EZxAVTW0FDyshRiJ+Lt5YmWRMVAM4i+I979Gjq6ySf9bm4Z4vxx1lvUBizussP3KoEG7AdmvbP/HqWzjuQaFH3oeTxDo4HFMIHCMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MIGeBgNVHREEgZYwgZOCCWxvY2FsaG9zdIIUTWFyY29zLU1hYy1Qcm8ubG9jYWyHBMCojQGHBMCoHQGHEAAAAAAAAAAAAAAAAAAAAAGHEP6AAAAAAAAAuCSI2MJKFRGHEP0JBrb3SIrKuCSI2MJKFRGHBAqqAGmHBH8AAAGHEP6AAAAAAAAAAAAAAAAAAAGHEP6AAAAAAAAAAiUA//7ved0wCgYIKoZIzj0EAwQDgYsAMIGHAkIAstVERsGjpqib7xm1NaplfzmpvOD0H+Zr8lJfKkSCWcnzbPhqo+rl71QlTdqZNzvQHX/hfBNntcXE8f4J80oI+zYCQUl0d7BZYis1X3OTGvguHd01GoxTPFv3HAvu1YlTWFvoShWilKOzH1jDJM//qyagwe/sg67pBUzQ24GQdGDxn/qIAAAAيهدف Zkimport إلى استيراد سلاسل Zkexported Base64.
أضف أمثلة هنا.
نظرًا لأن مستخدم ZkServer يقوم ببساطة بكتابة ZkServeroken وستبصق الأداة رمزًا واحدًا للاستخدام. على سبيل المثال:
$ zkservertoken
7000 8677 6548 2615يتم توفير الإصدارات الثنائية لأنظمة التشغيل والبنية المشتركة:
https://github.com/companyzero/zkc/releases
يحتوي كل إصدار على ملف واضح مع تجزئة SHA256 للثنائيات في هذا الإصدار. للتحقق من هذه ، ستحتاج:
خطوات التحقق من الثنائيات كما يلي:
قم بتنزيل بيان الملف ، وتوقيع بيان الملف ، و zip/tarball لنظام التشغيل الخاص بك من هنا.
احصل على قيمة SHA256 لـ zip/tarball لنظام التشغيل الخاص بك وتحقق من أنه يطابق القيمة في بيان الملف ، على سبيل المثال للينكس 64 بت
$ sha256sum zkc-linux-amd64-v0.2.0.tar.gz
51dd11ffbcc573462eb61df8fa5caa60677bcc9178fda5d68d02b3414aa6765f zkc-linux-amd64-v0.2.0.tar.gz
استيراد مفتاح توقيع إصدار ZKC في GNUPG.
$ gpg --keyserver hkps://pgp.mit.edu --recv-key 0x14B9CD80
gpg: requesting key 14B9CD80 from hkps server pgp.mit.edu
gpg: key 511E9D66: public key "zkc Release Signing Key <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
تحقق من توقيع بيان الملف صالح وإنشائه بواسطة مفتاح توقيع إصدار ZKC.
$ gpg --verify zkc-manifest-v0.2.0.txt.asc
gpg: assuming signed data in `zkc-manifest-v0.2.0.txt'
gpg: Signature made Mon Jul 2 14:17:16 2018 EDT using RSA key ID 14B9CD80
gpg: Good signature from "zkc Release Signing Key <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: EDCF B52A FCDA E2D2 D9C3 7708 E046 0873 511E 9D66
Subkey fingerprint: 1D16 538A 43D1 6765 43E7 31BF D79D DEA2 14B9 CD80
تم الآن التحقق من Zip أو Tarball مع الثنائيات لمنصة الخاصة بك ويمكنك أن تكون واثقًا من توليدها من قبل فريق ZKC.
مع إطلاق 0.3.0 تم تغيير تنسيق القرص لـ ZkServer. يُنصح بنسخ دليل ZkServer قبل تشغيل إصدار ZkServer الجديد. يحتوي الرمز على رمز الترقية وتم اختباره ، لكن ينبغي للمرء دائمًا أن يستجيب هذا التحذير قبل الترقيات.
لم يتم تدقيق ZKC بعد. استخدم بحكمة.
نحن نبحث عن مقاولين لتدقيق وتطوير ZKC و crypto libs. يتم تقديم الدفع في Decred.
ZKC مرخصة بموجب ترخيص Copyfree ISC.