حتى أكثر برقية سرية

اعتدنا على التفكير في Telegram كوسيلة نقل موثوقة وآمنة للرسائل من أي نوع. لكن تحت الغطاء ، يوجد به مزيج شائع إلى حد ما من تشفيرات متناظرة. أين المرح في ذلك؟ وعلى أي حال ، لماذا يثق أي شخص برسائله إلى الطرف الثالث؟
جاسوس مقابل جاسوس من قبل أنطونيو Prohías
TL ؛ DR - اختراع قناة سرية خاصة على المستخدمين الذين يحظرون بعضهم البعض.


قنوات سرية


هناك العديد من الحلول لنقل البيانات بين اثنين من المستخدمين تجنب الاتصال المباشر. يمكنك استخدام أساليب الوسطاء والتشفير وإخفاء المعلومات وشبكات ترحيل البث وملحقات بروتوكولات أخرى. لكن من المفيد في بعض الأحيان أن تكون قادرًا على إنشاء اتصال آمن باستخدام الميزات الموثقة رسميًا فقط. أو كما ينبغي للمرء أن يقول ، قم بإعداد قناة سرية .


يمكننا أن نرى مثالاً على ذلك في فيلم تجسس سوفييتي "سبعة عشر لحظات من الربيع" (هذا ، مثل ، جيد جدًا ، حاول مشاهدته). في ذلك ، استخدمت زهرة في نافذة المنزل الآمن للإشارة إلى ما إذا كان الجاسوس قد فشل في مهمته أم لا. الزهرة في حد ذاتها لا تعني شيئًا: يمكن أن تكون هناك ولا يمكن أن تكون كذلك ، مثل هذا التعايش أمر شائع ويخبرنا فقط عن حب المالك للزهور. فقط التفسير المحدد مسبقًا هو الذي يميز المعلومات التي يتلقاها الجاسوس عن تلك التي يتلقاها المارة العشوائية.


من الفيلم


القنوات المستندة إلى زهرة في نافذة في برقية


لتنظيم قناتك السرية بنفس المبدأ ، ستحتاج فقط إلى شيئين: نافذة وزهرة. تمثل النافذة كائنًا يمكنك تغيير حالة رؤيته من قبل الآخرين والحالات الممكنة للزهرة وطريقة لتغييرها.


إذن ما الذي يمكن أن تغيره أليس في برقية يمكن أن يرى بوب؟ أشياء كثيرة ، في الواقع: الصور الرمزية ، أسماء المستخدمين ، آخر مرة زارها وأكثر من ذلك. ولكن عادةً ما تكون هذه الأشياء متاحة للجميع في نفس الوقت ، مما يحد من خصوصية الحوار - إذا كان الشخص يمتلك طريقة الانتقال ، يمكنه قراءة أي شيء ترسله أليس. والمثير للدهشة ، أنه من الممكن الالتفاف على هذا القيد دون أي نوع من التشفير المعنية.


أنا منعك ، هاها


كل مستخدم لديه قائمته السوداء الخاصة ، وإذا كان القارئ مزعجًا بما فيه الكفاية ، كان يجب عليه أن يلاحظ بعد أن تم حظره أن حالة "آخر زيارة" لم يكن لديه صديق قد تغيرت إلى "آخر مشاهدة منذ فترة طويلة". الحقيقة هي أنه كان بإمكانه الاتصال بالإنترنت قبل بضع ثوانٍ أو حتى الآن ، لكن واجهة برمجة تطبيقات Telegram لن ترسل هذه المعلومات إلى تطبيقك بعد الآن. وبهذه الطريقة ، فإنه يحمي خصوصية المستخدم الآخر من الخصوصية غير المرغوب فيها. في المقابل ، يمكنهم معرفة ما إذا كانت مدرجة في القائمة السوداء أم لا.


إذن ما الذي يراه زهرة ويتم حجبه؟ يمكن التحقق من كليهما في لحظة معينة ، مما يسمح بتلقي جزء واحد من المعلومات حسب ما إذا كنت محظورًا أم لا. ميزة أخرى هي حقيقة أن Telegram ربما لا تخزن سجلات المستخدمين الذين يحظرون بعضهم البعض (على الأكثر لفترات قصيرة في أغراض عمل اليومية).


تنظيم البتات


إن إمكانية إرسال واستقبال البتات أمر ممتع ، ولكن لا نزال بحاجة إلى وصف آلية الاستغلال الخاصة بها. يرفض Telegram إشعارك عند حظره ، لذا يجب تهيئة كل إجراء "استقبال بت" من قبل المستلم (دعنا نسميه بوب) وألا يعتمد على المرسل (وستكون هي Alice) ، أي بشكل مستقل. ويترتب على ذلك أن يقوم كل من أليس وبوب بتقديم الطلبات بنفس التردد.


