
مراسل مشفر يعمل في الطرفية (Terminal) يعتمد على تشفير ما بعد الكم، وبروتوكول Double Ratchet، وإخفاء الهوية عبر Tor. يتضمن ميزات: عبارة مرور للإكراه، مصادقة قابلة للإنكار، وتعزيز أمان على مستوى النظام عبر seccomp-bpf و mlockall.
op4 — مراسل طرفي آمن
Op4 هو تطبيق مراسلة مشفر يعمل في الطرفية، مكتوب بلغة Rust. يوفر رسائل خاصة مشفرة من طرف إلى طرف باستخدام تشفير ما بعد الكم، ويتم توجيهها بالكامل عبر شبكة Tor بحيث لا يتم كشف محتوى رسائلك أو عنوان IP الخاص بك لأي شخص — ولا حتى الشخص الذي تتحدث معه.
يتيح op4 لشخصين تبادل الرسائل الخاصة دون كشف عنوان IP أو الهوية الحقيقية لأي من الطرفين. كل رسالة تكون:
يعمل op4 بالكامل في الطرفية. لا يحتوي على واجهة رسومية، ولا مكون متصفح، ولا حساب سحابي. العملية الخارجية الوحيدة التي يتصل بها هي برنامج Tor الخفي الذي يعمل على جهازك.
جميع خيارات التنزيل — AppImage، حزمة المصدر، الاستنساخ والبناء، والمثبت الآلي — موثقة في دليل التنزيلات والتثبيت. أحدث إصدار متاح على صفحة الإصدارات.
على دبيان وأوبونتو، يقوم install/setup.sh بكل شيء بأمر واحد: سلسلة أدوات Rust، تبعيات البناء، Tor، تكوين منفذ التحكم، تجميع الثنائي، مستخدم النظام، دليل البيانات، وملف AppArmor.
git clone https://github.com/Opfour/op4.git
cd op4
sudo bash install/setup.sh
بعد انتهاء السكريبت، يجب عليك تسجيل الخروج ثم الدخول مرة أخرى قبل تشغيل op4. يضيف المثبت مستخدمك إلى مجموعة
debian-torليتمكن من قراءة ملف تعريف ارتباط Tor. لا يطبق لينكس تغييرات المجموعة على الجلسات المفتوحة بالفعل — يلزم تسجيل دخول جديد.تخطي هذه الخطوة سيتسبب في فشل op4 عند بدء التشغيل مع:
Permission denied reading /run/tor/control.authcookie
ثم تحقق من تجزئة المصدر التي يطبعها السكريبت تطابق تجزئة الإصدار المنشورة لإصدارك قبل الثقة في الثنائي.
عند بدء op4، يطبع تجزئة مصدر تغطي جميع ملفات مصدر Rust، و Cargo.toml، و Cargo.lock، و build.rs. قارنها بالقيمة أدناه للإصدار الذي قمت بتثبيته.
يمكنك أيضًا التحقق منها دون تشغيل التطبيق بالكامل:
op4 --print-hash
إذا لم تطابق التجزئة، لا تستخدم الثنائي — فقد تم بناؤه من commit مختلف أو تم العبث به.
قم بتثبيت التبعيات أولاً، ثم شغّل السكريبت:
سلسلة أدوات Rust (مثبتة على 1.89.0 عبر rust-toolchain.toml):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
تبعيات Tor والبناء:
# Fedora
sudo dnf install tor gcc pkg-config openssl-devel
# Arch
sudo pacman -S tor base-devel pkg-config openssl
تكوين منفذ تحكم Tor — أضف إلى /etc/tor/torrc:
ControlPort 9051
CookieAuthentication 1
sudo systemctl restart tor
أضف مستخدمك إلى مجموعة Tor:
sudo usermod -aG tor $USER # Fedora / Arch
يجب عليك تسجيل الخروج ثم الدخول مرة أخرى بعد هذه الخطوة. لا تُطبق تغييرات عضوية المجموعة على الجلسات النشطة. حتى تفعل ذلك، سيفشل op4 مع
Permission denied reading /run/tor/control.authcookie.لتطبيق التغيير دون تسجيل خروج كامل، قم بتشغيل:
newgrp tor
البناء والتثبيت:
git clone https://github.com/Opfour/op4.git
cd op4
cargo build --release
sudo bash install/setup.sh
op4
# أو بدون تثبيت النظام:
./target/release/op4
في أول تشغيل، سيرشدك op4 إلى تعيين كلمة مرور عادية وكلمة مرور للإكراه، ثم يولد مفاتيح هويتك. يتم تخزين خزنتك في ~/.local/share/op4/vault.op4.
الحد الأدنى للنواة: 4.15 (يفضل 5.4+). البنية: x86-64 (aarch64 يجب أن يعمل ولكنه غير مختبر).
يحتاج شخصان إلى تثبيت op4، تشغيل Tor، وفتح خزنتهما. التبادل غير متماثل: يرسل أحدهما رمز الاتصال الخاص به أولاً، والآخر يضيفه، ثم يرسل رسالته الأولى، التي تصل كطلب معلق يقبله الشخص الأول.
في التشغيل الأول، يطلب op4 كلمة مرور عادية و كلمة مرور للإكراه، ثم يولد مفاتيح هويتك. يحدث هذا مرة واحدة فقط. خزنتك موجودة في ~/.local/share/op4/vault.op4.
$ op4
يحتوي رمز الاتصال الخاص بك على حزمة المفاتيح العامة الكاملة وعنوان .onion. يحتاجه الشخص الآخر للوصول إليك.
2 أو →)e لتصدير رمز الاتصال الخاص بكop4:رمز الاتصال الخاص بك ليس سريًا. من الآمن مشاركته علنًا. يحتوي فقط على مفاتيحك العامة وعنوان onion — لا مواد خاصة.
بمجرد حصولك على رمز الاتصال الخاص بهم:
a لإضافة جهة اتصالop4: الخاص بهم واضغط Enter↑/↓، ثم Enter)3 أو →)تبدأ هذه الرسالة الأولى المصافحة المشفرة ويتم تسليمها إلى عنوان .onion الخاص بهم عبر Tor. سيرونها كـ طلب اتصال معلق.
عندما يرسل لك شخص ما رسالة أولى، يظهر شعار على علامة تبويب جهات الاتصال يوضح عدد الطلبات المنتظرة.
2)p لمراجعة الطلبات المعلقةEsc للرفض والتجاهل)بمجرد القبول، يتم تهيئة Double Ratchet وتكون المحادثة متاحة فورًا في علامة تبويب الرسائل.
قبل الثقة بجهة اتصال، تأكد من تطابق بصمتها مع ما تظهره على شاشتها الخاصة. يمنع ذلك هجوم الوسيط أثناء تبادل الاتصال الأولي.
A3F2:91BC:…إذا كنت تعتقد أن مفاتيح هويتك قد تكون مخترقة:
4 أو تنقل لليمين)r لتدوير المفاتيحيستخدم op4 بروتوكول Double Ratchet (مشابه لبروتوكول Signal) لتحقيق السرية التقدمية. وهذا يعني:
تجمع خطوة KEM بين X25519 و ML-KEM-768 كما يلي:
shared_secret = HKDF(X25519_ss || MLKEM_ss)
يجب على المهاجم كسر كلا الخوارزميتين لاختراق تبادل المفاتيح. وهذا يحمي ضد خصم كمي (ML-KEM-768) مع البقاء آمنًا ضد الهجمات التقليدية إذا كان ML-KEM-768 يحتوي على عيب غير معروف (احتياطي X25519).
يتم توثيق الرسائل باستخدام HMAC-SHA256 بمفتاح مشتق من حالة السقاطة المشتركة. نظرًا لأن كلا الطرفين يمتلكان نفس مفتاح HMAC، يمكن لأي منهما إنتاج أي MAC معطى. هذه هي نفس خاصية قابلية الإنكار المستخدمة في OTR و Signal: لا يمكن إسناد الرسائل تشفيريًا إلى مرسل معين في إجراءات المحكمة.
ملف الخزنة في ~/.local/share/op4/vault.op4 يخزن جميع جهات الاتصال والمحادثات ومفاتيح الهوية. وهو محمي بمفتاحين مستقلين مشتقين من Argon2id:
يقوم op4 بإنشاء خدمة Tor v3 مخفية لصندوق الوارد الخاص بك. عنوان .onion الخاص بك مشتق بشكل حتمي من مفتاح هويتك (عبر HKDF)، لذلك فهو مستقر عبر عمليات إعادة التشغيل دون الحاجة إلى تخزين مفتاح منفصل. يتم إرسال الرسائل الصادرة عبر وكيل SOCKS5 الخاص بـ Tor. لا يظهر عنوان IP الحقيقي الخاص بك أبدًا في أي حزمة شبكة تتعلق بـ op4.
حركة المرور التغطية (رسائل وهمية موزعة بواسون تُرسل إلى النفس، متوسط الفاصل الزمني 30 ثانية) تمنع مراقب الشبكة من معرفة ما إذا كنت تراسل شخصًا ما بنشاط من خلال مراقبة حجم الحركة.
apparmor/op4.profile) — يقيد الوصول إلى نظام الملفات فقط إلى دليل الخزنة، وأجهزة الطرفية، و Tor.┌─────────────────────────────────────────────────────────────┐
│ عملية op4 │
│ │
│ ┌──────────┐ ┌──────────────────┐ ┌────────────────┐ │
│ │ TUI │ │ سقاطة مزدوجة │ │ نقل Tor │ │
│ │ (ratatui)│──▶│ + هجين ما بعد │──▶│ nym_client.rs │ │
│ │ │ │ الكم │ │ │ │
│ └──────────┘ └──────────────────┘ └───────┬────────┘ │
│ │ │
│ ┌──────────────────────────────┐ │ │
│ │ خزنة مشفرة │ SOCKS5 / منفذ تحكم │
│ │ ~/.local/share/op4/vault.op4│ │ │
│ └──────────────────────────────┘ │ │
└────────────────────────────────────────────────┼───────────┘
│
┌────────────▼────────────┐
│ برنامج Tor الخفي │
│ 127.0.0.1:9050 (SOCKS) │
│ 127.0.0.1:9051 (تحكم) │
└────────────┬────────────┘
│
شبكة Tor
│
┌────────────▼────────────┐
│ عنوان .onion للند │
│ (خدمته المخفية) │
└─────────────────────────┘
op4/
├── src/
│ ├── main.rs نقطة الدخول، تسلسل بدء التشغيل
│ ├── error.rs أنواع الأخطاء الموحدة
│ ├── crypto/
│ │ ├── keys.rs أزواج مفاتيح KEM هجين + توقيع
│ │ ├── primitives.rs AEAD, HKDF, HMAC, Argon2id
│ │ ├── ratchet.rs تنفيذ السقاطة المزدوجة
│ │ ├── hmac_auth.rs علامات التوثيق القابلة للإنكار
│ │ └── handshake.rs اتفاق المفتاح الأولي (على غرار X3DH)
│ ├── network/
│ │ ├── nym_client.rs نقل خدمة Tor المخفية
│ │ └── message.rs تنسيق الرسالة السلكية + الحشو
│ ├── storage/
│ │ └── vault.rs الخزنة المشفرة (Argon2id + AEAD)
│ ├── identity/
│ │ ├── profile.rs رموز الاتصال، جهات الاتصال المخزنة
│ │ └── revocation.rs سجلات إبطال المفتاح
│ ├── hardening/
│ │ ├── memory.rs mlockall, RLIMIT_CORE, dumpable
│ │ └── seccomp.rs مرشح seccomp-bpf لاستدعاءات النظام
│ └── ui/
│ ├── app.rs حلقة أحداث TUI وآلة الحالة
│ ├── contacts.rs عرض علامة تبويب جهات الاتصال
│ ├── conversation.rs عرض علامة تبويب الرسائل
│ ├── settings.rs عرض علامة تبويب الإعدادات
│ ├── duress.rs عرض صندوق الإكراه
│ ├── input.rs تنظيف المدخلات (إزالة CSI/OSC)
│ └── passphrase.rs مطالبات كلمة المرور الآمنة
├── apparmor/
│ └── op4.profile ملف AppArmor MAC
├── install/
│ └── setup.sh سكريبت تثبيت النظام
├── build.rs يضمن تضمين تجزئة المصدر وقت التجميع
├── deny.toml قواعد ترخيص ونصائح cargo-deny
├── rust-toolchain.toml تثبيت Rust 1.89.0
└── docs/ هذه الوثائق
الإصدار: 0.2.0-dev (قبل الإصدار)
op4 تحت التطوير النشط. الطبقات التالية مكتملة ومختبرة:
جميع الطبقات الآن موصولة من البداية إلى النهاية:
PublicKeyBundle حقيقي مشفر بـ Base58 (مجموعة مفاتيحك العامة الكاملة + عنوان onion).تم حل جميع القيود المعروفة. التطبيق الآن في حالة اكتمال الميزات لـ 0.2.0-dev:
التوثيق القابل للإنكار HMAC موصول بالكامل. تحمل كل رسالة صادرة علامة HMAC-SHA256 محسوبة من مفتاح السقاطة لكل رسالة على (معرف المحادثة || عداد الرسالة || النص المشفر). يتم التحقق من الرسائل الواردة قبل قبولها؛ يتم التسامح مع العلامات المملوءة بالأصفار من الأقران الأقدم للتوافق العكسي.
يستمر سجل الرسائل عبر عمليات إعادة التشغيل. يتم تشفير سجل المحادثة الكامل بمفتاح مشتق من HKDF لكل محادثة وتخزينه في حقل message_log_ct بالخزنة. يتم تحميل الرسائل من الخزنة عند فتح المحادثة وكتابتها مرة أخرى بعد كل إرسال أو استقبال.
طلبات الاتصال الواردة من أطراف غير معروفة يتم وضعها في قائمة انتظار بدلاً من إسقاطها. تظهر علامة تبويب جهات الاتصال شعارًا عند وجود طلبات معلقة. اضغط [p] للمراجعة: ترى بصمة المرسل ورسالته الأولى، اكتب اسمًا، واضغط Enter للقبول (أو Esc للرفض). عند القبول، تُضاف جهة الاتصال، ويتم تهيئة Double Ratchet، ويتم حفظ الرسالة الأولية في الخزنة.
خزنة الإكراه محفوظة عبر عمليات الحفظ. يخزن تنسيق ملف الخزنة (v2) أطوال النص المشفر الدقيقة في الرأس بحيث تعمل فك تشفير AEAD على البايتات الحقيقية بدلاً من الأقسام المملوءة بالأصفار. يتم تخزين قسم الإكراه المشفر حرفيًا في كل استدعاء save()، مما يحافظ على صلاحية كلمة مرور الإكراه إلى أجل غير مسمى.
مفتاح تمهيد Double Ratchet مخصص. يتم إنشاء زوج مفاتيح X25519 منفصل (identity_ratchet_secret) في التشغيل الأول وإدراجه في رمز الاتصال كـ ratchet_pub. يتم تهيئة سقاطة Alice باستخدام ratchet_pub الخاص بـ Bob بدلاً من مفتاح هوية KEM الخاص به، مما يفصل أدوار المفاتيح.
| الإصدار | تجزئة المصدر |
|---|
0.3.0 | 80820cb41a63575d2c139dadd425d13d1e87e62a9d60200ae7b894ae2e9ad8ed |
0.3.1 | 48115efb12747fa78b627ddbf7a56c46169f59e777d7d7508941bf89e4fe7521 |
0.2.0-dev | 35740577f6c4a4f19c5a08fe85b1f78a10347f2ba9dd7642d126552266bfa5a5 |
0.1.0 | e1a94761c7d3fa589ba892b47d5295aa417f95aee126809d51a7e7fb7e78982c |
| التوزيعة | الحالة |
|---|
| Ubuntu 22.04 / 24.04 | مدعومة |
| Debian 12 | مدعومة |
| Fedora 39+ | مدعومة |
| Arch Linux (الحالي) | مدعومة |
| Tails OS | مدعومة (دليل الإعداد) |
| macOS / Windows / WSL1 | غير مدعومة |
| المفتاح | الإجراء |
|---|
1 / ← → | تبديل علامات التبويب (جهات الاتصال / الرسائل / الإعدادات) |
↑ ↓ | تحريك التحديد |
Enter | فتح المحادثة / تأكيد |
Esc | إلغاء / العودة |
e | تصدير رمز الاتصال الخاص بك (علامة تبويب جهات الاتصال) |
a | إضافة جهة اتصال (علامة تبويب جهات الاتصال) |
p | مراجعة الطلبات المعلقة (علامة تبويب جهات الاتصال) |
d | حذف جهة الاتصال المحددة (علامة تبويب جهات الاتصال) |
r | تدوير مفاتيحك (علامة تبويب الإعدادات) |
q | خروج |
| الغرض | الخوارزمية |
|---|
| اشتقاق مفتاح الخزنة | Argon2id (m=64 MiB, t=3, p=1) |
| تشفير الخزنة | ChaCha20-Poly1305 (مفتاح 256 بت، nonce 96 بت) |
| تشفير الرسائل | ChaCha20-Poly1305 (مفتاح لكل رسالة من السقاطة) |
| اشتقاق المفتاح (السقاطة) | HKDF-SHA256 |
| توثيق قابل للإنكار | HMAC-SHA256 |
| تبادل مفاتيح تقليدي | X25519 |
| تبادل مفاتيح ما بعد الكم | ML-KEM-768 (FIPS 203) |
| توقيعات تقليدية | Ed25519 |
| توقيعات ما بعد الكم | ML-DSA-65 (FIPS 204) |
| إخفاء هوية النقل | خدمات Tor v3 المخفية (.onion) |
علامة تبويب الإعدادات تعمل بكامل طاقتها. يمكن تحرير عنوان SOCKS5 لـ Tor وعتبة الحذف التلقائي داخليًا. تدوير المفاتيح (ينشئ زوج مفاتيح جديد، يبث شهادة إبطال موقعة لجميع جهات الاتصال، يحدث رمز التصدير) وإبطال التقاعد للمفاتيح كلاهما موصول ويعمل.
إبطال المفتاح موصول من البداية إلى النهاية. يتم توقيع هياكل RevocationCertificate باستخدام زوج المفاتيح الهجين Ed25519+ML-DSA-65 وإرسالها إلى جميع جهات الاتصال كرسائل WireMessageType::Revocation عبر Tor.