هل تعتقد أن تنفيذ nonces بسيط؟ فكر مرة اخرى. سواء كنت تقوم ببناء بروتوكولات onchain أو بنية تحتية خارج السلسلة ، فإن تنفيذ nonce الصحيح هو أحد أصعب أجزاء أمان التشفير. دعنا نتعمق في سبب صعوبة حماية إعادة التشغيل مما تبدو 👇 عليه
2 / أولا ، دعنا نفهم التوقيعات الرقمية. في تشفير المفتاح العام (مثل BLS) ، لديك مفتاح خاص يوقع الرسائل ومفتاح عام يتحقق منها. في Ethereum: العنوان = تجزئة المفتاح العام الرسالة = تجزئة المعاملة التوقيع = 64 بايت من إثبات التشفير
3 / ها هي المشكلة: الرياضيات في معظم بروتوكولات تشفير المفتاح العام لا تحد من عدد المرات التي يمكن فيها التحقق من التوقيع مقابل نفس الرسالة. بمجرد حصولك على توقيع صالح ، يمكنك إعادة تشغيله بلا حدود. هذا يفتح الباب لإعادة الهجمات.
4 / أدخل nonce: "رقم مستخدم مرة واحدة" يمنع هجمات الإعادة. عندما يتلقى المستهلك رسالة تحتوي على nonce ، فإنه يتحقق مما إذا كان هذا nonce قد تم استخدامه من قبل. إذا كانت الإجابة بنعم → الرفض. تستخدم معاملات Ethereum هذا النمط.
5 / لكن التنفيذ غير المتكرر معقد بشكل مخادع. المتطلبات الرئيسية: - يجب ألا تكون Nonces قابلة لإعادة الاستخدام (على هذه السلسلة أو غيرها) - يجب منع هجمات إعادة التشغيل بشكل دائم - تحتاج إلى آليات للتعامل مع نمو التخزين - يجب أن تكون مقاومة للهجمات الأمامية
6 / الحل الساذج: قم بتخزين جميع الأشياء غير المشروعة في قاعدة بيانات إلى الأبد. هذا له مشكلتان رئيسيتان: أ) نمو التخزين غير المحدود (خاصة مع هجمات البريد العشوائي) ب) التعرض للهجمات الأمامية المشكلة (أ) أسهل في الحل من (ب). دعنا نتعامل مع التخزين أولا ...
7 / nonces المستندة إلى الطابع الزمني تحل نمو التخزين! استخدم الطابع الزمني + فترة انتهاء الصلاحية. يتم حذف nonces التي يزيد عمرها عن 5 دقائق من قاعدة البيانات. ولكن ماذا عن الرسائل المتزامنة من نفس الحساب؟ يتشاركون طابعا زمنيا. الحل: الطابع الزمني + random_bytes للتفرد الحبيبي.
8/ الجري الأمامي هو الجزء الصعب. يمكن للجهات الفاعلة الخبيثة اعتراض التوقيعات الصالحة ، وتشغيلها أمامي لتمييز nonces على أنها مستخدمة ، ثم يتم رفض مكالمة المستخدم الشرعي. هذه مشكلة في السلسلة مع العمليات المجمعة إذا رفض توقيع واحد غير صحيح دفعة كاملة. بالنسبة إلى وضع عدم الاتصال: استخدم تشفير TLS! لا تدع أي ممثل ضار يرى التوقيع أو التوقيع.
9 / لا تنس المثابرة! إذا كانت ذاكرة التخزين المؤقت nonce في الذاكرة فقط ، فيمكن للمهاجمين إعادة تشغيل nonces القديمة بعد إعادة تشغيل النظام. استمر دائما في حالة nonce للتخزين الدائم وإعادة التحميل عند بدء التشغيل. ذاكرة التخزين المؤقت للذاكرة فقط = نافذة إعادة التشغيل.
10 / nonces فريدة من نوعها لكل مستهلك! عند البث إلى عدة مستخدمين، يجب أن يحصل كل منهم على رسالة/توقيع مختلف. خلاف ذلك ، فأنت عرضة لهجمات Man-in-the-Middle حيث يقوم أحد المستلمين بإعادة توجيه الرسالة ، وانتحال شخصية المرسل الأصلي.
11 / nonces المتزايدة (مثل Ethereum ، nonce = prev nonce + 1) لها مكانها ، لكن احذر! إنها تخلق تحديات هائلة للبنية التحتية خارج السلسلة: الرسائل غير المنتظمة ومشكلات المزامنة وسيناريوهات الاسترداد المعقدة. لا تستخدم إلا إذا كنت واثقا من وصول الرسائل (أو يجب) بالتسلسل.
ملخص - قائمة مراجعة تنفيذ Nonce: ✅ استخدم nonces لمنع هجمات إعادة التشغيل ✅ استمر في حالة nonce عبر عمليات إعادة التشغيل ✅ تنفيذ آليات انتهاء الصلاحية (الطابع الزمني + التنظيف) ✅ اجعل nonces فريدا لكل جهاز استقبال ✅ الحماية من التشغيل الأمامي باستخدام القنوات المشفرة ✅ تجنب الأخطاء المتزايدة ما لم يكن الطلب مضمونا الأمن يكمن في التفاصيل! 🛡️
‏‎1.36‏K