أبقِ مفتاح التداول والأسرار الخاصة بالتطبيق بعيدًا عن قرص الخادم
يحفظ
erpc worker مفتاح التداول والأسرار الخاصة بالتطبيق في 1Password أو سلسلة مفاتيحك أو مخزن مفاتيح مشفر، ويسلّمها إلى التطبيق في الذاكرة، ولا يسلّمها أبدًا إلى قرص الخادم.تصف هذه الصفحة ERPC CLI
v0.1.0-rc.4، وهو إصدار تمهيدي.كيف يصل مفتاح التداول إلى التطبيق
يحصل التطبيق الذي لديه محفظة على مفتاحه عبر أنبوب عند بدء تشغيله. لا يوجد
wallet.json ولا .env ولا نسخة على الخادم. ولا يكتب erpc المفتاح على أي قرص دون تشفير: الملف الوحيد الذي يضعه فيه هو ملف مخزن المفاتيح، على جهازك، مشفرًا بعبارة المرور الخاصة بك.- مكان الحفظ: ينشئ
erpc worker key newالمفتاح في 1Password عندما يحفظerpc loginالجلسة هناك، وإلا ففي سلسلة المفاتيح، وإلا ففي مخزن المفاتيح. ويسجّلerpc.tomlمرجع المفتاح ومفتاحه العام. - على الخادم: يحتفظ وكيل erpc worker بالمفتاح في الذاكرة فقط. فهو يجعل نفسه غير قابل للتفريغ ويقفل ذاكرته، ويسلّم المفتاح إلى التطبيق عبر واصف ملف؛ ويمسحه التطبيق بعد قراءته.
- بعد إعادة تشغيل الخادم، يعود الـ worker مقفلًا: لا يعمل التطبيق حتى يرسل
erpc worker startالمفتاح مرة أخرى. والوكيل الذي يفشل أو يُقتل يبدؤه systemd من جديد، ويعود مقفلًا بالطريقة نفسها. - تحديث الحزم لا يعيد تشغيل الـ worker. يطلب
deployمنneedrestartأن يترك وحدات الـ worker وشأنها: في وضعه التلقائي يؤجلها، وعند سؤاله في الطرفية تكون إجابته الافتراضية بشأنها لا، لذا فإن تحديث الأمان الذي يجري دون إشراف لا يعيد تشغيل التطبيق. وعندما يتعذر كتابة تلك القاعدة، يذكر النشر ذلك ويستمر، ويعمل الـ worker حينها دون هذه الحماية.
يُحدَّد مفتاح التداول بواسطة
[wallet] ولا شيء غيره، ولا يقرؤه erpc إلا لشخص أمام الطرفية: لا لأداة ذكاء اصطناعي، ولا باستخدام حساب خدمة 1Password. ويُرفض سطر في [secrets] يذكر مرجع [wallet]، أو يذكر حساب keychain: أو keystore: ينتهي بـ .wallet. وفي مخزن المفاتيح، المُدخل المحفوظ بوصفه مفتاحًا لا يُفتح بوصفه سرًّا. أما في 1Password، وتحت حساب سلسلة مفاتيح باسم آخر، فلا شيء يميّز المفتاح: ملف erpc.toml بلا [wallet] يذكر عنصرًا كهذا تحت [secrets] يُقرأ فيه ذلك العنصر بوصفه سرًّا.اختيار مكان حفظ القيم
استخدام 1Password اختياري. يحفظ
erpc worker key new وerpc worker secret put ما يُعطى لهما في أول ما ينطبق مما يلي، ما لم يحدد --store مكانًا بعينه (--store 1password --vault <id> و--store keychain و--store keystore):- 1Password، عندما يحفظ
erpc loginالجلسة هناك أو عند تمرير--vault. - سلسلة مفاتيح نظام التشغيل، حيث تبقى القيمة محفوظة بعد إعادة تشغيل الجهاز: macOS وWindows وLinux مع حلقة مفاتيح سطح المكتب في جلسة مسجَّل الدخول إليها.
- مخزن مفاتيح erpc، على جهاز Linux لا يحتوي على حلقة مفاتيح كهذه: خادم بلا واجهة رسومية، أو WSL، أو تسجيل دخول عبر SSH. ويُرفض
--store keychainعلى جهاز كهذا.
في سلسلة المفاتيح أو مخزن المفاتيح، يوجد المفتاح على ذلك الجهاز وحده، دون نسخة ودون مزامنة، ولا يستطيع جهاز آخر قراءة مرجع
keychain: أو keystore:.فقدان الجهاز أو مسحه يعني ضياع المحفظة: احتفظ فيها بالقليل، أو استخدم 1Password، الذي يستطيع قراءته كل جهاز مسجَّل الدخول إلى الخزنة. سجّل الدخول إلى 1Password باستخدام
erpc login --store 1password-desktop، أو عبر op signin حيث لا يوجد تطبيق سطح المكتب.يمكن لحساب خدمة 1Password أن يحتفظ بأسرار التطبيق، لكن erpc لا يقرأ مفتاح التداول بواسطته. ومع 1Password، قد تُظهر كل قراءة طلب موافقة في التطبيق، ويعرض erpc مؤشرًا دوّارًا أثناء الانتظار.
حفظ سر
تُحفظ الأسرار، مثل رموز API ومفاتيح RPC، بالطريقة نفسها، لكنها تصل إلى التطبيق كمتغيرات بيئة، لا عبر أنبوب. يحفظ
erpc worker secret put <NAME> القيمة، ولا يحتوي [secrets] في erpc.toml إلا على مرجعها.bash
--generateينشئ القيمة: 32 بايتًا عشوائيًا، في صورة 64 حرفًا بالصيغة السداسية العشرية.--from-accountيحفظ أول مفتاح من مفاتيح RPC في حسابك يقبله RPC المشترك. تُجرَّب المفاتيح بالترتيب، بدءًا بالمفتاح الأساسي، باستدعاءgetHealthواحد لكل مفتاح، مع مهلة 8 ثوانٍ للرد. والمفتاح الذي يُجاب عنه بـ 401 أو 403 يُرفض ويُجرَّب التالي، ولا يُحفظ إلا المفتاح الذي قَبِله RPC. ويذكر الأمر ما إذا كان هو المفتاح الأساسي للحساب أم مفتاحًا آخر (account_keyمع--json).- لا تُطبع أي من القيمتين، ولا حتى مع
--json. وأول استخدام لمخزن المفاتيح، أو استخدام مخزن مفاتيح مقفل، يحتاج إلى شخص أمام الطرفية. - تُجرَّب المفاتيح من هذا الجهاز، لذا فإن المفتاح المقيَّد بعنوان الخادم يُرفض هنا رغم أنه يعمل هناك. وعندما تُرفض كل المفاتيح، لا يحفظ
--from-accountشيئًا، وتحفظ أنت المفتاح الذي تقصده يدويًا، بكتابته دون أن يظهر أو بتمريره عبر أنبوب. وعندما يتعذر سؤال RPC، لا يحفظ شيئًا ويبقىerpc.tomlكما كان؛ شغّل الأمر نفسه مرة أخرى.
لحفظ مفتاح يدويًا:
bash
- يحفظ
--replaceقيمة جديدة لاسم مضبوط مسبقًا. ويسردerpc worker secret listالإعدادات السرية بأسمائها ومكان حفظ كل منها. - الإعداد الذي يوفره خط بيانات (
GRPC_ENDPOINTوSHREDS_ENDPOINTوSOLANA_SEND_RPC_ENDPOINT) ليس سرًّا أبدًا: يضبطه--grpcو--shredsو--unlimited.
المرجع في
[secrets] أو [wallet] واحد مما يلي:مخزن المفاتيح
مخزن المفاتيح هو المجلد
~/.erpc/keystore (أو keystore تحت ERPC_HOME عند ضبطه). على Linux وmacOS تكون صلاحيات مجلداته 0700 وملفاته 0600؛ أما على Windows فلا يضبط erpc أي صلاحيات من عنده.- يحتوي
master.jsonعلى مفتاح رئيسي عشوائي بطول 32 بايتًا، مختوم بمفتاح يشتقه PBKDF2-HMAC-SHA256 (600,000 تكرار) من عبارة المرور الخاصة بك. ويحتوي كل مُدخل على قيمة واحدة، مختومة بـ ChaCha20-Poly1305 بمفتاح خاص به. - عبارة المرور: أول
key newأوsecret putيستخدم مخزن المفاتيح يطلب منك اختيارها، بكتابتها مرتين في الطرفية، بطول 12 حرفًا أو أكثر. ولا يأخذها erpc إلا من ذلك الموجّه المخفي، ولا يأخذها أبدًا من وسيط أو متغير بيئة أو أنبوب. - فتح القفل على Linux: بعد أن تفتح عبارة المرور مخزن المفاتيح، يُحفظ فتح القفل في حلقة المفاتيح الدائمة في النواة، في الذاكرة، حتى يُعاد تشغيل الجهاز، أو تبقى حلقة المفاتيح دون استخدام طوال مدة انتهاء الخمول الخاصة بها (ثلاثة أيام، ما لم يحدد النظام غير ذلك)، أو حتى تشغيل
erpc worker secret lock. ويطلبerpc worker secret unlockعبارة المرور مسبقًا ويذكر حتى متى يبقى فتح القفل. وفي صدفة بُدئت دون تسجيل دخول خاص بها (suبدون-، وsudo -E)، لا يُحفظ أي فتح للقفل ويسأل كل أمر. - عندما لا يوجد أحد أمام الطرفية، يستخدم الأمر الذي يحتاج إلى مخزن المفاتيح فتح القفل إن وُجد، وإلا يفشل، مع ذكر
erpc worker secret unlock. ومخزن المفاتيح الذي فُتح قفله يسلّم الأسرار، لا مفتاح التداول. - على macOS وWindows (
--store keystore)، لا يُحفظ أي فتح للقفل: كل أمر يحتاج إلى مخزن المفاتيح يطلب عبارة المرور مرة واحدة، ولذلك يحتاج إلى طرفية.
ما يحميه مخزن المفاتيح، وما لا يحميه
- انسخ مجلد
keystoreاحتياطيًا وتذكّر عبارة المرور. لا يستطيع erpc استعادة أي منهما، ودون وجودهما معًا يضيع ما يحتويه مخزن المفاتيح. - من يملك ملفات مخزن المفاتيح وعبارة المرور يملك المفتاح. يجعل PBKDF2 كل تخمين بطيئًا، لكنه لا يجعل عبارة المرور القابلة للتخمين آمنة.
- ما دام قفل مخزن المفاتيح مفتوحًا، يستطيع أي برنامج يعمل باسمك قراءة المفتاح الرئيسي من حلقة المفاتيح في النواة (والبرنامج الذي لا تضم جلستُه حلقةَ مفاتيحك يستطيع أن يربطها بجلسته) وفتح كل مُدخل، بما في ذلك مُدخلات المفاتيح. وقواعد erpc الخاصة (ألا يقرأ المفتاح الذي يذكره
[wallet]إلا لشخص أمام الطرفية، وألا يقرأه أبدًا لأداة ذكاء اصطناعي؛ وألا يفتح أبدًا مفتاحًا محفوظًا في مخزن المفاتيح بوصفه سرًّا) هي ما يفعله erpc؛ ولا تُلزم البرامج الأخرى التي تعمل باسمك. شغّلerpc worker secret lockعندما تنتهي. - أسماء المُدخلات ليست مخفية، وحجم المُدخل يكشف طول القيمة.
- الملف الذي تغيّر لا يُفتح؛ أما النسخة الأقدم من المُدخل نفسه إذا أُعيدت إلى مكانه فتُفتح.
- يحذف
erpc worker secret rmمُدخل السر في مخزن المفاتيح مع سطره فيerpc.toml(ما لم يذكر إعداد آخر للتطبيق المُدخل نفسه)، ويترك القيمة الموجودة في 1Password أو سلسلة المفاتيح في مكانها. ولا يمسح القرص، وتبقى النسخ الموجودة في نسخك الاحتياطية. - لا يحذف erpc مُدخل مفتاح التداول ولا يكتب فوقه أبدًا. لاستبدال مفتاح، انقل الأموال، ثم أزل ملفه و
[wallet]بنفسك. - لا يمكن تسمية إعداد
WALLET، بأي حالة أحرف، في مخزن المفاتيح أو سلسلة المفاتيح؛ أما--store 1passwordفيقبل هذا الاسم.
العمل مع مفتاح التداول
عندما ينتهي erpc دون أن يعرف ما إذا كان التحويل قد تم، ابحث عن توقيعه قبل أن ترسل مرة أخرى: الإرسال الثاني تحويل ثانٍ.






