بتات التجزئة لمقاومة التصادم
تخزين 1000000 عنصر مع احتمال تصادم لا يتجاوز واحدًا في المليون يتطلب 59 بتًا من التجزئة، وهو أصغر عرض يحقق حد عيد الميلاد. وترى أيضًا فضاء التجزئة والخطر المقدّر عند هذا العرض. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- العناصر
- 1,000,000
- أقصى احتمال
- 0.000001
- البتات المطلوبة
- 59
- احتمال التصادم التقريبي
- 0.0000008674
- فضاء التجزئة
- 2^59
عند اختيار طول تجزئة للمعرّفات أو مفاتيح التخزين المؤقت أو ملخصات المحتوى أو الرموز القصيرة، ليس السؤال الصعب فقط ما إذا كان الملخص كافيًا لأمان ما قبل الصورة، بل كم عنصرًا يمكنكم تخزينه قبل أن يتصادم تجزئتان بالصدفة. تجيب هذه الحاسبة على مسألة التحجيم بحد عيد الميلاد الكلاسيكي. تقدّمون العدد المتوقع من العناصر وأقصى احتمال تصادم تقبلونه؛ فتعيد أصغر عرض بت صحيح يُبقي خطر تصادم الأزواج التقريبي عند ذلك الهدف أو دونه، مع حجم فضاء التجزئة والاحتمال التقريبي عند ذلك العرض.
حد عيد الميلاد ولماذا ينمو طول التجزئة مع مربع حجم المجموعة
تجزئة عشوائية منتظمة بعرض b بت تُسقط كل عنصر في فضاء حجمه اثنان مرفوع إلى b. بعنصر واحد لا يوجد ما يُتصادم معه، لكن بإدخال قيم كثيرة ينمو عدد الأزواج غير المرتبة مثل اختيار اثنين من n. يتصادم كل زوج باحتمال يقارب واحدًا على حجم الفضاء، لذا يكون العدد المتوقع للأزواج المتصادمة تقريبًا n مضروبًا في n ناقص واحد على اثنين مضروبًا في اثنين مرفوعًا إلى b.
عندما يكون هذا التوقع صغيرًا فهو أيضًا تقريب جيد لاحتمال تصادم واحد على الأقل. بإعادة الترتيب لاحتمال مستهدف p نحصل على قاعدة التحجيم: البتات تساوي سقف لوغاريتم أساس اثنين لـ n مضروبًا في n ناقص واحد على اثنين p. وبشكل مكافئ، البتات تقريبًا ضعف لوغاريتم n ناقص لوغاريتم p ناقص واحد.
هذا التركيب الجذري هو مفارقة عيد الميلاد الشهيرة بلباس هندسي: لإبقاء التصادمات نادرة مع مليار عنصر تحتاجون إلى أكثر بكثير من ثلاثين بتًا، ومقاومة التصادم التشفيرية أمام خصم يستطيع تجربة اثنين مرفوعًا إلى أربعة وستين تجزئة تدفع كلاسيكيًا نحو ملخصات بمائة وثمانية وعشرين بتًا أو أكبر. تستخدم هذه الأداة تقريب حد عيد الميلاد فقط —ولا تُنمذج تجزئات غير منتظمة ولا إنشاءات HMAC مقطوعة ولا هجمات التصادم المتعدد خارج حد الزوج الأساسي— فاعتبروا الإجابة حدًا أدنى للتخطيط لملخصات تبدو عشوائية، ثم أضيفوا هامشًا لخصوصيات التنفيذ ونماذج التهديد التي تتجاوز تصادمات الصدفة.
متى تستخدمون الحاسبة والتسعير والحدود الصريحة للنموذج
استخدموا أداة المتصفح المجانية أثناء صياغة مخططات المعرّفات، أو اختيار أطوال تجزئة مقطوعة لعناوين URL أو مفاتيح قواعد البيانات، أو تعليم لماذا مضاعفة حجم المجموعة تكلف نحو بت إضافي لا صفر. يفترض النموذج تجزئات مثالية منتظمة مستقلة وتقريب أزواج عيد الميلاد القياسي؛ ولن يحذّركم من مدخلات منظمة تكسر الانتظام، أو مسائل ما قبل الصورة الثانية أو امتداد الطول، أو بحث تصادم خصمي أرخص من القوة الغاشمة لعائلة تجزئة مكسورة.
ولأن التنفيذ pure parse من المستوى A، يشغّل الوحدة ذاتها الأداة والمسار الخادمي بلا شبكة وبلا عشوائية وبلا رموز نموذج، فيمكن لفحوصات التكامل المستمر تثبيت عروض البت المتوقعة إلى الأبد.
حالات الاستخدام
تخطيط طول المعرّفات والرموز القصيرة
يحدّد مهندسو المنتج عرض بت تجزئات مقطوعة أو معرّفات عشوائية بحيث تبقى التصادمات المتوقعة بين أعداد المستخدمين أو الكائنات المتوقعة ضمن ميزانية مخاطر مكتوبة.
مفاتيح التخزين المؤقت وملخصات المحتوى
تختار فرق المنصة أطوال الملخص للتخزين المؤقت وفهارس إزالة التكرار بمسح أعداد العناصر والاحتمالات المستهدفة بدل تخمين أرقام مستديرة.
تعليم حد عيد الميلاد
يُظهر المدرّسون وأدوات التحضير للمقابلات لماذا يتناسب خطر التصادم مع مربع n ويستعيدون عتبات الصف الكلاسيكية ذات الأربعة وستين بتًا بطريقة حتمية.
الأسئلة الشائعة
هل يغني هذا عن مراجعة أمان تشفيرية؟
لا. يُحجّم فقط تصادمات الأزواج بالصدفة للتجزئات المنتظمة. اختيار الخوارزمية والقطع وبحث التصادم الخصمي وقوة ما قبل الصورة ما زالت تحتاج تحليل أمان منفصلًا.
لماذا تظهر تصادمات التجزئة أبكر من المتوقع؟
لأن المهم هو عدد الأزواج لا عدد العناصر. فعدد الأزواج ينمو تقريبًا مع مربع عدد العناصر، وكل زوج قد يتصادم، لذلك يرتفع الخطر أسرع بكثير من ارتفاع العدد. وهذه هي مفارقة عيد الميلاد.
هل تصلح النتيجة لأي دالة تجزئة؟
تفترض تجزئة منتظمة تبدو عشوائية، وتستخدم الحد الأساسي للأزواج. ولا تشمل التجزئات غير المنتظمة أو التجزئات المقطوعة ذات المفتاح أو هجمات التصادم المتعدد، فاعتبرها حدًا أدنى للتخطيط وأضف هامشًا.
ما القيم التي يمكنني إدخالها؟
يتراوح عدد العناصر من 1 إلى 10 أس 15، ويجب أن يقع الاحتمال الأقصى بين الصفر والواحد دون أن يساويهما. وتُرفض القيم الواقعة خارج هذين النطاقين.
كيف تتغير البتات المطلوبة إذا ضاعفت عدد العناصر؟
تزيد بنحو بتين. فالبتات المطلوبة تساوي تقريبًا ضعف لوغاريتم عدد العناصر للأساس اثنين، مطروحًا منه لوغاريتم الاحتمال المستهدف وواحد، لذا تضيف كل مضاعفة قرابة بتين.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/hash-bits-for-collision \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":1000000,"max_probability":0.000001}'const res = await fetch("https://api.kit.forhosting.com/dev/hash-bits-for-collision", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": 1000000,
"max_probability": 0.000001
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hash-bits-for-collision",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": 1000000,
"max_probability": 0.000001
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hash-bits-for-collision", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":1000000,"max_probability":0.000001}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":1000000,"max_probability":0.000001}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hash-bits-for-collision", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"items": 1000000,
"max_probability": 0.000001
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_bits_for_collision",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تعمل الحسابات النقية ذاتها مجانًا في المتصفح وكعنصر API مفوتر، فتشترك العروض التعليمية ووثائق التصميم وسكربتات الأتمتة في عقد حتمي بلا ضوضاء عيّنة وبلا نموذج لغوي.
عقد الإدخال وقواعد التحقق وحقول الاستجابة
مثال: مليون عنصر بهدف واحد في المليون يعطي نحو تسعة وخمسين بتًا وفضاء تجزئة اثنين مرفوعًا إلى تلك القوة. فحوصات الصف الكلاسيكية مثل نحو أربعة مليارات عنصر عند خمسين بالمئة من الخطر تستعيد الرقم المألوف أربعة وستون بتًا. أرسلوا جسم JSON بحقلين مطلوبين. items عدد صحيح موجب من واحد إلى كوادرليون (واحد في عشرة مرفوعة إلى خمسة عشر) يصف كم قيمة تتوقعون تجزئتها أو تخزينها؛ وتُقبل الأسماء البديلة n وcount وnum_items. max_probability عدد منتهٍ بصرامة بين الصفر والواحد يعطي أكبر احتمال تصادم ستتحملونه تحت الحد؛ وتعمل الأسماء p وprobability وtarget_probability وmax_collision_probability بالمثل. الحقول الناقصة وغير الصحيحة لـ items والاحتمالات غير المنتهية والعدادات الصفرية أو السالبة واحتمالات الصفر أو الواحد أو خارج النطاق المنشور تفشل بـ invalid_input ولا تُفوتر. عند النجاح تعيد الاستجابة items وmax_probability، وbits_needed كأصغر عرض بت صحيح غير سالب، وapproximate_collision_probability كتقدير حد عيد الميلاد عند ذلك العرض (باستخدام واحد ناقص exp لسالب lambda عندما لا تكون lambda ضئيلة)، وhash_space كسلسلة اثنين وعلامة الإقحام bits_needed، وسلسلة صيغة قصيرة توثّق القاعدة.
متى تستخدمون الحاسبة والتسعير والحدود الصريحة للنموذج
استخدموا API عندما يحتاج خط تصميم أو مساعد استبيان أمني أو مخطط سعة أو منصة منهجية إلى JSON مستقر لأزواج كثيرة من n وp تحت عقد واحد. كل طلب ناجح عنصر مفوتر بسعر $0.002؛ والتحقق الفاشل لا يستهلك الرصيد. فسّروا دائمًا bits_needed على أنه «كم يجب أن يكون عرض ملخص يبدو عشوائيًا حتى تبقى تصادمات الأزواج بالصدفة بين n عنصرًا دون p»، ثم تحققوا من الخوارزمية الفعلية وسياسة القطع على حدة.
أسئلة تقنية
كيف أحسب بتات التجزئة لمقاومة التصادم؟
أرسلوا أعدادًا صحيحة items (أو n) وmax_probability p بصرامة بين 0 و1. تعيد API القيمة bits_needed = ceil(log2(n*(n-1)/(2*p))) تحت حد عيد الميلاد، مع الاحتمال التقريبي وhash_space.
ما الصيغة التي يستخدمها حد عيد الميلاد؟
يُقرَّب احتمال التصادم بـ n(n-1)/(2·2^b). حل أصغر عدد صحيح b يُبقي تلك القيمة عند p المستهدف أو دونه ينتج الحقل bits_needed.
ماذا لو كان items يساوي 1؟
بعنصر واحد لا يوجد زوج للتصادم، لذا bits_needed يساوي 0 وapproximate_collision_probability يساوي 0. العدادات دون 1 تُرفض كـ invalid_input.
هل حاسبة بتات التجزئة مجانية؟
تعمل أداة المتصفح مجانًا على جهازكم. تستخدم استدعاءات API رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل عنصر ناجح؛ وفشل التحقق لا يُفوتر.