توليد رموز احتياطية للمصادقة الثنائية ببذرة
ينشئ مولّد الرموز الاحتياطية للمصادقة الثنائية العدد المحدد بدقة من رموز الاسترداد الفريدة والمخصصة للاستخدام مرة واحدة، بالتنسيق المعتاد المكوّن من أربع خانات ثم شرطة ثم أربع خانات.
شغّل الأداة مجانًا
عند إدخال العدد والبذرة السرية نفسيهما، تحصلون دائماً على المجموعة المرتبة نفسها. تفيد قابلية إعادة الإنتاج هذه في التجهيز المنضبط، وبيانات الاختبار، وإجراءات الاسترداد الموثقة، والأنظمة التي تحتاج إلى إعادة إنشاء الرموز من دون تخزين القائمة الناتجة. تتم العملية محلياً بالكامل، فلا تستخدم الشبكة أو الساعة أو مصدراً عشوائياً أو بيانات الحساب أو حالة خفية. يجب حماية البذرة وكل رمز ناتج باعتبارها بيانات مصادقة حساسة.
اختيار العدد وحماية البذرة
ابدؤوا بتحديد عدد رموز الاسترداد التي ينبغي للحساب أو التطبيق إصدارها. يجب أن يكون العدد صحيحاً من واحد إلى ألف؛ ويُرفض أي طلب بقيمة أقل من واحد بدلاً من إنشاء مجموعة فارغة من دون تنبيه. بعد ذلك، أدخلوا بذرة غير فارغة. البذرة هي المصدر الكامل لقابلية إعادة الإنتاج، ولذلك ينتج عن القيم المتطابقة للبذرة والعدد رموز متطابقة بالترتيب نفسه. استخدموا سراً طويلاً وعالي الإنتروبيا، تم إنشاؤه وتخزينه وفق عملية إدارة الأسرار المعتمدة في مؤسستكم. لا يصلح اسم شخص أو عنوان بريد إلكتروني أو تسمية مشروع أو عبارة قصيرة سهلة التذكر كبذرة في بيئة الإنتاج، لأن شخصاً آخر قد يخمنها ويعيد إنشاء الرموز. لا تعيدوا استخدام بذرة واحدة بين مستخدمين أو بيئات أو خدمات مختلفة. يمنع فصل النطاقات داخل الخوارزمية التداخل العرضي مع اشتقاقات أخرى، لكنه لا يعالج ضعف البذرة أو انكشافها. إذا احتجتم إلى بيانات ثابتة للاختبارات المؤتمتة، فميّزوا بذور الاختبار واعزلوها بوضوح كي لا يقبل نظام مصادقة إنتاجي مخرجاتها أبداً. يقتصر طول البذرة على 4,096 حرفاً حتى يبقى التنفيذ محدوداً ويمكن توقعه.
فهم عملية التوليد الحتمية
يُشتق كل موضع في المخرجات بصورة مستقلة باستخدام SHA-256 من وسم ذي إصدار، وطول البذرة الدقيق، ونص البذرة، والموضع الذي يبدأ من الصفر، وعداد إعادة المحاولة. يجعل تضمين طول البذرة تأطير المدخلات خالياً من الالتباس، بينما يفصل الوسم ذو الإصدار هذا الغرض عن الحسابات الأخرى المعتمدة على البذور. يقرأ المولّد قيماً بلا إشارة من الملخص، ثم يطبق أخذ العينات بالرفض قبل اختزالها إلى ثماني خانات عشرية. تمنع هذه الخطوة الانحياز الطفيف في التوزيع الذي قد يسببه التحويل المباشر بواسطة باقي القسمة. يُنسق كل رقم مقبول في مجموعتين من أربع خانات تفصل بينهما شرطة، مع الاحتفاظ بالأصفار البادئة. تتعقب مجموعة القيم التي سبق إصدارها؛ وإذا وقع تصادم، يتقدم عداد المحاولة بصورة حتمية حتى يعثر على رمز جديد. لذلك تحتوي النتيجة على العدد المطلوب من الرموز الفريدة، كما تعيد العملية ذاتها إنتاج قرارات التصادم والقائمة النهائية معاً. لا يمكن لأي خدمة شبكة أو ساعة نظام أو مولّد عشوائي في بيئة التشغيل أو ذاكرة تخزين مؤقت دائمة أو حالة وحدة قابلة للتغيير أن يؤثر في الإجابة. ويؤدي تغيير حرف واحد فقط من البذرة عادةً إلى تغيير القائمة بأكملها.
نشر الرموز وتخزينها وإبطالها بأمان
لا يمثل التوليد سوى جزء من سير عمل الرموز الاحتياطية. يجب أن تخزن خدمة المصادقة لديكم أداة تحقق معتمدة لكل رمز، وأن تضع علامة الاستهلاك على الرمز بعد أول استخدام ناجح، وأن تحد من معدل المحاولات، وأن توفر إجراءً صريحاً للإبطال أو إعادة التوليد. لا تسجلوا البذرة أو الرموز بصورتها الصريحة في التحليلات أو سجلات التتبع أو تذاكر الدعم أو مخرجات البناء أو المحادثات المشتركة. سلّموا الرموز إلى المستخدم الذي تم التحقق من هويته عبر جلسة محمية، وانصحوه بحفظها من دون اتصال في مدير كلمات مرور أو مكان آمن آخر. تسهّل الحتمية التعافي من الكوارث والتجهيز المنضبط، لكنها تعني أيضاً أن كل من يحصل على البذرة يستطيع إعادة إنشاء جميع الرموز. انتقلوا إلى بذرة جديدة ومستقلة عند الاشتباه في انكشافها، أو عندما يطلب المستخدم إعادة التوليد، أو عندما تفرض السياسة إبطال المجموعة القديمة. لا تطلبوا عدداً مختلفاً فقط مع البذرة القديمة، لأن المواضع المشتركة بين الطلبين ستبقى متطابقة. يسهل تجميع الخانات نسخ الرموز، إلا أن لكل رمز مئة مليون قيمة ممكنة فقط، ولذلك تظل وسائل الحماية من المحاولات عبر الإنترنت ضرورية. تبلغ تكلفة طلب API مقدار $0.002، ويستخدم مسار المتصفح الحساب النقي نفسه.
حالات الاستخدام
تجهيز رموز الاسترداد
أنشئوا مجموعة منضبطة من رموز الاسترداد المجمعة أثناء التسجيل، مع إبقاء الاشتقاق قابلاً لإعادة الإنتاج من بذرة محمية لكل مستخدم.
إنشاء اختبارات مصادقة ثابتة
ولّدوا بيانات ثابتة للرموز الاحتياطية لاختبارات التكامل من دون إضافة قائمة تُصان يدوياً إلى مستودع الشفرة.
إعادة إنشاء مجموعة معتمدة
استعيدوا القائمة المرتبة نفسها أثناء إجراء موثق للحوادث عندما تظل البذرة المحمية متاحة بينما تفقد النسخة المعروضة.
الأسئلة الشائعة
ما التنسيق الذي تستخدمه الرموز؟
يتكون كل رمز من ثماني خانات عشرية موزعة على مجموعتين من أربع خانات، مثل 0123-4567، مع الاحتفاظ بالأصفار البادئة.
هل تعيد المدخلات نفسها الرموز نفسها دائماً؟
نعم. لا تعتمد الخوارزمية على العشوائية أو الساعة أو الشبكة أو حالة مخزنة، ولذلك يعيد العدد نفسه والبذرة المطابقة إنتاج القائمة المرتبة نفسها.
هل يمكن أن تتكرر الرموز في استجابة واحدة؟
لا. تُكتشف التصادمات وتُعاد المحاولة بصورة حتمية حتى تحتوي القائمة المطلوبة على رموز فريدة.
هل يمكن استخدام بذرة سهلة التذكر؟
لا في بيئة الإنتاج. استخدموا سراً طويلاً وعالي الإنتروبيا تم إنشاؤه وتخزينه بعملية معتمدة، لأن من يحصل على البذرة أو يخمنها يستطيع إعادة إنشاء الرموز.
ماذا يحدث إذا كان العدد صفراً أو سالباً؟
يفشل الطلب برسالة خطأ للمدخلات غير الصالحة توضح أن العدد يجب ألا يقل عن واحد.
ما تكلفة طلب API؟
تبلغ تكلفة كل طلب API مقدار $0.002. وينفذ إصدار المتصفح الخوارزمية النقية نفسها محلياً.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/security/two-factor-backup-codes-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"count":8,"seed":"correct-horse-battery-staple-2026"}'const res = await fetch("https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"count": 8,
"seed": "correct-horse-battery-staple-2026"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/two-factor-backup-codes-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"count": 8,
"seed": "correct-horse-battery-staple-2026"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"count":8,"seed":"correct-horse-battery-staple-2026"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"count":8,"seed":"correct-horse-battery-staple-2026"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"count": 8,
"seed": "correct-horse-battery-staple-2026"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.two_factor_backup_codes_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |