
Seal v0.2.3
دردشة مشفرة من نظير إلى نظير ومن الطرف إلى الطرف. لا صندوق وارد. لا حساب لاستعادته. لا أحد يستمع — ولا حتى نحن.
Seal
دردشة من نظير إلى نظير، مشفّرة من الطرف إلى الطرف.
لا صندوق وارد. لا حساب لاستعادته. لا أحد يستمع — ولا حتى نحن.
تنتقل الرسائل مباشرة بين النظائر عبر libp2p وتُشفَّر باستخدام بروتوكولي Olm/Megolm بنمط Signal (عبر vodozemac) قبل أن تغادر جهازك أصلًا. الخادم الوحيد المعني هو دليل صغير يساعد النظائر على العثور على عنوان كلٍّ منها الحالي. لا يطّلع أبدًا على محتوى الرسائل، ويمكن مسحه بأمر واحد.
راجع docs/THREAT_MODEL.md و
docs/SECURITY.md لمعرفة ما هو محمي فعليًا وضد ماذا وكيف.
المحتويات
- لقطات الشاشة
- الميزات
- كيف يعمل
- بنية المشروع
- 1. المتطلبات الأساسية
- 2. البناء
- 3. التشغيل في وضع التطوير
- 4. الاختبار
- 5. إعداد الخلفية (خادم الدليل)
- 6. استخدام التطبيق
لقطات الشاشة
أول تشغيل — اختر اسمًا؛ لا حاجة لإعداد أي شيء آخر.
المحادثات — شريط المجموعات، وقائمة جهات الاتصال، ولوحة دردشة مشفّرة من الطرف إلى الطرف.
الإعدادات — حساسية الميكروفون، والضغط للتحدث، والتشغيل عند تسجيل الدخول، وقابلية الوصول عبر الشبكة.
الميزات
- مشفّرة من الطرف إلى الطرف، دائمًا — كل رسالة تُختَم بـ Olm (1:1) أو Megolm (للمجموعات) قبل أن تغادر جهازك أصلًا، باستخدام مخطط vodozemac بنمط Double-Ratchet: كل رسالة تحصل على مفتاحها الخاص.
- لا صندوق وارد، أبدًا — تنتقل الرسائل عبر اتصال مباشر بين النظائر (libp2p: QUIC/TCP + Noise، مع الترحيل وثقب النفق (hole-punching) للتعامل مع NAT). إذا كان المستلم غير متصل، تنتظر الرسالة محليًا وتُعاد المحاولة — ولا تُدرَج أبدًا في قائمة انتظار على بنية أي طرف آخر.
- دليل، لا قاعدة بيانات — الخادم الوحيد المعني
(
crates/directory-server) يربط معرّف المستخدم بعنوان شبكة حالي ولا شيء غير ذلك. وهو غير قادر بنيويًا على قراءة محتوى الرسائل: حتى ملفCargo.tomlالخاص به لا يعتمد على الكريتات التي تعرف كيفية القيام بذلك. - حسابات متعددة على جهاز واحد — هويات منفصلة تمامًا (مفاتيح، جهات اتصال، رسائل) يمكنك التنقل بينها دون إعادة تشغيل.
- مجموعات مع تغييرات حقيقية في العضوية — قنوات نصية وصوتية لكل مجموعة؛ إزالة شخص ما تُدير مفتاح المجموعة بحيث لا يمكنه قراءة أي شيء يُرسَل بعد ذلك.
- صوت مدمج — الضغط للتحدث عبر اختصار على مستوى النظام (يعمل من أي تطبيق، وليس Seal فقط)، وحساسية ميكروفون قابلة للضبط، ومبدّل صوت اختياري.
- مرفقات بلا بيانات وصفية — تُزال بيانات EXIF (موقع GPS، ومعلومات الكاميرا/الجهاز) من الصور قبل إرسالها، وهي مفعّلة افتراضيًا.
- زر طوارئ حقيقي — الإعدادات ← البيانات والخصوصية تحذف فورًا وبشكل لا رجعة فيه كل مفتاح وجهة اتصال ورسالة على هذا الجهاز، دون أي تأثير على أي شخص تواصلت معه.
- التشغيل عند تسجيل الدخول، إن أردت — مفعّل افتراضيًا، ويمكن إيقافه بمفتاح من الإعدادات.
- قاعدة كود واحدة، ثلاثة أنظمة — نوافذ أصلية على macOS وWindows و Linux عبر Tauri.
كيف يعمل
هناك نوعان من الهوية في هذا التطبيق، وهما منفصلان عمدًا:
- هوية الدردشة الخاصة بك هي زوج مفاتيح Ed25519/Curve25519 يُنشأ محليًا
عبر vodozemac في أول مرة
تفتح فيها التطبيق (
identity::Identity). "معرّف المستخدم" العام لديك هو مجرد بصمة ذلك المفتاح (wire_proto::user_id_from_ed25519). لا يمكن لأي خادم إصداره أو إبطاله، لأنه لا يوجد خادم مشارك في إنشائه. - هوية الشبكة الخاصة بك هي زوج مفاتيح libp2p منفصل (
PeerId)، يُستخدم فقط لطبقة النقل. يمكن أن يتغير عبر عمليات إعادة التشغيل دون أن يؤثر على هوية الدردشة إطلاقًا؛ ويرتبط الاثنان فقط بسجل حضور توقّعه بنفسك.