إنترنت الأشياء الخاص بي: قلعة الضيف (الجزء الثاني)

مرحبًا جي تي! كل ذلك مع الماضي والماضي!
أتابع قصة كيفية ربط قفل الباب بالإنترنت. ابدأ هنا .
شكرا جزيلا للجميع على التعليقات. هناك بالفعل حلول جاهزة ، ولكن هناك أيضًا عدد من الفروق الدقيقة التي لم تسمح لي باستخدامها. لا تزال الشقة ليست فندقًا ، لذلك نرفض القلاع الفندقية المتخصصة على الفور. أقفال رئيسية ، هوائيات NFC ، حتى لا تخيف الجيران ، نحن أيضًا لا نعتبرها. لا يمكن استخدام أي بطاقة أو رمز أو وسيلة مادية أخرى أيضًا ، ومن المفهوم أنه لا توجد طريقة لنقلها إلى ضيف قبل أن يفتح الباب.
لا يمكن استخدام Kevo أو August أو Lockitron ، لأنه وهي تعتمد على النوع الأمريكي من القفل (القفل) ، والذي لم يتم تثبيته جيدًا على باب فولاذي بسماكة 65-70 مم. خيارنا هو CISA الكهروميكانيكية للأبواب المدرعة ، بسعر حوالي 500 يورو (لم يتم شراؤها بعد ، لأنها باهظة الثمن).
والأهم من ذلك ، أريد أن أفعل شيئًا بيدي ، وليس لأكون أنانيًا من أجل تيارات الهواية.


اسمحوا لي أن أذكرك أن وحدة تحكم القفل تقع في عمق خلف NAT في الشبكة المنزلية المحلية ، وبالتالي لا معنى لرفع خادم الويب على Arduin ، فمن المستحيل الوصول إليه من الإنترنت. الخادم مكتوب في Python باستخدام إطار عمل Twisted ، ويعمل على Linux في مكان آخر حيث يوجد عنوان IP حقيقي ، وتتصل وحدة التحكم به وتنتظر الأوامر.

الآن أريد أن أتحدث عن منطق العمل والتشفير.
لم أجد شيئًا مشفرًا لحركة Arduina ، لأن اتصالات القلعة والخادم ستمر عبر قنوات مفتوحة بحركة مرور غير مشفرة.
في النموذج الأول ، استخدمت MD5 ، والآن غيرتها إلى SHA-1 ، هنا في مكتبة Cryptosuite هذه . تستهلك ذاكرة أقل ، وهناك بالفعل وظيفة HMAC جاهزة.
المفتاح هو كلمة مرور تصل إلى 30 حرف ASCII ، مخزنة في ذاكرة EEPROM لوحدة التحكم.
في النموذج الأولي ، تم تخزين نفس كلمة المرور بشكل صريح على الخادم ، وهو بالطبع ليس أمانًا. يتطلب النموذج الأولي الثاني كلمتين مرور. الأول هو مصادقة القفل عند الاتصال بالخادم ، لا يمكنك فتح القفل بكلمة المرور هذه ، فهناك حاجة لذلك يمكن فقط للأقفال الصحيحة الاتصال بالخادم.
يتصل القفل بالخادم ويخبره أولاً بمعرّفه. يقوم الخادم بالتحقق في قاعدة البيانات إذا كان هناك مثل هذا القفل ، وإذا كان هناك قفل ، فإنه يرسل تسلسل ASCII الذي يتم إنشاؤه عشوائيًا استجابة. القفل "يوقع" عليه بكلمة مرور ويرسل التجزئة مرة أخرى. يقوم الخادم بمقارنة التجزئة التي تم تلقيها بما تم حسابه بمفرده ، وإذا تطابق ، فإنه سيعتمد وحدة التحكم المتصلة كـ "قفل".
خلاف ذلك ، يتم إعادة تعيين الاتصال.
كلمة المرور الثانية هي بالفعل مفتاح رقمي ؛ ولا يتم تخزينها على الخادم.
يعمل على النحو التالي: يستدعي تطبيق المستخدم من خلال وظيفة SOAP على الخادم ، يشير إلى معرف القفل والأمر الذي يريد إرساله إليه. نتيجة لذلك ، تقوم الدالة بإرجاع معرف الطلب. يقوم الخادم بإعادة توجيه هذا الأمر إلى وحدة التحكم ، وترسل وحدة التحكم تسلسل ASCII الذي يتم إنشاؤه عشوائيًا في الاستجابة ، وينتظر الاستجابة "الصحيحة" لبضع ثوان. بعد ذلك ، يحتاج تطبيق المستخدم إلى الحصول عليه من الخادم ، من خلال نفس SOAP حسب معرف الطلب ، وتوقيعه باستخدام مفتاح رقمي وإرساله مرة أخرى.
تقارن وحدة التحكم التجزئة التي تم استلامها مع التجزئة المحسوبة من تلقاء نفسها ، وإذا كانت متطابقة ، فإنها تنفذ الأمر الذي تم استلامه مسبقًا ، والذي يتم إبلاغ الخادم به.
يقتصر الوقت لتأكيد الأمر على ثانيتين ، إذا لم يتم تلقي استجابة خلال هذا الوقت ، فإن وحدة التحكم تتجاهل الأمر الذي تم تلقيه مسبقًا. إذا لم تتطابق التجزئة ، فسيتم تجاهل الأمر أيضًا.
وهكذا ، أحاول أن أحمي نفسي من هجوم "الرجل في المنتصف" ، الذي يسهل ترتيبه على أسلاك مزود الخدمة الخاص بي. الاتصال بسيط ، لا توجد كلمات مرور وشهادات ، يكفي قطع الزوج الملتوي في الدرع ، والضغط عليه على كلا الجانبين ، وتوصيله بالشبكة من جانب الشقة بعنوان IP لخادم الأوامر ، ومحاكاة القفل على الطرف الآخر (كتبت أيضًا برنامجًا نصيًا للمضاهاة على الثعبان لتصحيح الأخطاء ) ، بعد ترتيب مثل هذا "جدار الحماية" مع التنصت على المكالمات الهاتفية.
في هذا الصدد ، في رأيي ، تبين أن القلعة محمية تمامًا.
حتى اختراق خادم الأوامر وسرقة قاعدة البيانات الخاصة به بكلمات مرور للحصول على إذن من القفل لن يسبب الكثير من المتاعب ، لأنه لا يمكنهم فتح القفل.
يبقى فقط للتعامل مع الضيوف. هذه هي المتطلبات رقم 6-8 من المادة الأولى.
لوحة المفاتيح والخوادم الوكيلة و RFID و NFC ليست خيارًا ، كتب لماذا أعلاه. ولكن كل شخص تقريبًا لديه هاتف ذكي وجميع الهواتف الذكية لديها بلوتوث ، فالخيار واضح!

