يقدم هذا المقال تقرير اختبار أمان حول عشوائية توليد العبارات الأولية (mnemonic) في تطبيق OneKey (محفظة برمجية)، ويشمل جميع أنظمة التشغيل التي يدعمها تطبيق OneKey (macOS، Windows، Android، iOS) وعملاءه المعنيين (سطح المكتب والإضافة).
الاستنتاج
يستخدم تطبيق OneKey واجهات برمجة تطبيقات (APIs) للأرقام العشوائية القوية تشفيرياً والموصى بها وفقاً لإرشادات التطوير عبر عملاء Windows وmacOS وiOS وAndroid، بالإضافة إلى إضافة Chrome. وتؤكد الاختبارات الداخلية الامتثال لمعايير أمان الأرقام العشوائية NIST SP 800-22 وFIPS 140-2.
على المنصات التي تعتمد على Chrome (Windows، macOS)، يتم استخدام واجهة برمجة تطبيقات الأرقام العشوائية الزائفة الآمنة
crypto.getRandomValuesالمقدمة من Chrome لتوليد أرقام عشوائية زائفة قوية تشفيرياً.على منصات Android وiOS التي تعتمد على React Native، يتم استدعاء واجهات العشوائية الآمنة التي يوفرها النظام
SecureRandomوSecRandomCopyBytesعلى التوالي.
⚠️ ملاحظة: على الرغم من التزام تطبيق OneKey الصارم بإرشادات تطوير الأمان، إلا أن أمان توليد الأرقام العشوائية قد يتأثر أيضاً بتنفيذ نظام التشغيل/الأجهزة الخاص بجهاز المستخدم.
اختبار الأمان
NIST SP 800-22 FIPS 140-2
NIST SP 800-22 (منشور المعهد الوطني للمعايير والتقنية الخاص رقم 800-22) هو وثيقة صادرة عن المعهد الوطني للمعايير والتقنية (NIST) في الولايات المتحدة، تشمل أساساً مجموعة اختبارات إحصائية لاختبار مولدات الأرقام العشوائية الزائفة (PRNG). وهي توفر مجموعة من الاختبارات الإحصائية لتقييم عشوائية وجودة تسلسلات البتات التي يتم توليدها بواسطة مولدات الأرقام العشوائية.
برنامج الاختبار: مجموعة الاختبارات الإحصائية NIST SP 800-22
بيئة الاختبار: macOS 14.5
معايير الاختبار:
المشروع
|
المعايير
|
طول الجزء
|
1024000
|
عناصر الاختبار
|
1 (جميع الاختبارات الـ 15)
|
اختبار تكرار الكتلة - طول الكتلة(M)
|
20480
|
اختبار القالب غير المتداخل - طول الكتلة(m)
|
10
|
اختبار القالب المتداخل - طول الكتلة(m)
|
10
|
اختبار الانتروبيا التقريبية - طول الكتلة(m)
|
10
|
اختبار التسلسل - طول الكتلة(m)
|
16
|
اختبار التعقيد الخطي - طول الكتلة(M)
|
5000
|
تيارات البتات
|
20 (20*1024000 بت = 20480000 بت = 20 ميجابايت)
|
Windows
النظام: Win10 22H2؛ الجهاز: i7-13700h
عميل سطح المكتب
عميل Windows لسطح المكتب لتطبيق OneKey هو تطبيق Electron يعتمد على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-windows-desktop-wini713.txt (متاحة في المرفق)
إضافة المتصفح
تعتمد إضافة Chrome على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-windows-ext-wini713.txt (متاحة في المرفق)
macOS
النظام: Sonoma 14.6؛ الجهاز: MacBook Pro 2020 13-inch M1
عميل سطح المكتب
عميل macOS لسطح المكتب لتطبيق OneKey هو تطبيق Electron يعتمد على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-macOS-desktop-macm1p.txt (متاحة في المرفق)
إضافة المتصفح
تعتمد إضافة Chrome على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-macOS-ext-macm1p.txt (متاحة في المرفق)
Android
النظام: hyperOS 1.0.4.0؛ الجهاز: Xiaomi 10s snapdragon870
عميل Android
يعتمد عميل Android لتطبيق OneKey، كونه تطبيق React Native، على واجهات برمجة تطبيقات أصلية. على Android، يتم استدعاء واجهة برمجة تطبيقات النظام
SecureRandomعند استدعاءcrypto.getRandomValuesفي التطبيق. باستخدام تصحيح الأخطاء عن بعد لـ React JS، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأوليةcrypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-android-app-andsm870.txt (متاحة في المرفق)
iOS
النظام: IOS 17.5؛ الجهاز: iPhoneX A11
عميل iOS
يعتمد عميل iOS لتطبيق OneKey، كونه تطبيق React Native، على واجهات برمجة تطبيقات أصلية. على iOS، يتم استدعاء واجهة برمجة تطبيقات النظام
SecRandomCopyBytesعند استدعاءcrypto.getRandomValuesفي التطبيق. باستخدام تصحيح الأخطاء عن بعد لـ React JS، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأوليةcrypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. أدى الاختبار وفقاً للمعايير المحددة إلى الحصول على "تقرير اختبار" (انظر المرفق أدناه)، حيث اجتازت جميع العناصر الاختبار، مما يلبي متطلبات الأمان.النتائج: NIST SP 800-22-iOS-app-x.txt (متاحة في المرفق)
FIPS 140-2 (منشور معيار معالجة المعلومات الفيدرالي 140-2) هو معيار أمان كمبيوتر صادر عن NIST. وهو يفصل متطلبات الأمان للوحدات التشفيرية، مع التركيز بشكل خاص على أنواع RNG، وقوة الأمان، والبذور، والانتروبيا، والدورية، والاختبارات الدورية، والاختبارات المستمرة.
برنامج الاختبار: rng-tools
معايير الاختبار: لا يوجد
بيئة الاختبار: ubuntu 24.04 arm64
عملية التجميع:
تثبيت gcc و automake بشكل صحيح
تنفيذ
./autogen.shتنفيذ
./configure(في حال حدوث أخطاء، قم بضبط التبعيات وفقاً لرسائل الخطأ)تنفيذ
makeلتجميع ملفات rngd و rngtestتنفيذ
./rngtest < testfile.bin
⚠️ ملاحظة: يجب أن تكون ملفات الاختبار بتنسيق ثنائي (binary) عند الإدخال، وليس ASCII.
Windows
النظام: Win10 22H2؛ الجهاز: i7-13700h
عميل سطح المكتب
عميل Windows لسطح المكتب لتطبيق OneKey هو تطبيق Electron يعتمد على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه أن جميع العناصر اجتازت الاختبار، مما يلبي متطلبات الأمان.
إضافة المتصفح
تعتمد إضافة Chrome على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه أنه تم اختبار 1024 جولة مع فشل جولة واحدة في عناصر التشغيل، ولكن جميع العناصر اجتازت الاختبار بشكل عام، مما يلبي متطلبات الأمان.
macOS
النظام: Sonoma 14.6؛ الجهاز: MacBook Pro 2020 13-inch M1
عميل سطح المكتب
عميل macOS لسطح المكتب لتطبيق OneKey هو تطبيق Electron يعتمد على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه أن جميع العناصر اجتازت الاختبار، مما يلبي متطلبات الأمان.
إضافة المتصفح
تعتمد إضافة Chrome على محرك Chrome. باستخدام أدوات المطور، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأولية
crypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه أن جميع العناصر اجتازت الاختبار، مما يلبي متطلبات الأمان.
Android
النظام: hyperOS 1.0.4.0؛ الجهاز: Xiaomi 10s snapdragon870
عميل Android
يعتمد عميل Android لتطبيق OneKey، كونه تطبيق React Native، على واجهات برمجة تطبيقات أصلية. على Android، يتم استدعاء واجهة برمجة تطبيقات النظام SecureRandom عند استدعاء
crypto.getRandomValuesفي التطبيق. باستخدام تصحيح الأخطاء عن بعد لـ React JS، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأوليةcrypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه ثلاث جولات من أصل 1024 فشلت في جميع عناصر الاختبار، ولكن جميع العناصر اجتازت الاختبار بشكل عام، مما يلبي متطلبات الأمان.
⚠️ ملاحظة: شهد عميل Android ثلاث جولات اختبار من أصل 1024 فشلت فيها جميع عناصر الاختبار. قد تكون هذه المشكلة خطأ (bug) في أداة اختبار العشوائية (rng-test) ولا تؤثر على الاستنتاج العام للاختبار.
iOS
النظام iOS 17.5؛ الجهاز: iPhoneX A11
عميل iOS
يعتمد عميل iOS لتطبيق OneKey، كونه تطبيق React Native، على واجهات برمجة تطبيقات أصلية. على iOS، يتم استدعاء واجهة برمجة تطبيقات النظام
SecRandomCopyBytesعند استدعاءcrypto.getRandomValuesفي التطبيق. باستخدام تصحيح الأخطاء عن بعد لـ React JS، يتم استدعاء واجهة برمجة تطبيقات توليد انتروبيا العبارات الأوليةcrypto.getRandomValuesفي وقت التشغيل لأخذ عينات من الأرقام العشوائية، بإجمالي 20 ميجابايت. تم تحويل ملف النص إلى ملف ثنائي، ويوضح "تقرير الاختبار" أدناه فشل اختبار واحد في الجري الطويل (Long run) من أصل 1024 جولة، ولكن جميع العناصر اجتازت الاختبار بشكل عام، مما يلبي متطلبات الأمان.
