تخطَّ إلى المحتوى

الأمان

لم يخضع casty لتدقيق أمني. تسرد هذه الصفحة ما يحمله وما يستطيع كل جزء فعله.

السر أين يوجد ما الذي يستطيع فعله كيف تستعيده
عبارة البذرة في الذاكرة أثناء تشغيل casty init أو casty key revoke؛ لا تُكتب على القرص ولا تُرسل إلى أي مكان أبدًا. مع casty init --fid ومفتاح أضافته محفظة من الصفحة، لا يراها casty إطلاقًا كل شيء: تحمل حفظ معرّف fid الخاص بك لا يستطيع casty. احفظها دون اتصال
مفتاح التطبيق (Ed25519) ~/.config/casty/keys.enc.json، مشفرًا بـ scrypt وXChaCha20-Poly1305، بالوضع 0600 توقيع المنشورات والتفاعلات والمتابعات باسم معرّفك حتى تنتهي صلاحيته دون استخدام (30 يومًا افتراضيًا، و90 على الأكثر) casty key revoke <key> بعبارة البذرة، أو --self بالمفتاح نفسه
رسالة KEY_ADD موقّعة لم تُؤكَّد بعد في المخزن المشفر نفسه، حتى يرى casty init المفتاح مسرودًا أو ترفض العقدة الرسالة إضافة ذلك المفتاح الواحد، مرة واحدة casty key revoke إن دُمجت يومًا
كلمة مرور مخزن المفاتيح تُكتب في مطالبة مخفية فك تشفير مفاتيح التطبيق على هذا الجهاز ألغِ المفاتيح، واحذف keys.enc.json، وشغّل casty init
رمز casty web ~/.config/casty/web-token، بالوضع 0600؛ وفي تخزين المتصفح المقترن أثناء تشغيل casty web: قراءة التغذية والكتابة بمفتاح التطبيق الخاص بك، من أي مكان تصل منه الصفحة أوقف casty web، ثم شغّله مع --new-token
الشيء نفسه، على مضيف العقدة (1-node.sh serve) ~/snapchain/casty/config/keys.enc.json (0600)، وكلمة المرور في ~/snapchain/casty/passphrase (0600، سر Docker)، والرمز في ~/snapchain/casty/config/web-token؛ والمفتاح مفكوك التشفير في ذاكرة الخدمة أثناء عملها القراءة والكتابة باسمك من أي شبكة، أثناء عمل الخدمة؛ ومستخدم root على المضيف يملك المفتاح casty key revoke <key> بعبارة البذرة؛ وdocker compose stop casty على المضيف؛ ويُبقي --read-only المفتاح في المنزل
زوج مفاتيح الدفع والاشتراكات (casty serve) ~/snapchain/casty/config/vapid.json (0600) وcache/push.json على المضيف إرسال إشعار دفع، «new mention from @name»، إلى المتصفحات المشتركة؛ ولا ترى خدمة الدفع إلا نصًا مشفرًا احذف الملفين وأعد تشغيل casty؛ وأوقف الإشعارات في المتصفح
رمز السحابة (HCLOUD_TOKEN، بيانات اعتماد AWS) بيئتك؛ لا تكتبه السكربتات أبدًا إنشاء الخوادم وحذفها في ذلك الحساب ألغه في لوحة تحكم المزوّد
مفتاح SSH مفتاحك؛ لا يُرفع إلا نصفه العام تسجيل الدخول إلى مضيف العقدة بصلاحيات root أزله من المضيف ومن المزوّد

عبارة البذرة تتحكم في الحساب كله. استخدم حساب اختبار لهذا الدليل، ولا تلصق عبارة البذرة إلا في برامج من مطورين تثق بهم، وفضّل مفتاحًا تأذن به محفظتك: casty init --fid <fid>، ثم casty web، وتحت you اختر «add a key with your wallet».

تقرأ مطالبة عبارة البذرة من الطرفية مع إيقاف عرض الأحرف. مع --mnemonic-stdin تأتي العبارة من أنبوب بدلًا من ذلك، وتبقى مطالبة كلمة المرور تقرأ من الطرفية. يصفّر casty بايتات العبارة بعد الاستخدام؛ أما السلسلة النصية المسلّمة إلى مكتبة اشتقاق المفاتيح، والمفتاح الذي تشتقه، فلا يمكن مسحهما من الذاكرة في JavaScript.