تبدو خوارزمية تبادل البت في كل ساعة كما يلي:


  • يتحقق الشيك من إرسال بعض الشيء وإذا كان مختلفًا عن القيمة السابقة التي قام بتغييرها اعتمادًا على قيمة:
    • A -> T: block B إذا كانت البتة 1 ؛
    • A -> T: إلغاء حظر B إذا كان البت هو 0.
  • ب يتلقى قليلا:
    • ب -> T: حل A ؛
    • T -> B: متوفرة لمعلومات B حول A ؛
    • ب: يتحقق مما إذا كانت المعلومات المستلمة لها حالة:
      • ب: إذا كان -> فهو غير محظور والبت هو 0
      • ب: إذا لم يكن -> هو محظور والبت هو 1

تحتوي معظم أجهزة الكمبيوتر الحديثة على مولدات تردد جيدة (ساعة نظام ، على سبيل المثال) حتى نتمكن من مزامنة ساعاتنا معهم دون استخدام القناة لنقل أي شيء باستثناء بتات الرسائل. تجدر الإشارة إلى أن طلبات Telegram API ، سواء حظر (إلغاء) أو حالة المستخدم ، هي مكالمات عبر شبكة ولا تميل إلى العمل بسرعة ، خاصة إذا كنت تستخدم الوكلاء أو VPN. ينتج عن ذلك قيود: يجب أن يكون طول الساعة أطول من متوسط ​​وقت الاستجابة (حيث نحتاج إلى دمج بعضها مع بعض) ولهذا السبب ستكون سرعة نقل البيانات الخاصة بنا محدودة.


تشفير الرسائل


تحتوي النصوص باللغات الطبيعية على نسبة عالية جدًا من التكرار ، وستظل الرسائل التي يتم تلقيها مع الأخطاء قابلة للقراءة في الغالب بواسطة الإنسان. ونظرًا لأن Telegram عبارة عن رسول (يتجاهل بعض الأشياء المجنونة ) ، فيمكننا إهمال تصحيح الأخطاء الذي يحد من نقل البيانات إلى رسائل نصية بسيطة.


تحتوي قناتنا على نطاق ترددي منخفض للغاية ، فلماذا نحتاج إلى استخدام تشفير الرسائل الأكثر فعالية المتاح للرسائل الممكنة. من حسن حظنا أن اسم الرسول يتذكر الأوقات التي كانت فيها هذه المشكلة شائعة.


لهذا السبب ، نحن في القرن الحادي والعشرين ، سنقوم بتشفير نصوصنا بواحدة من أكثرها كفاءة المتاحة للتلغرافات منذ مائة عام - الترميزات Baudot . بتعبير أدق ، شكله النهائي ITA-2 الذي أنشأه دونالد موراي لإجراء عدد أقل من مكالمات واجهة برمجة التطبيقات على أكثر الرموز شيوعًا للغة.


الجهة اليسرى الوحيدة لإرسال رسالة بنجاح هي إيجاد حدود لجلسة إرسال بحيث يمكن للمستلم العثور على رسالة مرسلة بين قطار البتات المستمر. قبل بدء البث ، يكون بوب محظورًا أو لا ، ولا تتغير حالته بنفسه في أي وقت قريب. لهذا السبب يمكن أن تشير أليس إلى بدء الجلسة من خلال تبديلها إلى عكس لساعة واحدة فقط. في النهاية الناجحة للدورة ، ستفرج عنه وتغادر بسلام. على الجانب الآخر ، سيستمر في تلقي صفر بت حتى يقرر أنها ليست جزءًا من الرسالة - رمز Baudot لا يحتوي على رمز 00000 .


على الجدول الزمني


عيوب الطريقة هي استحالة عملية للاتصال (يمكنك ذلك ، لكن من المحتمل أن تتطلب تصحيح الأخطاء اليدوي بسبب تحول البت) إلى الترجمة المستمرة والحاجة إلى فصل الرموز الفارغة المستلمة مع الأخطاء التي تم إرسالها. ولكن هناك كل مشاكل التنفيذ.


التكنولوجيا العالية


بعد قضاء عدة ساعات في محاولة استخدام مكتبة رسمية لاستخدام API ، تعبت وكتبت كل شيء باستخدام Python باستخدام مكتبة Telethon الصديقة للإنسان. حتى أنه يحتوي على API متزامن لبعض الأسباب الفردية النادرة اليوم. رسالة ترميز مع ITA-2 كتبت بنفسي منذ ذلك الحين لم تجد شيئًا مفيدًا على الإنترنت.


