أكثر برقية سرية

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


قناة خفية


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


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


زهرة في النافذة


زهرة نافذة قنوات برقية


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


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


في القائمة السوداء والأسود


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


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


تنظيم يدق


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


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


  • يتحقق A من البتة التي يتم إرسالها ، وإذا لزم الأمر إرسال إشارة ، بناءً على قيمتها:
    • A -> T: كتلة B ؛
    • A -> T: فتح B.
  • ب يحصل قليلا:
    • B -> T: user A request ؛
    • T -> B: المعلومات المتاحة حول A ؛
    • ب: يتحقق مما إذا كانت المعلومات الواردة لها الحالة:
      • ب: إذا كان هناك -> لم يتم حظره وتلقى 0
      • ب: إن لم يكن -> يتم حظره واستلامه 1

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


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


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


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


لذلك ، بينما في القرن الحادي والعشرين ، سنقوم بتشفير النصوص بإحدى الطرق الأكثر فاعلية المتاحة للتلغراف منذ قرن - كود بودو . بتعبير أدق ، قام Murray بتأليف أحدث أشكاله لـ ITA-2 لإجراء عدد أقل من مكالمات واجهة برمجة التطبيقات (API) على الشخصيات التي تواجهها عادة. يمكنك أن تشكو من قلة اللغة الروسية ، لكن في رأيي ، تعتبر الحروف الصوتية طريقة أبسط من التضحية بشخصيات إضافية لأي من Yu و Sch .


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


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


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


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


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


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


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


مثال للاستخدام


لاستخدام ، تحتاج إلى الحصول على api_id و api_hash من برقية وفقًا لهذا الإرشادات وتعيين القيم المستلمة في الملف "covertele.py". تشير وسيطات سطر الأوامر إلى الإجراء المرغوب ومعرفه ومعرف المستلم بالإضافة إلى الرسالة المراد إرسالها إذا كان المرسل. يبدو كل شيء مثل هذا:


 :  : 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!.. 

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


إذا أراد أي شخص القيام بذلك ، يمكنك أيضًا استخدام واجهة برمجة التطبيقات (API) المتوفرة البسيطة:


 from covertele import TelegramBlockingAPI from cochannel import CovertChannel friend = input("     :") #           #  ,     -,      id = input("  :") api = TelegramBlockingAPI(id) #        friend = input("Enter your friend's id:") channel = CovertChannel(api, friend) #    channel.receive()  channel.send()     channel.send("Bork, bork!") print(channel.receive) #       ,       _raw codes = channel.receive_raw() for code in codes: check(code) channel.send_raw([19, 24, 24, 13]) 

ما وراء البرقية


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


PS شكر خاص لشغفي بحب رميي في حالة الطوارئ.


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


All Articles