التكنولوجيا
KeyMeld: مفتاح عام لأنظمة iPhone و Android والعمارة Zero Vault للمشروع
KeyMeld بحد ذاته ليس Zero Vault. إنه خدمة SaaS مستقلة تساعد المطور على وضع مفتاح شامل خارج إطار خلفية المنتج، وربط عملاء iOS و Android، وبناء بنية لمشروعه وفق نموذج Zero Vault.
تواجه التطبيقات متعددة المنصات مشكلة غالبًا لا يلاحظها المستخدم. على الشاشة، يظهر حساب واحد ويتوقع أن يعمل بشكل متشابه على جميع الأجهزة. ولكن داخل أنظمة iPhone و Android، تستخدم آليات حماية مختلفة ويتم التعامل مع المفاتيح المحلية بشكل مختلف.
على iPhone، يمكن للتطبيق حماية المفتاح المحلي للجهاز باستخدام أدوات Apple Keychain. أما على Android، فيتم استخدام Android Keystore لهذا الغرض. هذه التقنيات مخصصة للحفاظ على بقاء المفاتيح الحساسة في بيئة محمية داخل الجهاز، لكنها غير قابلة للاستبدال بشكل مباشر.
بالنسبة للمستخدم، الأمر غير مهم. هو يرغب فقط في فتح التطبيق على iPhone ثم تثبيته على Android والاستمرار في العمل بالبيانات المحمية ذاتها.
بالنسبة للمطور، يبرز سؤال معماري: كيف يمكن تنظيم الوصول المشترك عبر منصتين، دون نقل المفاتيح المحلية للأجهزة أو وضع نسخ منها في قاعدة بيانات خلفية المنتج؟
عند دراستي لـKeyMeld، رأيت أن الخدمة تقدم مفتاحًا عامًا مستقلًا لهذا الغرض، دون التدخل في الحماية الداخلية لنظامي iOS و Android.
مفتاح عام لمنصات مختلفة
المفتاح المحلي للجهاز ينتمي إلى هاتف معين ويُحمي بواسطة أدوات نظام التشغيل المعني. يبقى داخل بيئة حماية للجهاز ولا يُستخدم بشكل مرن بين الأجهزة.
المفتاح العام لـKeyMeld هو كيان آخر. يتم إنشاؤه لمشروع معين، حساب معين، ومساحة حماية، ويصبح مشتركًا للعملاء المصرح لهم عبر منصات مختلفة.
الخدمة لا تأخذ المفتاح من iPhone، ولا تنقله إلى Android، ولا تحاول تحويل مفتاحين مختلفين إلى واحد. تبقى حماية المنصة مستقلة، ويتمكن التطبيق من الوصول إلى مستوى موحد للمفتاح الخاص بمشروعه.
هذا هو الدور الهندسي الذي يلعبه KeyMeld. فهو لا يجعل iOS و Android متطابقين أو يحل محل آليات الحماية الداخلية. بل يضيف مستوى مشترك للعمل بالمفتاح العام، مما يعفي المشروع من الإدارة الذاتية لإصدار المفتاح عبر المنصات.
لمشاريع مختلفة وحسابات مستقلة، يتم إنشاء مسارات مفاتيح منفصلة. لذلك، يحتفظ كل مشروع بمنطقة وصول خاصة به، ويظل وجود عدة حسابات على جهاز واحد مفصولاً.
Zero Vault ينتمي للمشروع
من المهم التوضيح، بأن Zero Vault هو ليس اسم KeyMeld نفسه. إنه نموذج معماري يمكن أن يبنيه المنتج المتصل به.
KeyMeld يعمل كخدمة SaaS مستقلة. لا يُركّب داخل خلفية التطبيق، ولا يوضع بجانب قاعدة بيانات المشروع كعنصر برمجي آخر. يُدار المفتاح العام في وحدة SaaS منفصلة، خارج خلفية المنتج نفسه.
للحفاظ على هذا النموذج، يجب أن تظل حدود الثقة بين المشروع وKeyMeld مستقلة. ويجب أن تستخدم قاعدة البيانات وخدمات الإدارة الخاصة بالتطبيق الخارجي وبيانات الاعتماد وآليات التحكم في الوصول بشكل منفصل.
يمكن وصف هذا النهج في بنية المشروع كنموذج Zero Vault: حيث لا تُخزن قاعدة البيانات الخاصة بالخادم المفتاح من التخزين المحمي للعميل.
Zero Vault لا يعني أن خلفية المنتج لا تخزن شيئًا على الإطلاق. إذ تبقى على جانبها حسابات المستخدمين، الإعدادات، البيانات التجارية، وكل ما هو ضروري لتشغيل التطبيق. لكن المفتاح العام غير موجود بجانبها.
اختراق قاعدة بيانات الخادم لا يكشف تلقائيًا عن المفتاح العام، لأنه لا يُحفظ مع الحسابات أو البيانات الخادمة الأخرى. ومع ذلك، فإن هذا النموذج لا يضمن تلقائيًا أن أي خلل في جزء من البنية التحتية سيكون غير ضار، بل يهدف بشكل خاص إلى إزالة المفتاح العام من التخزين على العميل في قاعدة بيانات المنتج.
سيناريو حي: حساب واحد على iPhone و Android
لنمثل تطبيقًا يحتفظ ببيانات محمية محليًا. يمكن أن يكون مُعرفًا، أو تطبيق مؤسسي، أو أي خدمة تتطلب العمل مع معلومات مشفرة مباشرة على الجهاز.
على iPhone، يحمي التطبيق المفتاح المحلي باستخدام أدوات iOS. وعلى Android، يُستخدم آلية الحماية الخاصة بـAndroid. المفاتيح الداخلية للأجهزة مختلفة، ويعد هذا طبيعيًا.
بدون طبقة مشتركة، كان على المطور أن يختار كيف ينظم الوصول إلى البيانات المحمية نفسها عبر المنصتين. كانت ستظل أنظمة الحفظ مختلفة، وكان على المنتج تخصيص وصلة بينهما يدوياً.
يمكن أن يُنشئ مخططات مستقلة لنظامي iOS و Android، أو يحاول نقل المفاتيح محليًا أو تخزين نسخ منها على الخادم.
يسمح KeyMeld بالامتناع عن نقل المفاتيح المحلية وتخزين نسخ منها على الخادم، من خلال إضافة مفتاح عام مشترك.
يحصل العميل على iPhone وAndroid على وصول للمفتاح العام نفسه ضمن مشروع وحساب مصرح به. ومع ذلك، كل هاتف لا يزال يستخدم آليات حماية خاصة به.
يبدو للمستخدم أن لديه حساب واحد عبر الأجهزة المختلفة. لا يحتاج ليدرك كيف يعمل الحماية داخل iPhone أو Android.
عند تغيير الهاتف، لا حاجة لتصدير المفتاح المحلي من الجهاز القديم أو إنشاء نسخة مخصصة من التخزين الآمن للمنصة الجديدة. يتصل العميل الجديد بالمشروع نفسه ويصل إلى المفتاح العام ذاته.
يشارك الخادم في عملية التحقق من الطلب، لكن المفتاح العام مخصص للعميل المصرح، ولا يُحفظ في قاعدة بيانات المنتج.
KeyMeld لا ينقل قاعدة التطبيق أو يُغير نظام مزامنة البيانات الخاص بالمستخدمين. دوره محدد: تزويد العميل بالمفتاح الضروري للعمل مع البيانات المحمية، وتبقى محتويات التخزين وتحديثها مسؤولية المنتج نفسه.
ثلاث أنواع مختلفة من المفاتيح والأسرار
لتجنب الالتباس بين مكونات البنية، يكفي التمييز بين ثلاثة مفاهيم:
المفتاح المحلي للجهاز ينتمي لهاتف معين ويُحمي بواسطة أدوات iOS أو Android.
المفتاح العام يستخدمه عملاء مشروع معين وحساب معين. وهو يربط بين المنصات المختلفة على مستوى المنتج نفسه.
السر الوظيفي مطلوب للخادم للتفاعل الآمن مع KeyMeld. لا يُرسل إلى تطبيق الهاتف أو المتصفح.
السر الوظيفي والمفتاح العام يؤديان مهمات مختلفة. في نموذج Zero Vault، لا يُخزن المفتاح العام في قاعدة بيانات المنتج بجانب بيانات الخادم.
لا يتطلب استخدام KeyMeld اسم المستخدم، كلمة المرور، محتوى تخزين TOTP، أو المعنى التجاري للبيانات. المهم هو ربط المشروع، والحساب، وصلاحية العميل للحصول على المفتاح العام.
إمكانية إدارة الوصول للمفتاح مستمرة
الحصول على المفتاح العام ليس حقًا مطلقًا لكل عميل.
إذا لم يعد يُعتبر الجهاز موثوقًا، أو تغيرت حالة الحساب، أو سحبت الإدارة الوصول للمشروع، يمكن لـKeyMeld أن يتوقف عن إصدار المفتاح العام لهذا العميل.
هنا، من المهم عدم الاستنتاج بشكل مفرط. هذا لا يعني بالضرورة محو النسخة المحلية الموجودة من المفتاح، إنما يركز على مراقبة استمرار الحصول عليه، وتمكين إضافة عملاء جدد.
بالنسبة للمستخدم، يُعني ذلك أن توصيل أجهزة جديدة وإدارة وصولها إلى المفتاح تتم عبر نظام واحد.
بالنسبة للمطور، يعني أن هذا المنطق لا يتعين عليه بناؤه يدويًا لنظام iOS وAndroid على حدة. ومع ذلك، تظل خانة Zero Vault تعتمد على ما إذا كان المشروع يخزن المفتاح العام أم لا، وما إذا كان يفرق بين بنيته التحتية الداخلية وبيئة SaaS الخارجية KeyMeld.
ما لا يفعله KeyMeld
KeyMeld ليس مدير كلمات مرور ولا يخزن سجلات TOTP للمستخدمين. لا يتحول إلى قاعدة بيانات سحابية للتطبيق، ولا يحل محل مزامنة محتواه.
ليس بديلاً عن Apple Keychain أو Android Keystore. يترك الأدوات المحلية للمنصة في مكانها ويضيف مستوى مشترك للمنتج.
كما أنه ليس خدمة مصادقة المستخدم بشكل إلزامي. يمكن أن تعتمد عملية المصادقة والهوية على خدمة منفصلة، مثل MeldID، بينما يعالج KeyMeld مهمة مختلفة — وهو تزويد العميل المصرح بمفتاح شامل، بدون وضعه في قاعدة بيانات المنتج.
وأخيرًا، لا يقوم KeyMeld تلقائيًا ببناء Zero Vault. يوفر للمشروع وحدة خارجية للمفتاح العام الشامل. للحفاظ على هذا النموذج، لا ينبغي للمطور أن يضع المفتاح العام في قاعدة بيانات خادمه الخاصة؛ يجب أن تظل المناطق الموثوقة مستقلة أيضًا.
من قد يحتاج إلى ذلك
هذا النهج مناسب للتطبيقات التي تعمل عبر منصات متعددة وتستخدم بيانات محمية محليًا.
قد يكون ذلك معرفين، أو تطبيقات مؤسسية، أو منتجات SaaS، أو خدمات متعددة الأجهزة، أو أي مشروع يحتاج إلى حساب يعمل بشكل متساوٍ على iPhone و Android.
تتميز قيمة هذا النهج ليس فقط في تقليل منطق المنصة، بل وأيضًا في قدرة الفصل في المسؤولية. قاعدة بيانات المنتج تخزن بياناتها، وKeyMeld، كخدمة SaaS خارجية، توفر المفتاح العام وتدير توزيعه لاحقًا.
بعد استكشافي للمشروع، أود أن أصف KeyMeld كأداة يمكن من خلالها للمطور بناء نموذج من هذا النوع لمنتجه الخاص، بدلاً من اعتباره Zero Vault جاهزًا بالكامل.
تواصل أنظمة iOS و Android استخدام آليات حماية خاصة بها. يحصل العملاء على مفتاح شامل مشترك، والخادم الخاص بالتطبيق، إذا لم يخزنه لديه ويفصل بين بنيته التحتية وKeyMeld، لا يصبح خزنةً للمفتاح الخاص بحفظ البيانات للعميل.
هذا يعني للمستخدم وصولاً موحدًا عبر المنصات، وللمطور القدرة على وضع المفتاح العام خارج خلفية المنتج الخاص، وللمشروع بأكمله هندسة Zero Vault، حيث لا يخزن الخادم المفتاح من البيانات المحمية للعميل.
لمزيد من المعلومات حول المشروع: KeyMeld