تزامن الساعة المصنوع من ساعات النظام (ونعم ، ينام (!) بينهما) لأنه دقيق بما فيه الكفاية بالنظر إلى أن الوقت اللازم لكل مكالمة API للشبكة هو أكثر من عُشر الثانية في معظم الحالات. يمكن للمستخدم ضبط سرعة النقل كما يريد ، لكنني أوصي باتباع قاعدة "لا أكثر من طلب في الثانية" إذا كنت لا تريد رؤية كل من الأخطاء على الجانب الآخر وتجد نفسك محظورًا بموجب نظام للوقاية من الفيضانات. لقد تبين أن Telegram كانت صعب الإرضاء بشأن استخدام واجهة برمجة التطبيقات ، مما أدى إلى تجميد وصولي ليوم واحد حتى من بضع محاولات تفويض بسيطة (ناجحة!) متتالية وحظر عشوائي فقط للفيضان أثناء الإرسال لسبب غير معروف. يجب أن تعلن دائمًا حدود استخدام واجهة برمجة التطبيقات ، يا شباب.


إذا قرر المستخدم استخدام هذه القناة الغريبة لتبادل الرسائل ، فلا يجب عليه أن يهتم بأي ميزات واجهة المستخدم الرسومية. وليس جميع الأنظمة لديها أي حال ، لهذا السبب كتبت طلبي في شكل أداة طرفية. يسمح لك كل من إرسال واستقبال الرسائل عبر قناة بواسطة معرف مستخدم في وسيطات سطر الأوامر ، ولكن عملية واحدة فقط لكل عملية إطلاق. بالطبع ، لن يحصرك أحد في تشغيل نسخة واحدة فقط من البرنامج في أحدها واستخدام قنوات متعددة في نفس الوقت بالطريقتين ، ستحتاج فقط إلى تشغيل عدة نسخ من البرنامج النصي نفسه مع معلمات مختلفة.


باستخدام الاشياء


يمكنك قراءة المزيد حول استخدام هذا الشيء كأداة مساعدة لسطر الأوامر ومكتبة python3 من خلال API في GitHub (مستودع مرتبط في النهاية). المشكلة الوحيدة هي الحصول على بيانات اعتماد API الخاصة بك ( دليل بسيط مفيد بما فيه الكفاية) لأن Telegram لا يسمح بالكشف عن لغتي وتعيينها وفقًا للقيم في نسختك المحلية من البرنامج النصي. كل شيء مر عبر وسيطات سطر الأوامر باستثناء جزء التفويض الذي تم إجراؤه افتراضيًا عبر stdio) ويبدو كما يلي:


 For Alice: For Bob: Enter your phone number: XXX | Enter your phone number: XXX Enter auth code: YYY | Enter auth code: YYY Started message transmission... | Listening for the message... ---++ ('O', '9') | ---++ ('O', '9') --+-+ ('H', '#') | --+-+ ('H', '#') +++++ (1, 1) | +++++ (1, 1) --++- ('N', ',') | --++- ('N', ',') --+-- (' ', ' ') | --+-- (' ', ' ') ++-++ (0, 0) | ++-++ (0, 0) --+-+ ('H', '#') | --+-+ ('H', '#') -++-- ('I', '8') | -++-- ('I', '8') --+-- (' ', ' ') | --+-- (' ', ' ') --+++ ('M', '.') | --+++ ('M', '.') ++--- ('A', '-') | ++--- ('A', '-') -+-+- ('R', "'") | -+-+- ('R', "'") ++++- ('K', '(') | ++++- ('K', '(') +++++ (1, 1) | +++++ (1, 1) +-++- ('F', '!') | +-++- ('F', '!') --+++ ('M', '.') | --+++ ('M', '.') --+++ ('M', '.') | --+++ ('M', '.') Done, exiting... | ----- ('', '') | ----- ('', '') | Automatically decoded: OH, HI MARK!.. 

تم فك تشفير الرسائل المستلمة تلقائيًا ، ولكن إذا كنت ترغب في تصحيح بعض الأخطاء يدويًا أو تتبع التقدم ، فيمكنك القيام بذلك عند النظر إلى إخراج سطر الأوامر.


خارج البرقية


تجدر الإشارة إلى أنه يمكن تنفيذ هذه القناة عبر أي برنامج مراسلة و / أو شبكة اجتماعية يمكن أن يكتشف فيه المستخدمون إذا تم حظره أو لا. يمكن استبدال الواجهات المشابهة بسهولة في الكود الموجود ، لذا إذا كنت تريد القيام بذلك ، فقط استخدم العمل الأساسي. لن يكون أداء الثعبان المنخفض (مقارنة بالعادة في مثل هذه الأشياء C / ++) عاملاً مقيدًا بسبب انخفاض سرعة النقل ووقت استجابة مكالمات API.


PS شكر خاص لحب شغفي غير العادي لحظر لي


Source: https://habr.com/ru/post/ar452434/


All Articles