
إضافة متصفح مفتوحة المصدر لتشفير PGP وفك التشفير والتوقيع. محرك Rust/WASM مع فتح WebAuthn PRF، حماية كلمة المرور Argon2id، وذاكرة مصفرة.
إضافة متصفح مفتوحة المصدر لتشفير وفك التشفير والتوقيع باستخدام PGP.
مبنيّة بـ Rust/WebAssembly. المفاتيح الخاصة لا تلمس كومة JavaScript إلّا عند الضرورة.
مفتوحة المصدر وشفافة. معظم إضافات PGP للمتصفح مغلقة المصدر. لا ينبغي أن تثق بصندوق أسود بأسرارك.
التشفير يعمل في WASM، وليس JavaScript. جميع عمليات PGP تعمل في صندوق حماية WebAssembly مبني بـ Rust/Sequoia-PGP. JS يحتفظ فقط بمقبض عدد صحيح غير شفاف لمفتاحك – البايتات الفعلية تعيش في الذاكرة الخطية لـ WASM ويتم تصفيرها عند الإسقاط. المفاتيح الخاصة تمر عبر JS لفترة وجيزة أثناء الإنشاء والاستيراد قبل تشفيرها وتخزينها.
فتح باستخدام مفتاح المرور (Passkey). حماية المفاتيح باستخدام WebAuthn PRF – فتح باستخدام Touch ID، Face ID، Windows Hello، أو YubiKey بدلاً من كلمة المرور. يتم دمج خرج PRF مع سر مخزّن عبر HKDF-SHA256، وتدفق الفتح بأكمله يعمل في WASM.
Argon2id لكلمات المرور. ذاكرة 64 ميغابايت، 3 مرات تكرار – مقاوم للقوة الغاشمة عبر GPU. عملية اشتقاق المفتاح (KDF) وفك التشفير وتخزين المفاتيح كلها تحدث في WASM. بايتات كلمة المرور تُصفّر على كلا الجانبين فور الاستخدام.
فك التشفير والتحقق الذري. النص الصريح ونتيجة التوقيع يُعادان معاً في استجابة واحدة مضغوطة. توقيع سيء = لا يتم إرجاع نص صريح. لا نافذة TOCTOU.
التصفير في كل مكان. حزمة zeroize على جميع المفاتيح المخزّنة والوسيطة (Rust). Uint8Array.fill(0) على كلمات المرور وخرجات PRF والمفاتيح المشتقة (JS). ذاكرة WASM لا تخضع لجمع القمامة (GC)، لذا التصفير هو حتمي.
AAD لكل مفتاح. كل مفتاح خاص يُشفّر باستخدام AES-256-GCM مع بيانات مصادقة إضافية (AAD) مرتبطة ببصمته. تبادل الكتل بين خانات المفاتيح يفشل.
.crx) للتحميلات المؤكدة من سوق Chrome الإلكتروني (اختياري؛ معطّل افتراضيًا)pnpm install
pnpm dev # خادم تطوير مع إعادة تحميل ساخن
pnpm test # اختبارات الوحدة (vitest)؛ اختبارات محرك Rust: cargo test في apps/pgp/gpg-wasm
pnpm build # بناء إنتاجي (يبني WASM تلقائياً)
pnpm zip # تعبئة لمتجر Chrome / إضافات Firefox
يجب بناء وحدة WASM من المصدر. لإعادة البناء يدويًا:
cd apps/pgp && pnpm build:wasm
apps/pgp/ مصدر الإضافة
components/ واجهة React
entrypoints/ الخلفية + اللوحة الجانبية
hooks/ حلقة المفاتيح، الجلسات، جهات الاتصال
lib/pgp/ غلاف WASM + العمليات
lib/protection/ WebAuthn PRF، Argon2id، AES-256-GCM
lib/storage/ chrome.storage مع كائن المزامنة (mutex)
gpg-wasm/ محرك Rust/WASM (sequoia-openpgp)
packages/ui/ مكونات shadcn/ui
tooling/ eslint، prettier، tailwind، tsconfig
تم بناؤه مع مساعدة كبيرة من الذكاء الاصطناعي (Claude). واجهة المستخدم، أسلاك React، التخزين، وتوصيل الإضافة تم إنشاؤها إلى حد كبير بواسطة الذكاء الاصطناعي.
التنفيذات التشفيرية – محرك Rust/WASM، حماية المفاتيح، WebAuthn PRF، تكوين Argon2id – تم تصميمها ومراجعتها بشرياً. لا نثق بالتشفير المبني على المشاعر.
MIT
| الطبقة | الآلية |
|---|
| محرك التشفير | Sequoia-PGP في WASM (المفاتيح في JS فقط أثناء الإنشاء/الاستيراد) |
| فتح المفتاح | WebAuthn PRF (مفاتيح المرور) أو Argon2id 64 ميغابايت (كلمات المرور) |
| تخزين المفاتيح | AES-256-GCM مع AAD لكل مفتاح |
| الذاكرة | حزمة zeroize (Rust) + التصفير اليدوي (JS) |
| التوقيعات | فك تشفير وتحقق ذري (بدون TOCTOU) |
| الجلسات | قفل تلقائي عند عدم النشاط، إغلاق اللوحة، أو لكل عملية |
| القوة الغاشمة | تأخير أسي عند فشل الفتح |
| النطاق | لا نصوص محتوى (content scripts) – فقط صندوق حماية الإضافة |