
सुरक्षित टर्मिनल चैट। E2E एन्क्रिप्टेड, जीरो-मेटाडेटा ब्लाइंड-फ़ॉरवर्डर सर्वर। PyNaCl XSalsa20-Poly1305 + Ed25519 + forward secrecy। क्रॉस-प्लेटफ़ॉर्म Python।
एंड-टू-एंड एन्क्रिप्टेड ग्रुप चैट, निजी संदेश और फ़ाइल ट्रांसफ़र आपके टर्मिनल में। सर्वर एक ब्लाइंड फ़ॉरवर्डर है: वह आपके संदेश नहीं पढ़ सकता, आपका उपयोगकर्ता नाम नहीं जानता, आप जिस कमरे में हैं उसे नहीं जानता, और पूरी तरह से समझौता होने पर भी दो संदेशों को एक ही व्यक्ति से लिंक नहीं कर सकता।
https://github.com/user-attachments/assets/d9faabfb-73bd-46dd-92b2-23f63daf5b06
https://github.com/user-attachments/assets/e8e0220d-cd7d-45a2-9443-9a5f20b57f12
https://github.com/user-attachments/assets/15fb383d-a02a-433e-bbd9-8ebadecf9481
https://github.com/user-attachments/assets/bca10cb1-6959-425d-96d6-fc1fbf845538
NoEyes छोटे विश्वसनीय समूहों के लिए एक पायथन टर्मिनल चैट टूल है। सर्वर कभी कुछ डिक्रिप्ट नहीं करता और कभी नहीं देखता कि आप कौन हैं - यह केवल अपारदर्शी टोकन को संभालता है और एन्क्रिप्टेड बाइट्स को आगे भेजता है।
आप कुंजी उत्पन्न करते हैं, उसे ऑफ-बैंड साझा करते हैं, और सर्वर आपकी बातचीत के बारे में कुछ नहीं सीखता।
छोटे विश्वसनीय समूहों के लिए उपयोगी जो बिना किसी तीसरे पक्ष के सर्वर पर भरोसा किए एन्क्रिप्टेड संचार चाहते हैं, सच्चे एंड-टू-एंड एन्क्रिप्शन के साथ एक निजी चैट स्व-होस्ट करना चाहते हैं, या कोई भी जो यह समझना चाहता है कि सर्वर वास्तव में क्या देख सकता है और क्या नहीं।
| विशेषता | विवरण |
|---|---|
| शून्य-मेटाडेटा सर्वर | सर्वर कभी उपयोगकर्ता नाम, कमरे के नाम या सार्वजनिक कुंजी नहीं देखता, केवल अपारदर्शी टोकन |
| सील्ड सेंडर | प्रेषक की पहचान एन्क्रिप्टेड पेलोड के अंदर रहती है, कभी रूटिंग हेडर में नहीं |
| ब्लाइंड-फ़ॉरवर्डर सर्वर | शून्य डिक्रिप्शन, सर्वर उन एन्क्रिप्टेड ब्लॉब को आगे भेजता है जिन्हें वह पढ़ नहीं सकता |
| फ़ॉरवर्ड सीक्रेसी | /ratchet start — सेंडर कीज़ प्रोटोकॉल, प्रत्येक संदेश एक अद्वितीय व्युत्पन्न कुंजी से एन्क्रिप्टेड, वर्तमान कुंजी लीक होने पर भी पिछले संदेश सुरक्षित |
| ग्रुप चैट | प्रति-कमरा XSalsa20-Poly1305 कुंजियाँ BLAKE2b से व्युत्पन्न, कमरे क्रिप्टोग्राफिक रूप से पृथक |
| निजी संदेश | पहले संपर्क पर X25519 DH हैंडशेक, जोड़ीदार कुंजी केवल दो पक्षों के पास |
| फ़ाइल स्थानांतरण | ChaCha20-Poly1305 स्ट्रीमिंग, कोई भी आकार, कम RAM उपयोग, पुनः कनेक्ट पर रोकें/फिर से शुरू करें |
| Ed25519 पहचान | स्वतः उत्पन्न हस्ताक्षर कुंजी, सभी संदेश और फ़ाइलें हस्ताक्षरित होती हैं |
| TOFU | पहली बार देखी गई कुंजियाँ विश्वसनीय; कुंजी बेमेल एक दृश्य सुरक्षा चेतावनी उत्पन्न करता है |
| यादृच्छिक PBKDF2 नमक | प्रत्येक तैनाती को एक अद्वितीय यादृच्छिक नमक मिलता है, रेनबो टेबल बेकार हैं |
| TLS + प्रमाणपत्र पिनिंग | परिवहन एन्क्रिप्टेड, सर्वर प्रमाणपत्र TOFU के माध्यम से पहले संपर्क पर पिन किया जाता है |
| रीप्ले सुरक्षा | प्रति-कमरा संदेश ID डेक, रीप्ले किए गए फ्रेम चुपचाप छोड़ दिए जाते हैं |
| विभाजित साइडबार पैनल | कमरे (ऊपर) और उपयोगकर्ता (नीचे) हमेशा दिखाई देते हैं, प्रत्येक आधा स्वतंत्र रूप से स्क्रॉल करता है |
| CRT बूट एनिमेशन | स्टार्टअप पर ध्वनि के साथ पूर्ण-स्क्रीन फॉस्फोर प्रभाव |
| रैचेट सक्रियण एनिमेशन | ब्रेल गियर आर्ट, ग्लिच फ्लिकर, स्पॉटलाइट स्वीप, सिंक किए गए SFX और लाल रंग में TUI क्रोम संक्रमण के साथ पूर्ण-स्क्रीन CRT प्रभाव |
| गाइडेड लॉन्चर | तीर-कुंजी मेनू UI, कमांड-लाइन अनुभव की आवश्यकता नहीं |
| स्वचालित निर्भरता इंस्टॉलर | आपके प्लेटफ़ॉर्म का पता लगाता है, जो गायब है उसे स्थापित करता है, कुछ भी बदलने से पहले पूछता है |
python ui/setup.py
python ui/launch.py
`ui/launch.py` आपको सर्वर शुरू करने या उससे जुड़ने की प्रक्रिया बताता है।
---
### विकल्प B - यदि Python स्थापित नहीं है
| प्लेटफ़ॉर्म | पहले यह चलाएँ |
|---|---|
| Linux / macOS / Termux / iSH | `sh install/install.sh` |
| Windows | `install\install.bat` |
दोनों स्क्रिप्ट Python स्थापित करती हैं यदि वह गायब है, फिर स्वचालित रूप से `setup.py` को सौंप देती हैं।
---
### विकल्प C - मैन्युअल```bash
# 1. Install dependencies
pip install cryptography PyNaCl
# 2. On the server machine — generate the access key
python noeyes.py --generate-access-key
# Prints an access code hex string — share with clients via USB
# 3. On a client machine — generate chat.key from the access code
python noeyes.py --generate-chat-key <ACCESS_CODE_HEX> --key-file ./chat.key
# Distribute chat.key to all other clients via USB. Never put it on the server.
# 4. Start the server (does NOT need the key file)
python noeyes.py --server --port 5000
# Start without bore tunnel (LAN / static IP / custom tunnel)
python noeyes.py --server --port 5000 --no-bore
# Start without adding a firewall rule (not needed when using bore tunnel)
python noeyes.py --server --port 5000 --no-firewall
# 5. Connect clients - each person needs their own identity file
python noeyes.py --connect SERVER_IP --port 5000 --username alice --key-file ./chat.key --identity-path ~/.noeyes/identity_alice.key
python noeyes.py --connect SERVER_IP --port 5000 --username bob --key-file ./chat.key --identity-path ~/.noeyes/identity_bob.key
महत्वपूर्ण: प्रत्येक उपयोगकर्ता के पास अपनी स्वयं की पहचान फ़ाइल होनी चाहिए। दो क्लाइंट एक ही पहचान फ़ाइल साझा करने पर समान इनबॉक्स टोकन प्राप्त करते हैं और सर्वर दूसरे को डुप्लिकेट सत्र के रूप में अस्वीकार कर देगा। पहचान फ़ाइल पहली बार चलाने पर स्वचालित रूप से उत्पन्न होती है, बस प्रति उपयोगकर्ता एक अद्वितीय
--identity-pathपास करें।
Termux को F-Droid से डाउनलोड करें (अनुशंसित): https://f-droid.org/packages/com.termux/
सत्र को सक्रिय रखें - tmux इंस्टॉल करें ताकि जब आप ऐप्स स्विच करें तब NoEyes चलता रहे:```bash pkg install tmux -y tmux python ui/launch.py
**स्टोरेज अनुमतियाँ** - इसके बिना फ़ाइल स्थानांतरण विफल हो जाएगा:```bash
termux-setup-storage
| कमांड | विवरण |
|---|---|
/help | सभी कमांड दिखाएँ |
/quit | डिस्कनेक्ट करें और बाहर निकलें |
/clear | स्क्रीन से संदेश साफ़ करें |
/users | वर्तमान कक्ष में उपयोगकर्ताओं की सूची बनाएं |
/join <room> | एक कक्ष पर स्विच करें (सक्रिय रैचेट होने पर चेतावनी देता है) |
/leave | सामान्य कक्ष पर वापस लौटें (सक्रिय रैचेट होने पर चेतावनी देता है) |
/msg <user> <text> | E2E-एन्क्रिप्टेड निजी संदेश भेजें |
/send <user> <file> | एक एन्क्रिप्टेड फ़ाइल भेजें |
/whoami | अपनी पहचान फ़िंगरप्रिंट दिखाएँ |
/trust <user> | पुनः इंस्टॉल करने के बाद किसी उपयोगकर्ता की नई कुंजी पर भरोसा करें |
/notify on|off | अधिसूचना ध्वनि चालू/बंद करें |
/ratchet start | सभी कक्ष सदस्यों को फ़ॉरवर्ड-सीक्रेसी रोलिंग कुंजी प्रस्तावित करें (सभी को पुष्टि करनी होगी) |
/ratchet invite <u> | पुनः जुड़ने के बाद किसी उपयोगकर्ता को रैचेट में पुनः आमंत्रित करें (पूर्ण पुनरारंभ ट्रिगर करता है — कोई चेन कुंजी अग्रेषित नहीं की जाती) |
/proceed | माइग्रेशन प्रतीक्षा के दौरान, ऑफ़लाइन साथी को छोड़ने और फिर से शुरू करने के लिए वोट करें |
| कुंजी | कार्य |
|---|---|
↑ / ↓ | चैट को ऊपर / नीचे स्क्रॉल करें |
PgUp / PgDn | चैट को एक पेज स्क्रॉल करें |
^P (Ctrl+P) | साइडबार पैनल दिखाएँ / छिपाएँ |
^C | बाहर निकलें |
▶ से हाइलाइट किया गया है।प्रत्येक आधा स्वतंत्र रूप से स्क्रॉल होता है। पूर्ण-चौड़ाई वाले चैट दृश्य के लिए पैनल छिपाने हेतु ^P दबाएँ।