يحل CASTY_PASSPHRASE محل مطالبة كلمة المرور. وُجد للاختبارات ولـ pnpm demo؛ لا تستخدمه لمخزن مفاتيح يحمل مفتاحًا حقيقيًا.

  • على مضيف مستأجر، يفتح الجدار الناري SSH (22) وواجهة HTTP (3381) وgRPC (3383) لـ --allow-ip فقط، وهو عنوانك أنت افتراضيًا. ومنفذ gossip (3382) مفتوح للجميع لكي تتصل العقد الأخرى. والمضيف الذي تملكه أصلًا لا يحصل على جدار ناري من casty.
  • يُنشر statsd (8125/udp، 8126/tcp) وGrafana (3000) على واجهة loopback للمضيف فقط، statsd عبر متغيرات STATSD_PUBLISH الخاصة بملف compose نفسه في .env، وGrafana عبر ملف override. كلمة مرور admin في Grafana هي الكلمة العشوائية التي يسجلها .env؛ والعرض لا يحتاج إلى تسجيل دخول، كما يضبطه ملف grafana.ini الخاص بـ Snapchain.
  • يتحدث casty إلى عقدتك عبر نفق SSH على 127.0.0.1:3381. ولا يستدعي أي واجهة Farcaster مستضافة. ولا يُسأل سجل fname العام في fnames.farcaster.xyz إلا عن اسم لا تعرفه العقدة: @name تتابعه أو تذكره في منشور (يوقف --no-allow-fname-server ذلك)، أو تقرؤه بـ feed --fids أو تبحث عنه في casty web، ومؤلف منشور تشير إليه برابطه على farcaster.xyz. ولا يُسأل OP Mainnet RPC إلا حين تمرر --op-rpc.
  • يستمع casty web على 127.0.0.1 ما لم يحدد --listen عنوانًا آخر، وكل طلب API إليه يحتاج إلى رمزه. تسرد في المتصفح وعلى الهاتف كيف تُحمى الصفحة، وما الذي يتغير حين يصل إليها هاتف عبر الشبكة المحلية.
  • يفتح 1-node.sh serve --domain الصفحة للإنترنت عبر HTTPS (المنفذان 80 و443، يُفتحان بـ 0-provision.sh --https)؛ و--tailscale لشبكة tailnet الخاصة بك فقط. عندها تحتاج الصفحة إلى رمزها، وترسل HSTS، وتجيب العنوان الواحد بـ 120 طلب API في الدقيقة على الأكثر. تسرد من أي شبكة ما يحمله المضيف.
  • قد تحتوي منشورات الآخرين على تسلسلات هروب للطرفية. يزيل casty أحرف التحكم وتجاوزات الاتجاه الثنائي قبل طباعتها، وتُدرج صفحة الويب نص المنشور كنص.
  • مفتاح تطبيق: يعرض casty key list ما هو مسجل لمعرّفك. ألغِ المفتاح بـ casty key revoke <key> --self من جهاز ما زال يملكه، أو بعبارة البذرة من أي مكان.
  • عبارة البذرة: انقل معرّف fid إلى عنوان حفظ جديد بمحفظة تثق بها، ثم ألغِ كل مفتاح تطبيق.
  • رمز سحابة: ألغه، ثم ابحث في الحساب عن خوادم لم تنشئها أنت.
  • رمز casty web: أوقف casty web وشغّله مجددًا مع --new-token. كل رابط طُبع من قبل يتوقف عن العمل. على مضيف العقدة: احذف ~/snapchain/casty/config/web-token ونفّذ docker compose restart casty.
  • مضيف العقدة: ألغِ مفتاح التطبيق بعبارة البذرة، واحذف ~/snapchain/casty، واعتبر المضيف مخترقًا بالنسبة إلى العقدة أيضًا.

أبلغ عن الثغرات بشكل خاص عبر الإرشادات الأمنية (security advisories) للمستودع، لا في issue عامة. ويحمل ملف SECURITY.md في المستودع الجدول نفسه.