العربية

أدوات المطور · مولد UUID

كيف يحول crypto.getRandomValues 16 البايتات العشوائية إلى الإصدار 4 UUID

· كيف يعمل

uuid التشفير متصفح API

ستة عشر بايت عشوائيًا مع تمييز حقول الإصدار والبت المتغير
الرسم التوضيحي المتجه الأصلي ToolAcre

الإصدار 4 UUID هو 16 bytes من مولد آمن للتشفير مع الكتابة فوق ستة بتات. يقوم هذا المنشور بنقل وحدات البايت من استدعاء Web Crypto إلى سلسلة الأحرف المألوفة 36.

المعرف الذي تحتاجه قبل أن يجيب الخادم - لماذا يأتي الإنشاء من جانب العميل في النماذج الأولى دون اتصال بالإنترنت، وواجهة مستخدم متفائلة وعمليات استيراد مجمعة

قد يحتاج النموذج غير المتصل بالإنترنت إلى معرف قبل أن يستجيب الخادم، وقد تقوم واجهة المستخدم المتفائلة بإنشاء عدة كائنات في وقت واحد. تم تصميم UUIDv4 ليتم إنشاؤه بشكل مستقل بدون عداد مركزي. إنه ليس دليلاً على هوية المستخدم أو سرًا يمكنك وضعه بأمان بدلاً من المصادقة. إذا كانت قاعدة البيانات الخاصة بك تحتاج إلى قيم يتم فرزها حسب وقت الإنشاء، فلن يتم ترتيب معرفات الإصدار 4 العشوائية؛ وهذا قرار مخطط منفصل وليس سببًا لإضعاف عشوائيتهم.

ما يفعله crypto.getRandomValues فعليًا هو ملء مصفوفة مكتوبة من مصدر إنتروبيا نظام التشغيل، وليس من صيغة JavaScript

crypto.getRandomValues يملأ Uint8Array بـ 16 bytes من المولد العشوائي الآمن تشفيرًا لمنصة المتصفح. ولا تستمد القيم من Date.now() أو Math.random(). يقوم نظام التشغيل والمتصفح بتنفيذ مصدر الإنتروبيا الأساسي، لذا يتلقى كود JavaScript بايتات بدلاً من تنفيذ صيغة الأرقام العشوائية نفسها. ToolAcre يرفض إنشاء معرف إذا كان مصدره الآمن غائبًا.

الكتابة فوق البايت 6 والبايت 8 - كيف يصبح إصدار nibble 4 وتصبح البتات المتغيرة 10xx، ولماذا يتم فقدان ستة بتات فقط

RFC 9562 يصف إصدارًا صغيرًا وحقلًا متغيرًا. بدءًا من ستة عشر بايت عشوائيًا، قم بتعيين البتات الأربعة العليا من البايت 6 إلى الثنائي 0100 (الإصدار 4)، وقم بتعيين البتتين العلويتين من البايت 8 إلى 10 (المتغير القياسي). يستخدم التنفيذ (byte6 & 0x0f) | 0x40 و (byte8 & 0x3f) | 0x80. تتم الكتابة فوق ستة بتات، مما يترك 122 بتات عشوائية ضمن نظام UUIDv4. هذه البتات الثابتة لا تجعل البايتات المتبقية أقل عشوائية.

من البايتات إلى 8-4-4-4-12 — التشفير السداسي، وإخراج الأحرف الصغيرة، ووضع الواصلة كما يحددها المعيار

قم بتشفير كل بايت على هيئة حرفين سداسيين عشريين بصفر بادئ عند الحاجة. أدخل الشرطات بعد 4، و6، و8، و10 bytes، لإنتاج 8-4-4-4-12 المألوف. مجموعات الأحرف السداسية العشرية. تحتوي سلسلة v4 الصالحة على 4 في بداية مجموعتها الثالثة وواحد من 8، 9، a أو b في بداية مجموعتها الرابعة. التنسيق لا يضيف الإنتروبيا؛ فهو يجعل فقط القيمة الأساسية 128-بت قابلة للتشغيل المتبادل مع الأدوات التي تتوقع النموذج النصي UUID.

مثال عملي - مخزن مؤقت واحد سعة 16 بايت يتم تتبعه من خلال الإخفاء والتنسيق إلى السلسلة النهائية UUID

تتبع البايتات التوضيحية 00 11 22 33 44 55 F6 77 38 99 AA BB CC DD إي إف إف. يؤدي إخفاء F6 عند البايت 6 إلى إنتاج 46؛ يؤدي إخفاء 38 عند البايت 8 إلى إنتاج B8. بعد التنسيق السداسي العشري الصغير والشرطات، تكون النتيجة 00112233-4455-4677-b899-aabbccddeeff. هذا مثال تعليمي ثابت بشكل متعمد، وليس معرفًا لإعادة استخدامه في الإنتاج. أنشئ واحدًا جديدًا لكل كائن حقيقي وقارن الإصدار والمواضع المختلفة بنفسك.

crypto.randomUUID() كاختصار لمكالمة واحدة - ما الذي تفعله الطريقة الأحدث لك والأماكن التي لا تكون متاحة فيها

على أصل آمن، ينفذ crypto.randomUUID() إنشاء الإصدار 4 وتنسيقه في مكالمة واحدة. ToolAcre يستخدمها حيثما كان ذلك متاحًا ويعود إلى getRandomValues ​​مع عمليات البت الصريحة أعلاه. يختلف توفر المتصفح حسب السياق: يقتصر RandomUUID على السياقات الآمنة، بينما قد تظل getRandomValues ​​موجودة على صفحة HTTP LAN. لا يعود أي من الفرعين إلى Math.random لمجرد إبقاء الزر يعمل على ما يبدو.

ما لا يغطيه هذا - الإصدارات المستندة إلى الوقت (v1، v7) والإصدارات المستندة إلى الاسم (v3، v5)، والتي تحتاج إلى مدخلات مختلفة عن البايتات العشوائية

لا تصف هذه الآلية معرفات v1 أو v7 المستندة إلى الوقت، أو معرفات v3/v5 المستندة إلى الاسم، أو تخطيطات v8 التجريبية. تتمتع المعرفات UUID العشوائية باحتمالية تصادم منخفضة جدًا مع العشوائية الصوتية، وليست استحالة رياضية مطلقة للتصادم. لا ينبغي استخدام الإصدار 4 UUID بمفرده كفحص للتحكم في الوصول أو رمز مميز لإعادة تعيين كلمة المرور دون مراعاة السرية والعمر والتفويض بشكل مستقل.

الخلاصة: العشوائية الآمنة هي المهمة بأكملها - يتم سحب المولد ToolAcre UUID من نفس المتصفح CSPRNG، لذا فإن ما تنسخه هو ما ستنتجه التعليمات البرمجية الخاصة بك

العشوائية الآمنة هي المهمة. يستخدم المولد ToolAcre UUID CSPRNG الخاص بالمتصفح، ويفرض الإصدار والبتات المتغيرة ويقدم فحصًا جيدًا للقيم المنسوخة. قارن النتيجة التي تم إنشاؤها مع مثال تخطيط البايت، ثم استخدم المخرجات الجديدة والفريدة فقط للدور الذي قام تطبيقك بتعيينه له بالفعل.