
टर्मिनल-आधारित एन्क्रिप्टेड मैसेंजर जिसमें पोस्ट-क्वांटम क्रिप्टोग्राफी, डबल रैचेट प्रोटोकॉल, और टोर गुमनामी है। इसमें ड्यूरेस पासफ़्रेज़, अस्वीकार्य प्रमाणीकरण, और seccomp-bpf और mlockall के माध्यम से OS-स्तरीय सख्तीकरण की सुविधाएँ हैं।
op4 — सुरक्षित टर्मिनल मैसेंजर
Op4 एक टर्मिनल-आधारित एन्क्रिप्टेड मैसेजिंग एप्लीकेशन है जो Rust में लिखा गया है। यह पोस्ट-क्वांटम क्रिप्टोग्राफी के साथ एंड-टू-एंड एन्क्रिप्टेड निजी मैसेजिंग प्रदान करता है, जो पूरी तरह से Tor नेटवर्क के माध्यम से रूट किया जाता है, ताकि आपके संदेशों की सामग्री और आपका IP पता किसी को भी उजागर न हो — यहां तक कि उस व्यक्ति को भी नहीं जिससे आप बात कर रहे हैं।
op4 दो लोगों को निजी संदेशों का आदान-प्रदान करने देता है बिना किसी पक्ष के अपना IP पता या वास्तविक पहचान प्रकट किए। हर संदेश:
op4 पूरी तरह से टर्मिनल में चलता है। इसमें कोई GUI, कोई ब्राउज़र घटक, और कोई क्लाउड खाता नहीं है। यह केवल एक बाहरी प्रक्रिया से संपर्क करता है: आपकी अपनी मशीन पर चलने वाला Tor डेमॉन।
सभी डाउनलोड विकल्प — AppImage, स्रोत टारबॉल, क्लोन और बिल्ड, और स्वचालित इंस्टॉलर — डाउनलोड और स्थापना गाइड में प्रलेखित हैं। नवीनतम रिलीज़ रिलीज़ पृष्ठ पर उपलब्ध है।
Debian और Ubuntu पर, 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 कुकी फ़ाइल पढ़ सके। Linux पहले से खुले सत्रों पर समूह परिवर्तन लागू नहीं करता — एक ताज़ा लॉगिन आवश्यक है।इस चरण को छोड़ने पर op4 आरंभ में विफल हो जाएगा:
/run/tor/control.authcookie पढ़ने में अनुमति अस्वीकृत
फिर बाइनरी पर भरोसा करने से पहले स्क्रिप्ट द्वारा मुद्रित स्रोत हैश की आपके संस्करण के प्रकाशित रिलीज़ हैश से तुलना करें।
जब op4 शुरू होता है, यह सभी Rust स्रोत फ़ाइलों, Cargo.toml, Cargo.lock, और build.rs को
कवर करने वाला एक स्रोत हैश प्रिंट करता है। इसे नीचे दिए गए मान से तुलना करें
आपके द्वारा स्थापित संस्करण के लिए।
आप पूर्ण ऐप लॉन्च किए बिना भी इसे जांच सकते हैं:
op4 --print-hash
यदि हैश मेल नहीं खाता है, तो बाइनरी का उपयोग न करें — यह या तो एक अलग कमिट से बनाया गया था या छेड़छाड़ की गई है।
पहले निर्भरताएँ स्थापित करें, फिर स्क्रिप्ट चलाएँ:
Rust टूलचेन (rust-toolchain.toml के माध्यम से 1.89.0 पर पिन किया गया):
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 विफल हो जाएगा
/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: से शुरू होता हैआपका संपर्क कोड गुप्त नहीं है। इसे सार्वजनिक रूप से साझा करना सुरक्षित है। इसमें केवल आपकी सार्वजनिक कुंजियाँ और ओनियन पता होता है — कोई निजी सामग्री नहीं।
एक बार आपके पास उनका संपर्क कोड हो:
a दबाएँ एक संपर्क जोड़ने के लिएop4: संपर्क कोड पेस्ट करें और Enter दबाएँ↑/↓, फिर Enter का उपयोग करें)3 या → दबाएँ)यह पहला संदेश एन्क्रिप्टेड हैंडशेक शुरू करता है और Tor के ऊपर उनके
.onion पते पर वितरित किया जाता है। वे इसे एक लंबित संपर्क अनुरोध के रूप में देखेंगे।
जब कोई आपको पहला संदेश भेजता है, तो Contacts टैब पर एक बैज दिखाई देता है जो दर्शाता है कि कितने अनुरोध प्रतीक्षा कर रहे हैं।
2 दबाएँ)p दबाएँEsc दबाएँ)एक बार स्वीकार करने पर, डबल रैचेट प्रारंभ हो जाता है और बातचीत Messages टैब में तुरंत उपलब्ध हो जाती है।
किसी संपर्क पर भरोसा करने से पहले, पुष्टि करें कि उनका फिंगरप्रिंट वही है जो वे अपनी स्क्रीन पर दिखाते हैं। यह प्रारंभिक संपर्क आदान-प्रदान के दौरान मैन-इन-द-मिडिल हमले को रोकता है।
A3F2:91BC:…यदि आपको लगता है कि आपकी पहचान कुंजियों से समझौता हो सकता है:
4 दबाएँ या दाईं ओर नेविगेट करें)r दबाएँop4 फॉरवर्ड सीक्रेसी के लिए डबल रैचेट प्रोटोकॉल (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 के माध्यम से) व्युत्पन्न होता है, इसलिए यह
एक अलग कुंजी संग्रहीत करने की आवश्यकता के बिना पुनरारंभ पर स्थिर रहता है। बाहर जाने वाले
संदेश Tor SOCKS5 प्रॉक्सी के माध्यम से भेजे जाते हैं। आपका वास्तविक IP पता कभी भी
op4 से संबंधित किसी नेटवर्क पैकेट में प्रकट नहीं होता।
कवर ट्रैफ़िक (पॉइसन-वितरित डमी संदेश स्वयं को भेजे जाते हैं, औसत अंतराल 30 सेकंड) एक नेटवर्क पर्यवेक्षक को ट्रैफ़िक वॉल्यूम देखकर यह जानने से रोकता है कि आप सक्रिय रूप से किसी को संदेश भेज रहे हैं या नहीं।
apparmor/op4.profile) — फ़ाइलसिस्टम एक्सेस को केवल
वॉल्ट निर्देशिका, टर्मिनल डिवाइस और Tor तक सीमित करता है।┌─────────────────────────────────────────────────────────────┐
│ op4 प्रक्रिया │
│ │
│ ┌──────────┐ ┌──────────────────┐ ┌────────────────┐ │
│ │ TUI │ │ डबल रैचेट │ │ Tor परिवहन │ │
│ │ (ratatui)│──▶│ + हाइब्रिड PQ │──▶│ nym_client.rs │ │
│ │ │ │ क्रिप्टो │ │ │ │
│ └──────────┘ └──────────────────┘ └───────┬────────┘ │
│ │ │
│ ┌──────────────────────────────┐ │ │
│ │ एन्क्रिप्टेड वॉल्ट │ SOCKS5 / कंट्रोल पोर्ट│
│ │ ~/.local/share/op4/vault.op4│ │ │
│ └──────────────────────────────┘ │ │
└────────────────────────────────────────────────┼───────────┘
│
┌────────────▼────────────┐
│ Tor डेमॉन │
│ 127.0.0.1:9050 (SOCKS) │
│ 127.0.0.1:9051 (ctrl) │
└────────────┬────────────┘
│
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 syscall फ़िल्टर
│ └── ui/
│ ├── app.rs TUI इवेंट लूप और स्टेट मशीन
│ ├── contacts.rs Contacts टैब रेंडरिंग
│ ├── conversation.rs Messages टैब रेंडरिंग
│ ├── settings.rs Settings टैब रेंडरिंग
│ ├── 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 उत्पन्न करता है
(आपका पूर्ण सार्वजनिक कुंजी सेट + ओनियन पता)।सभी ज्ञात सीमाएँ हल कर ली गई हैं। एप्लिकेशन अब 0.2.0-dev के लिए फीचर-पूर्ण स्थिति में है:
HMAC अस्वीकार्य प्रमाणीकरण पूरी तरह से जुड़ा हुआ है। प्रत्येक बाहर जाने वाला डेटा
संदेश प्रति-संदेश रैचेट कुंजी से (conversation_id || message_counter || ciphertext) पर
गणना किया गया एक HMAC-SHA256 टैग रखता है। आने वाले संदेश स्वीकार किए जाने से पहले
सत्यापित किए जाते हैं; पुराने साथियों से शून्य-भरे टैग को पिछड़े संगतता के लिए सहन किया जाता है।
संदेश इतिहास पुनरारंभ पर बना रहता है। पूर्ण वार्तालाप लॉग
प्रति-वार्तालाप HKDF-व्युत्पन्न कुंजी के साथ एन्क्रिप्ट किया जाता है और वॉल्ट के
message_log_ct फ़ील्ड में संग्रहीत होता है। वार्तालाप खोलने पर संदेश वॉल्ट से लोड किए जाते हैं
और प्रत्येक भेजने या प्राप्त करने के बाद वापस लिखे जाते हैं।
अज्ञात पक्षों से आने वाले संपर्क अनुरोध गिराए जाने के बजाय कतारबद्ध किए जाते हैं।
Contacts टैब एक बैज दिखाता है जब अनुरोध प्रतीक्षा कर रहे हों।
समीक्षा करने के लिए [p] दबाएँ: आप प्रेषक का फिंगरप्रिंट और उनका पहला संदेश देखते हैं,
एक नाम टाइप करते हैं, और स्वीकार करने के लिए Enter दबाते हैं (या अस्वीकार करने के लिए Esc)।
स्वीकार करने पर संपर्क जोड़ा जाता है, डबल रैचेट प्रारंभ किया जाता है, और
प्रारंभिक संदेश वॉल्ट में सहेजा जाता है।
ड्यूरेस वॉल्ट सहेजने पर संरक्षित रहता है। वॉल्ट फ़ाइल प्रारूप (v2) हेडर में
सटीक सिफरटेक्स्ट लंबाई संग्रहीत करता है ताकि AEAD डिक्रिप्शन शून्य-पैडेड अनुभागों के बजाय
वास्तविक बाइट्स पर काम करे। प्रत्येक save() कॉल पर एन्क्रिप्टेड ड्यूरेस अनुभाग
शब्दशः संग्रहीत होता है, जो ड्यूरेस पासफ़्रेज़ को अनिश्चित काल तक मान्य रखता है।
समर्पित डबल रैचेट बूटस्ट्रैप कुंजी। पहले रन पर एक अलग X25519 कुंजी जोड़ी
(identity_ratchet_secret) उत्पन्न होती है और संपर्क कोड में ratchet_pub के रूप में शामिल होती है।
एलिस का रैचेट बॉब के 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 / ← → | टैब स्विच करें (Contacts / Messages / Settings) |
↑ ↓ | चयन स्थानांतरित करें |
Enter | वार्तालाप खोलें / पुष्टि करें |
Esc | रद्द करें / वापस जाएँ |
e | अपना संपर्क कोड निर्यात करें (Contacts टैब) |
a | संपर्क जोड़ें (Contacts टैब) |
p | लंबित अनुरोधों की समीक्षा करें (Contacts टैब) |
d | चयनित संपर्क हटाएँ (Contacts टैब) |
r | अपनी कुंजियाँ घुमाएँ (Settings टैब) |
q | बाहर निकलें |
| उद्देश्य | एल्गोरिदम |
|---|
| वॉल्ट कुंजी व्युत्पत्ति | Argon2id (m=64 MiB, t=3, p=1) |
| वॉल्ट एन्क्रिप्शन | ChaCha20-Poly1305 (256-बिट कुंजी, 96-बिट नॉन्स) |
| संदेश एन्क्रिप्शन | ChaCha20-Poly1305 (रैचेट से प्रति-संदेश कुंजी) |
| कुंजी व्युत्पत्ति (रैचेट) | HKDF-SHA256 |
| अस्वीकार्य प्रमाणीकरण | HMAC-SHA256 |
| शास्त्रीय कुंजी विनिमय | X25519 |
| पोस्ट-क्वांटम कुंजी विनिमय | ML-KEM-768 (FIPS 203) |
| शास्त्रीय हस्ताक्षर | Ed25519 |
| पोस्ट-क्वांटम हस्ताक्षर | ML-DSA-65 (FIPS 204) |
| परिवहन गुमनामी | Tor v3 हिडन सर्विसेज (.onion) |
ratchet_pubSettings टैब पूरी तरह कार्यात्मक है। Tor SOCKS5 पता और ऑटो-डिलीट थ्रेशोल्ड इनलाइन संपादित किए जा सकते हैं। कुंजी रोटेशन (नई कुंजी जोड़ी उत्पन्न करता है, सभी संपर्कों को एक हस्ताक्षरित रिवोकेशन प्रमाणपत्र प्रसारित करता है, निर्यात कोड को ताज़ा करता है) और कुंजी सेवानिवृत्ति रिवोकेशन दोनों जुड़े और परिचालनशील हैं।
कुंजी रिवोकेशन एंड-टू-एंड जुड़ा हुआ है। RevocationCertificate संरचनाओं पर
हाइब्रिड Ed25519+ML-DSA-65 कुंजी जोड़ी के साथ हस्ताक्षर किए जाते हैं और सभी संपर्कों को
Tor के ऊपर WireMessageType::Revocation संदेशों के रूप में भेजा जाता है।