في النموذج الأولي الأول ، تم ربط الضيف برمز وصول واحد. في قاعدة بيانات الخادم لهذا الرمز تم تخزين معرف القفل ، وتاريخ ووقت بداية ونهاية وصول الضيف ، حسنًا ، حقل نصي لاسم الضيف الذي يمكن قراءته بواسطة الإنسان.
يأتي الضيف إلى القلعة ، ويطلق تطبيق الهاتف المحمول على هاتفه الذكي ، ويرسل رمز وصول عبر البلوتوث إلى وحدة التحكم ، وتصل رسالة من وحدة التحكم إلى الخادم تفيد أن الضيف قد اقترب منه باستخدام رمز الوصول هذا. يقوم الخادم بفحصها مقابل قاعدة البيانات ، وإذا وصل الضيف الصحيح في الوقت المناسب في المكان المناسب ، يرسل الأمر لفتح القفل. في الواقع ، بدلاً من رمز الدخول الواضح ، سيرسل الضيف تجزئة HMAC موقعة بـ "طابع مؤقت" (تمثيل سلسلة لوقت Unix مقسومًا على 30 مع تجاهل الجزء الكسري). يقدم خادم التحقق طلبًا إلى قاعدة البيانات مع تحديد جميع رموز الوصول الصالحة حاليًا لقفل معين ، ثم يتكرر من خلاله ويحسب HMAC مماثل لهم ، إذا وجد تطابقًا ، يرسل أمرًا لفتحه ،إذا انتهى البحث عن رموز الوصول قبل العثور على تطابق ، فسيتم إرسال رد سلبي إلى القفل في محاولة لفتحه.
المشكلة هي أنه يجب تخزين المفتاح الرقمي لمثل هذا التفويض على الخادم.
اضطررت إلى تعقيد تفويض "الضيف" للنموذج الأولي الثاني. يتكون رمز وصول الضيف الآن من مفتاحين ، دعنا نسميهما "خادم" و "خاص". مطلوب الخادم لإنشاء حساب ضيف على الخادم ، وخاصة لفتح القفل نفسه. سيتم تخزين غرفة الخادم بشكل صريح على الخادم ، ومن الغرفة الخاصة لن يكون هناك سوى تجزئة ، ولكن ليست بسيطة ، ولكن HMAC مع مفتاح رقمي للقفل.
تبدو الآن جلسة تفويض الضيف كما يلي:
1. يمرر تطبيق الضيف مفتاح "الخادم" إلى وحدة التحكم (كما هو الحال في النموذج الأولي الأول للتجزئة) و
2. يقوم الخادم بفحصها بنفس الطريقة ، ولكن بدلاً من الأمر المفتوح يرسل تجزئة المفتاح الخاص
3. يقارن جهاز التحكم تجزئة المفتاح الخاص المتلقاة من الخادم مع المفتاح المحسوب بشكل مستقل ، وإذا تطابق ، يفتح القفل.
وبالتالي ، لا يخزن الخادم أي شيء يمكن أن يفتح القفل. لن يعمل على إنشاء التجزئة المطلوبة دون معرفة المفتاح الرقمي.
يتم استخدام نفس تقنية Bluetooth للوصول "الرئيسي" بدون الإنترنت. تستقبل وحدة التحكم الأوامر من خلالها ، وتستجيب برمز لمرة واحدة ، ويجب توقيعه باستخدام المفتاح الرقمي الصحيح لمدة ثانيتين.
من خلال ذلك ، أريد أن أجعل الإعدادات الأساسية لوحدة التحكم. يضغط المالك على زر خاص على وحدة التحكم ، وبعد ذلك يبدأ في قبول مجموعة ممتدة من الأوامر ، مثل تعيين معرف القفل والمفاتيح السرية وعنوان منفذ الخادم وإعدادات الشبكة وما إلى ذلك. ولكن في أدروين نفدت الذاكرة ولم يكن الرسم ملائمًا.
في النهاية ، عرض قصير للعمل.

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


All Articles