نموذج التشفير
تنسيق .rkvey v5: التمهيد، AEAD لكل حجرة، commits append-only وعزل الأسرار.
ينفّذ تنسيق .rkvey v5 (Rust Key Vault) نموذج تشفير متعدّد الطبقات وفق أفضل ممارسات HKDF و AEAD. النموذج الذهني: كلمة المرور الرئيسية → المفتاح الرئيسي → مفاتيح فرعية → حجرات مشفّرة.
كل إدخال مقسّم إلى حجرات (البيانات الوصفية، الأسرار المحمية، البيان وملفات المرفقات)، لكل منها مفتاح HKDF خاص. فك تشفير حجرة واحدة لا يكشف الأخرى.
نموذج التشفير QubKey v5
كلمة المرور الرئيسية
إدخال المستخدم (UTF-8) - لا يتم تخزينه مطلقًا في نص عادي
أرجون2id
ملح
16 بايت (الديباجة)
ذاكرة
64 ميجا بايت
التكرارات
3
التوازي
4
الإخراج
256 بت
المفتاح الرئيسي
256 بت · مفتاح جذر القبو
HKDF-SHA256
معلومات = "تقرير التنمية البشرية"
مفتاح الرأس
header_key
HKDF-SHA256
معلومات = "إيدكس"
مفتاح الفهرس
Index_key
HKDF-SHA256
معلومات = "مقصورة"
مفتاح المقصورة
حجرة_مفتاح
لكل إدخال (الإصدار 5)
HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → مفتاح المقصورة
مقصورات مشفرة
اشتقاق المفاتيح
يحوّل الاشتقاق كلمة المرور الرئيسية إلى مفاتيح تشفير قابلة للاستخدام. Argon2id مُكلف زمنيًا وذاكرةً عمدًا (~500 ms، 64 MB) لفرض rate limits offline. في v5، تحصل كل حجرة إدخال بعد ذلك على مفتاحها عبر HKDF.
إدخال المستخدم → كلمة المرور الرئيسية (UTF-8)
Argon2id → master_key (256 بت) مع salt عشوائي
HKDF-SHA256 → index_key لـ B-Tree
HKDF-SHA256 → compartment_key لكل إدخال ونوع حجرة (البيانات الوصفية، الأسرار، المرفق…)
| المعامل | القيمة | الوصف | الافتراضي |
|---|---|---|---|
Variant | Argon2id | النسخة الهجينة الموصى بها من OWASP — مقاومة لهجمات GPU و side-channel | — |
Memory | 64 MB | ذاكرة لكل اشتقاق — تزيد تكلفة الهجمات المتوازية | 65536 KB |
Iterations | 3 | تكرارات على الذاكرة — أمان/أداء (~500 ms) | — |
Parallelism | 4 | threads متوازية | — |
Output | 32 bytes | طول المفتاح المشتق | — |
Salt | 16 bytes | salt عشوائي في التمهيد | — |
تشفير AEAD
AES-256-GCM (افتراضي)
- دعم AES-NI في المعالجات الحديثة
- Nonce: 12 بايت، authentication tag: 16 بايت
- حد نظري: ~64 GB بيانات مشفّرة لكل مفتاح
متى تختاره: أجهزة بتسريع AES، استخدام يومي.
الشفرة الافتراضية على معظم المنصات لأفضل أداء.
XChaCha20-Poly1305 (اختياري)
- Nonce موسّع: 24 بايت (احتمال تصادم مهمل)
- بلا اعتماد على العتاد — أداء ثابت على كل CPUs
- موصى به للمفاتيح طويلة العمر
متى تختاره: خزائن أرشيفية، أجهزة بلا AES-NI، تفضيل ChaCha20.
قابل للتفعيل في إعدادات الخزنة المتقدمة.
بنية الملف
وصف البنية (v5):
preamble— Magic Bytes، إصدار التنسيق، salt Argon2idheader.enc— بيانات وصفية للخزنة مشفّرة (الاسم، تاريخ الإنشاء، الإعدادات)index/— B-Tree مشفّر للبحث O(log-n) دون فك أسرارcompartments/— كتل AEAD حسب النوع: البيانات الوصفية، الأسرار المحمية، البيان، المرفقاتappend/— منطقة commit: حجرات جديدة + snapshot للفهرس + footer مُتحقَّق
السلامة والـ commits
المرونة
commits append-only تضمن السلامة عند الانقطاع:
- تُلحق الحجرات الجديدة بنهاية الملف
- يُكتب snapshot مشفّر للفهرس
- تُزامَن البيانات مع القرص (fsync)
- footer مُتحقَّق يختتم الـ commit (نقطة اتساق)
سيناريو واقعي: تحرّر إدخالًا وينقطع التيار أثناء الكتابة. عند إعادة التشغيل يجد QubKey أحدث footer صالح — لا فقدان بيانات ولا تلف صامت. الضغط الدوري يكتب ملفًا نظيفًا عند تراكم مساحة قديمة.
العزل لكل حجرة
عبر HKDF-SHA256، تحصل كل حجرة على compartment_key خاص، مشتق من المفتاح الرئيسي مع معرّف الإدخال ونوع الحجرة. النتائج العملية:
- عرض إدخال يفك تشفير البيانات الوصفية فقط؛ الأسرار تبقى مُقنّعة حتى الكشف الصريح
- المرفقات تُحمَّل واحدة تلو الأخرى (تنزيل / معاينة)، لا عند فتح القفل
- فهرس B-Tree يستخدم
index_keyخاصًا، منفصل عن البيانات - تعديل سر لا يعيد كتابة ملفات المرفقات غير المتغيّرة بالضرورة
هذا العزل مدمج أصليًا في تنسيق .rkvey-v5.
Primitives التشفيرية
| Primitive | الاستخدام | المكتبة |
|---|---|---|
| Argon2id | كلمة المرور → اشتقاق المفتاح | argon2 (RustCrypto) |
| HKDF-SHA256 | المفتاح → اشتقاق مفاتيح فرعية | hkdf (RustCrypto) |
| AES-256-GCM | تشفير AEAD | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | تشفير AEAD (بديل) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | سلامة الملف | hmac (RustCrypto) |
| CSPRNG | توليد عشوائي | getrandom (OS) |