الأمان

نموذج التشفير

تنسيق .rkvey v5: التمهيد، AEAD لكل حجرة، commits append-only وعزل الأسرار.

ينفّذ تنسيق .rkvey v5 (Rust Key Vault) نموذج تشفير متعدّد الطبقات وفق أفضل ممارسات HKDF و AEAD. النموذج الذهني: كلمة المرور الرئيسية → المفتاح الرئيسي → مفاتيح فرعية → حجرات مشفّرة.

كل إدخال مقسّم إلى حجرات (البيانات الوصفية، الأسرار المحمية، البيان وملفات المرفقات)، لكل منها مفتاح HKDF خاص. فك تشفير حجرة واحدة لا يكشف الأخرى.

نموذج التشفير QubKey v5

كلمة المرور الرئيسية

إدخال المستخدم (UTF-8) - لا يتم تخزينه مطلقًا في نص عادي

KDF

أرجون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) → مفتاح المقصورة

البيانات الوصفية
أسرار
أت. يظهر
ايه إي إس-256-جي سي إم

مقصورات مشفرة

اشتقاق المفاتيح

يحوّل الاشتقاق كلمة المرور الرئيسية إلى مفاتيح تشفير قابلة للاستخدام. Argon2id مُكلف زمنيًا وذاكرةً عمدًا (~500 ms، 64 MB) لفرض rate limits offline. في v5، تحصل كل حجرة إدخال بعد ذلك على مفتاحها عبر HKDF.

إدخال المستخدم → كلمة المرور الرئيسية (UTF-8)

Argon2idmaster_key (256 بت) مع salt عشوائي

HKDF-SHA256index_key لـ B-Tree

HKDF-SHA256compartment_key لكل إدخال ونوع حجرة (البيانات الوصفية، الأسرار، المرفق…)

المعاملالقيمةالوصفالافتراضي
VariantArgon2idالنسخة الهجينة الموصى بها من OWASP — مقاومة لهجمات GPU و side-channel
Memory64 MBذاكرة لكل اشتقاق — تزيد تكلفة الهجمات المتوازية65536 KB
Iterations3تكرارات على الذاكرة — أمان/أداء (~500 ms)
Parallelism4threads متوازية
Output32 bytesطول المفتاح المشتق
Salt16 bytessalt عشوائي في التمهيد

تشفير AEAD

AES-256-GCM (افتراضي)

  • دعم AES-NI في المعالجات الحديثة
  • Nonce: 12 بايت، authentication tag: 16 بايت
  • حد نظري: ~64 GB بيانات مشفّرة لكل مفتاح

متى تختاره: أجهزة بتسريع AES، استخدام يومي.

الشفرة الافتراضية على معظم المنصات لأفضل أداء.

XChaCha20-Poly1305 (اختياري)

  • Nonce موسّع: 24 بايت (احتمال تصادم مهمل)
  • بلا اعتماد على العتاد — أداء ثابت على كل CPUs
  • موصى به للمفاتيح طويلة العمر

متى تختاره: خزائن أرشيفية، أجهزة بلا AES-NI، تفضيل ChaCha20.

قابل للتفعيل في إعدادات الخزنة المتقدمة.

بنية الملف

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

وصف البنية (v5):

  • preamble — Magic Bytes، إصدار التنسيق، salt Argon2id
  • header.enc — بيانات وصفية للخزنة مشفّرة (الاسم، تاريخ الإنشاء، الإعدادات)
  • index/ — B-Tree مشفّر للبحث O(log-n) دون فك أسرار
  • compartments/ — كتل AEAD حسب النوع: البيانات الوصفية، الأسرار المحمية، البيان، المرفقات
  • append/ — منطقة commit: حجرات جديدة + snapshot للفهرس + footer مُتحقَّق

السلامة والـ commits

المرونة

commits append-only تضمن السلامة عند الانقطاع:

  1. تُلحق الحجرات الجديدة بنهاية الملف
  2. يُكتب snapshot مشفّر للفهرس
  3. تُزامَن البيانات مع القرص (fsync)
  4. 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تشفير AEADaes-gcm (RustCrypto)
XChaCha20-Poly1305تشفير AEAD (بديل)chacha20poly1305 (RustCrypto)
HMAC-SHA256سلامة الملفhmac (RustCrypto)
CSPRNGتوليد عشوائيgetrandom (OS)