معضلة أنظمة الـ On-Premise: الأمان في بيئة لا تملكها
عندما تقوم بتوريد نظام مؤسسي لمستشفى أو شركة كبرى، غالباً ما يُشترط تشغيل النظام داخل الشبكة الداخلية للمؤسسة (On-Premise) لأسباب تتعلق بسيادة البيانات والسرعة. هنا يواجه مهندس النظم تحديين كبيرين:
- 01كيف يتحقق النظام من صحة الترخيص وتاريخ انتهائه والوحدات المفعلة دون الحاجة للاتصال الدائم بخادم ترخيص خارجي؟
- 02كيف نحمي المنطق البرمجي وأسرار التشفير من العبث أو الهندسة العكسية؟
1. التوقيع الرقمي غير المتماثل (RSA-4096 Digital Signatures)
الحلول البدائية التي تعتمد على تشفير متماثل (AES) لمفتاح الترخيص داخل الكود تفشل سريعاً؛ لأن وجود مفتاح فك التشفير داخل الخادم يعني إمكانية استخراجه وتوليد تراخيص جديدة.
الحل الجذري الذي بنيناه في SarayaManager وSaraya Livestock يعتمد على التشفير غير المتماثل بمفاتيح RSA-4096:
- المفتاح الخاص (Private Key - 4096 bit): محفوظ في بيئة معزولة تماماً خارج السيرفرات ولا يدخل أبداً في الكود المصدري أو حزم العميل. يُستخدم فقط لتوقيع ملف الترخيص (
license.json) الذي يضم معرف المنشأة، البصمة العتادية، الوحدات المسموحة، وتاريخ الصلاحية. - المفتاح العام (Public Key): مدمج داخل حارس التراخيص (
LicenseGuard) في النظام. يمكنه التحقق من أن الترخيص صادر وموقع منا بنسبة يقين 100%، لكن يستحيل رياضياً استخدامه لتوليد ترخيص جديد أو تعديل حرف واحد في الترخيص الحالي!
2. حماية الكود المصدري عبر V8 Bytecode (Bytenode)
بما أن Node.js يعتمد على ملفات JavaScript نصية بعد ترجمة TypeScript، فإن تسليم مجلد dist/ كما هو يكشف الخوارزميات المحاسبية والسريرية. لذلك أضفنا في خط البناء الإنتاجي مرحلة تحويل الكود إلى V8 Bytecode ثنائي مترجم مسبقاً باستخدام bytenode مع طبقة تعمية متقدمة، ثم حزمه داخل مثبتات Inno Setup الموقعة رقمياً.
3. إدارة الأسرار عبر HashiCorp Vault وسجل التدقيق غير القابل للتعديل
إلى جانب حماية التراخيص، قمنا بدمج HashiCorp Vault لإدارة مفاتيح الاتصال والتشفير (AES-256-GCM) مع تدوير دوري للأسرار، وبناء سجل تدقيق صارم (Immutable Audit Log) يسجل كل عملية إضافة أو تعديل أو حذف مع القيمة القديمة والجديدة، معرف المستخدم، وعنوان الـ IP، بحيث لا يمكن لأي مستخدم — مهما كانت صلاحيته — إخفاء أثر أي عملية داخل النظام.