سؤال

أنا أتطلع إلى تطوير النظام التي تحتاج إلى تعيين كل مستخدم فريدة من نوعها رمز pin الأمن.المستخدم فقط أدخل هذا الرمز pin كوسيلة لتحديد نفسه.وبالتالي لا تريد المستخدم أن يكون قادرا على تخمين آخر مستخدمين الرقم السري.على افتراض ماكس المستخدمين سوف يكون هو 100000 كم أن هذا الرقم السري ؟

على سبيل المثال1234 4532 3423

يجب أن تولد هذه المدونة عن طريق نوع من الخوارزمية ؟ أو ينبغي أن تولد عشوائيا ؟

أساسا أنا لا أريد الناس أن تكون قادرة على تخمين الشعوب الأخرى pincode وينبغي أن دعم عدد كاف من المستخدمين.

أنا آسف إن كان سؤالي يبدو مربكا بعض الشيء ولكن بكل سرور لتوضيح أي شكوك.

شكرا جزيلا لك.

التحديث

بعد قراءة جميع المشاركات أدناه ، أود إضافة بعض مزيد من التفاصيل.

  1. ما أحاول تحقيقه هو شيء مشابه جدا بطاقة نقطة الصفر.
  2. المستخدم يعطى بطاقة ، التي كان يجب أن الصفر إلى العثور على رمز pin.
  3. الآن باستخدام هذا الرقم السري يجب أن يكون المستخدم قادرا على الوصول إلى نظام بلدي.

لا يمكنني إضافة المزيد من الأمن (على سبيل المثالاسم المستخدم وكلمة المرور) ، بعد ذلك سوف يمنع المستخدم من استخدام بطاقة الصفر.أنا تريد أن تجعل من الصعب قدر ممكن لتخمين الرقم السري في حدود.

شكرا لكم جميعا لجهودكم مذهلة الردود مرة أخرى.

هل كانت مفيدة؟

المحلول

لو افترضنا 100 ، 000 من المستخدمين الأقصى ثم أنها يمكن أن يكون لها دبابيس فريدة من نوعها مع 0-99,999 ie.5 أرقام.

ومع ذلك ، فإن هذا من شأنه أن يجعل من الأسهل إلى تخمين دبابيس مع أكبر عدد ممكن من المستخدمين.إذا كنت يمكن أن تحد من عدد من المحاولات على دبوس ثم هل يمكن أن يكون أقصر دبوس.على سبيل المثال.أقصى 10 محاولات فاشلة في الملكية الفكرية في اليوم الواحد.

كما يعتمد على قيمة ما كنت وحماية كيف كارثية لو واحد غريب لم يخرج.

كنت أذهب 9 أرقام إذا كنت تريد أن يبقيه قصيرة أو 12 أرقام إذا كنت تريد أكثر قليلا من الآلي التخمين.

لتوليد دبابيس صور عالية الدقة نسخة من الوقت جنبا إلى جنب مع بعض الملح وربما عدد شبه عشوائي ، وتوليد تجزئة واستخدام الأولى 9 أو 12 رقما.تأكد من أن هناك معقولة عشوائية تأخير بين PIN الجديد الأجيال حتى لا يولد لهم في حلقة, و إذا أمكن جعلها المستخدم شرع.

على سبيل المثال.اليسار(Sha1(التاريخ والوقت + الملح + المزيف),9)

نصائح أخرى

4 أرقام عشوائية ينبغي أن يكون الكثير إذا كنت وإلحاقه فريدة من نوعها المعروفة حاليا (يمكن أن يكون لا يزال عدد) [النحو الموصى به من قبل starblue]

الزائفة مولد رقم عشوائي كما ينبغي أن يكون على ما يرام.يمكنك تخزين هذه في DB باستخدام عكسها التشفير (AES) أو في اتجاه واحد تجزئة

القلق الرئيسي لديك هو عدد المرات التي يمكن للشخص بطريقة غير صحيحة إدخال دبوس قبل أن يتم تأمين.وهذا ينبغي أن تكون منخفضة حوالي ثلاثة.... هذا وسوف يتوقف الناس التخمين الشعوب الأخرى أرقام.

أي أطول من 6 أرقام و الناس سوف ينسون لهم ، أو أسوأ من ذلك ، وكتابتها على ورقة واحدة على الشاشة.

على افتراض حساب أقفال مع 3 محاولات غير صحيحة ، ثم بعد 4 أرقام pin بالإضافة إلى معرف مستخدم عنصر معرف المستخدم (999999) + الرقم السري (1234) يعطيك 3/10000 فرصة من شخص التخمين.هل هذا مقبول ؟ إذا لا تجعل طول دبوس 5 والحصول على 3/100000

هل لي أن أقترح بديلا النهج ؟ نلقي نظرة على الكمال ورقة كلمات السر, ، المشتقات ودفعت .

هل يمكن استخدام هذا "كما هي" لتوليد مرة واحدة دبابيس أو ببساطة لتوليد دبوس واحد لكل مستخدم.

نضع في اعتبارنا أيضا أن تكرار دبابيس ليست من أنفسهم المسألة:أي الهجوم ثم ببساطة محاولة المستخدم متعددة الهويات.

(الأميال تحذير:أنا بالتأكيد لست خبير أمني.)


هنا الجواب الثاني:من إعادة القراءة ، أفترض أنك لا تريد معرف المستخدم هذا النحو - أنت فقط التحقق من صحة مجموعة من إصدار البطاقات الصفر.كما تفترض أنك لا تريد استخدام أبجدية دبابيس.

تحتاج إلى اختيار دبوس طول هذا أن احتمال التخمين صالح دبوس هو أقل من 1/(عدد المحاولات التي يمكن أن تحمي ضد).لذا, فعلى سبيل المثال, إذا كان لديك 1 مليون صالحة دبابيس و تريد حماية ضد 10000 التخمينات, سوف تحتاج إلى 10 أرقام PIN.

إذا كنت تستخدم جون غراهام-كومينغ هو نسخة من الكمال ورقة كلمات السر النظام, يمكنك:

  1. تكوين هذا (أقول) 10 أرقام عشرية دبابيس
  2. اختيار السر الرابع/العبارة الرئيسية
  3. تولد (أقول) أول ملايين كلمات السر(/دبابيس)

وأظن أن هذا هو عام الإجراء الذي يمكن ، على سبيل المثال ، يمكن استخدامها لتوليد 25-أبجدية معرفات المنتج أيضا.

آسف لفعل ذلك المتعاقبة التقريب ؛ أتمنى أن يأتي أقرب قليلا إلى ما تبحث عنه.

الكثير من الإجابات حتى الآن:بسيطة وفعالة وأنيقة!

أعتقد أن التطبيق هو إلى حد ما اليانصيب-في أن كل مستخدم يحصل على بطاقة الصفر و يستخدم لطرح التطبيق الخاص بك إذا "لقد فاز بالفعل!" لذلك ، من هذا المنظور ، عدد قليل من القضايا الجديدة التي تتبادر إلى الذهن:

الحرب الاتصال, أو ما يعادل الإنترنت:يمكن المارقة ضرب المستخدم التطبيق الخاص بك مرارا وتكرارا ، ويقول التخمين كل 10 أرقام في الخلافة ؟ إذا كان هذا الاحتمال ، تنظر في الحد من عدد من المحاولات من موقع معين.طريقة فعالة قد يكون ببساطة أن ترفض الإجابة أكثر من محاولة واحدة كل 5 ثوان من عنوان IP نفسه.وهذا يجعل آلة يحركها الهجمات غير فعالة و يتجنب تأمين مشكلة.

تأمين مشكلة:إذا كنت قفل حساب بشكل دائم بعد عدد من المحاولات الفاشلة ، أنت عرضة الحرمان من الخدمة الهجمات.المهاجم أعلاه يمكن أن بفعالية قفل من كل مستخدم إلا إذا كنت تنشيط الحسابات بعد فترة من الزمن.ولكن هذه هي المشكلة فقط إذا كان الخاص بك دبابيس تتكون من الواضح سلسلة من هوية المستخدم + مفتاح, لأنه يمكن للمهاجمين في محاولة كل مفتاح معين معرف المستخدم.هذا الأسلوب أيضا يقلل من الفضاء الرئيسية بشكل كبير لأن عدد قليل فقط من دبوس أرقام عشوائية حقا.من ناحية أخرى, إذا كان الرقم السري هو مجرد تسلسل أرقام عشوائية, تأمين يجب أن يطبق فقط إلى عنوان IP المصدر.(إذا فشلت المحاولة, لا حساب صالح يتأثر ، فماذا أنت "قفل"؟)

تخزين البيانات:إذا كنت حقا بناء نوع من اليانصيب-مثل نظام تحتاج فقط إلى متجر الفوز دبابيس!عندما يدخل المستخدم الرقم السري, يمكنك البحث صغيرة نسبيا قائمة دبابيس/جوائز (أو ما يعادلها).يمكنك علاج "خسارة" غير صالحة دبابيس مماثل مع "آسف يا حظ أفضل في المرة القادمة" أو رسالة "الافتراضي" جائزة إذا كان الاقتصاد الصحيح.

حظا سعيدا!

ينبغي أن يكون السؤال: "كيف العديد من التخمينات ضرورية في المتوسط إلى إيجاد صالح رمز PIN ، مقارنة مع عدد التخمينات المهاجمين؟"

إذا كنت توليد 100 000 5 أرقام ثم من الواضح أنه يأخذ 1 تخمين.هذا ليس من المرجح أن تكون جيدة بما فيه الكفاية.

إذا كنت توليد 100 000 n-أرقام رموز ، ثم يأخذ (ن-5)^10 التخمينات.أن العمل إذا كان هذا هو جيدة بما فيه الكفاية ، تحتاج إلى النظر في كيفية النظام الخاص بك يستجيب تخمين خاطئ.

إذا كان مهاجم (أو جميع المهاجمين مجتمعة) يمكن أن تجعل 1000 التخمينات في الثانية ، ثم بوضوح n يجب أن تكون كبيرة جدا لوقف مهاجم العزم.إذا كنت دائم قفل من عنوان IP الخاصة بهم بعد 3 التخمينات غير صحيحة ، ثم منذ معين المهاجم من غير المرجح أن يكون الوصول إلى أكثر من 1000 عناوين IP, n=9 سيكون كافيا لإحباط تقريبا جميع المهاجمين.من الواضح إذا كنت تواجه توزيع هجمات أو اعتداءات من الروبوتات ، ثم 1000 عناوين IP لكل المهاجم لم يعد مجرد افتراض.

إذا كان في المستقبل تحتاج إلى إصدار مزيد من رموز (أكثر من 100 000), ثم من الواضح أنك تجعل من السهل تخمين رمز صالح.لذلك فمن المحتمل يستحق قضاء بعض الوقت مع التأكد من المستقبل زيادة الاحتياجات قبل تحديد في حجم.

بالنظر إلى الصفر-استخدام بطاقة الحالة ، إذا كان المستخدمون تنوي استخدام النظام لفترة طويلة ، أنصح والسماح لهم (أو إجبارهم) إلى "ترقية" على رمز PIN إلى اسم المستخدم وكلمة المرور من اختيارهم بعد أول استخدام النظام.ثم يمكنك الحصول على المزايا المعتادة اسم المستخدم/كلمة المرور ، دون التخلص من سهولة الاستخدام الأول من مجرد كتابة عدد من البطاقة.

أما عن كيفية توليد عدد يفترض كل واحد على توليد عليك متجر, في هذه الحالة أنا أقول تولد لهم بشكل عشوائي و تجاهل التكرارات.إذا كنت توليد لهم باستخدام أي نوع من الخوارزمية و شخص الأرقام الخوارزمية ، ثم أنها يمكن معرفة صحيحة رموز PIN.إذا قمت بتحديد خوارزمية مثل أنه لا يمكن لشخص ما أن معرفة الخوارزمية ، ثم أن ما يقرب من هو الزائفة مولد رقم عشوائي (الممتلكات الأخرى من PRNGs يجري أنهم بالتساوي ، مما يساعد هنا أيضا لأنه يجعل من الصعب تخمين الرموز) ، وفي هذه الحالة قد لا تولد لهم بشكل عشوائي.

إذا كنت تستخدم مولد رقم عشوائي الخوارزميات بحيث لا يكون السري مثل "00038384882" , يبدأ 0 (صفرا) ، لأن أرقام صحيحة لم يبدأ مع "0".PIN الخاص بك يجب أن تبدأ مع الأرقام 1-9 إلا 0.

لقد رأيت العديد من أرقام PIN تشمل ويبدأ العديد من الأصفار ، حيث يمكنك القضاء على أول مليون من الأرقام.التقليب الحاجة إلى حسابات عدد الأرقام القضاء.

أعتقد أنك تحتاج إلى وضع الأرقام 0-9 في تجزئة و الحصول عليه بشكل عشوائي من تجزئة ، وجعل سلسلة رقم PIN.

إذا كنت تريد توليد الصفر-نوع بطاقة رموز pin, ثم يجب عليك استخدام أعداد كبيرة حوالي 13 أرقام طويلة ؛ و أيضا يجب أن تكون مماثلة إلى أرقام بطاقات الائتمان ، وجود الاختباري أو التحقق من أرقام جزءا لا يتجزأ في العدد نفسه.يجب أن يكون لديك خوارزمية لتوليد دبوس استنادا إلى بعض البيانات الأولية التي يمكن أن تكون سلسلة من الأرقام.مما أدى دبوس يجب أن تكون فريدة من نوعها لكل رقم في التسلسل ، بحيث إذا تولد من 100 ، 000 دبوس رموز يجب أن تكون كلها مختلفة.بهذه الطريقة سوف تكون قادرة على التحقق من صحة عدد ليس فقط عن طريق التحقق من ذلك ضد قاعدة البيانات ولكن يمكنك التحقق من ذلك أولا.

كتبت مرة شيئا لهذا الغرض, لا أستطيع أن أعطيك الكود ولكن الفكرة العامة هي:

  • إعداد مساحة من 12 رقما
  • شكل عدد خمسة أرقام (00000 إلى 99999) وتنتشر على طول الفضاء بطريقة معينة.على سبيل المثال ، عدد 12345 يمكن أن ينتشر كما __3_5_2_4__1.يمكنك أن تختلف طريقة انتشار عدد اعتمادا على ما إذا كان عدد زوجي أو فردي ، أو متعددة من 3 ، الخ.
  • استنادا إلى قيمة معينة أرقام توليد المزيد من الأرقام (على سبيل المثال إذا كان الرقم الثالث هو حتى ، ثم إنشاء عدد فردي ووضعها في أول فضاء مفتوح ، وإلا إنشاء عدد ووضعها في الثانية الفضاء المفتوح ، على سبيل المثال_83_5_2_4__1
  • مرة واحدة كنت قد ولدت 6 أرقام, سيكون لديك واحد فقط مفتوح.يجب دائما ترك نفس مساحة مفتوحة (على سبيل المثال القادم إلى الماضي الفضاء).سيتم وضع التحقق من أرقام في هذا المكان.
  • لتوليد التحقق من أرقام يجب إجراء بعض العمليات الحسابية على أعداد كنت قد ولدت ، على سبيل المثال إضافة جميع الأرقام في المواقف الفردية و ضرب لهم من قبل بعض رقم آخر ، ثم طرح جميع الأرقام في المناصب حتى و أخيرا إضافة جميع الأرقام معا (يجب أن تختلف الخوارزمية قليلا استنادا إلى قيمة معينة أرقام).في النهاية عليك التحقق من الرقم الذي تدرج في إنشاء رمز pin.

حتى الآن يمكنك التحقق الخاص بك ولدت رموز pin.من أجل إعطاء رمز pin, يمكنك توليد التحقق أرقام والتحقق من ذلك ضد واحد المدرجة في دبوس.إذا كان موافق ثم يمكنك استخراج الرقم الأصلي قبل تنفيذ عمليات عكس.

أنها لا تبدو جيدة لأنها تبدو مثل الأمن من خلال الغموض لكنه الطريقة الوحيدة التي يمكنك استخدام هذا.ليس من المستحيل على شخص تخمين الرقم السري ولكن كونه 12-أرقام رمز تحقق أرقام, سيكون من الصعب جدا حيث لديك لمحاولة 1,000,000,000,000 تركيبات لديك فقط 100,000 صالحة رموز pin, لذلك كل صالحة رمز pin هناك 10,000,000 غير صالح منها.

أود أن أذكر أن هذا هو مفيدة المتاح رموز pin;يستخدم شخص واحد من هذه الرموز مرة واحدة فقط ، على سبيل المثال لشحن الهاتف المدفوعة مسبقا.انها ليست فكرة جيدة لاستخدام هذه العلامات كما المصادقة الرموز, لا سيما إذا كان هو الطريق الوحيد إلى مصادقة شخص (يجب أن لا من أي وقت مضى مصادقة شخص فقط من خلال قطعة واحدة من البيانات ؛ الحد الأدنى هو اسم المستخدم+كلمة المرور)

يبدو أنك تريد استخدام رمز pin كسبيل وحيد هوية المستخدمين.حل عملي سيكون لاستخدام أول خمسة أرقام لتحديد المستخدم ، و إلحاق أربعة أرقام كما رمز PIN.

إذا كنت لا ترغب في تخزين دبابيس يمكن حسابها من خلال تطبيق آمن مشفر تجزئة (SHA1 أو أفضل) إلى رقم المستخدم بالإضافة إلى المنظومة رمز سري.

يجب أن تولد هذه المدونة عن طريق بعض نوع من الخوارزمية ؟

لا.فإنه يمكن التنبؤ بها.

أو ينبغي أن تولد عشوائيا ؟

نعم.استخدام التشفير مولد عشوائي ، أو السماح للمستخدم اختيار الخاصة بهم دبوس.

في نظرية 4 أرقام سوف يكون الكثير مثل بطاقة الصراف الآلي المصدرة إدارة دعم كبير جدا للمجتمع فقط (و من الواضح أنها لا يمكن أن تكون لا تحتاج إلى أن تكون فريدة من نوعها).ولكن في هذه الحالة يجب عليك تحديد عدد محاولات إدخال دبوس قفل بها بعد ذلك العديد من المحاولات كما تفعل البنوك.و يجب عليك أيضا الحصول على المستخدم توفير معرف المستخدم (في أجهزة الصراف الآلي القضية بشكل فعال على البطاقة).

إذا كنت لا تريد أن تحصر في هذا الطريق ، فإنه قد يكون من الأفضل التخلص من دبوس فكرة استخدام معيار كلمة المرور (التي هي في الأساس ما PIN الخاص بك هو فقط مع طول قصير جدا و محدودة مجموعة الأحرف).إذا كنت على الاطلاق ويجب تقييد العددية (لأن لديك دبوس وسادة أو ما شابه) ثم النظر في صنع 4 (شكلي) الحد الأدنى بدلا من طول ثابت.

لا يجب تخزين دبوس واضحة في أي مكان (مثلالملح و تجزئة مثل كلمة المرور) ، ومع ذلك بالنظر إلى طول مدة قصيرة و محدودة مجموعة الأحرف التي هي دائما ما تكون عرضة القوة الغاشمة البحث بالنظر إلى طريقة سهلة للتحقق من ذلك.

هناك العديد من المخططات الأخرى التي يمكن استخدامها كذلك, إذا كان يمكنك أن تقول لنا المزيد عن الاحتياجات الخاصة بك (هذا التطبيق على شبكة الإنترنت?جزءا لا يتجزأ من النظام ؟ وما إلى ذلك).

هناك فرق بين التخمين دبوس من المستخدم المستهدف ، أي مستخدم صالح.من استخدام حال ، يبدو أن يستخدم دبوس من الوصول إلى بعض الموارد ، ومن هذا المصدر أن المهاجمين قد تكون بعد ، لا سيما هويات المستخدمين.إذا كان هذا هو الحال في الواقع, سوف تحتاج إلى إجراء صالح أرقام PIN بما فيه الكفاية متفرق بين كل عدد ممكن من نفس عدد الأرقام.

كما ذكر في بعض الإجابات تحتاج إلى جعل PIN الخاص بك بما فيه الكفاية عشوائية ، بغض النظر إذا كنت تريد أن تولد من خوارزمية.العشوائية وعادة ما تقاس الكون من دبوس.

الآن, دعونا نقول رقم PIN الخاص بك من الكون N, و هناك 2^م المستخدمين في النظام الخاص بك (م < N) ، احتمال أن تخمين عشوائي سوف تسفر عن صالح دبوس 2^{M-N}.(آسف على اللاتكس الرموز, اتمنى انها بديهية بما فيه الكفاية).ثم من هناك يمكنك تحديد ما إذا كان هذا احتمال منخفض بما فيه الكفاية نظرا N و م, أو حساب المطلوب N من المطلوب احتمال ، م.

هناك طرق مختلفة لتوليد دبابيس بحيث أنك لن تضطر إلى تذكر كل دبوس يمكنك إنشاؤها.ولكن سوف تحتاج إلى فترة طويلة جدا دبوس لجعلها آمنة.قد لا يكون هذا هو ما تريد.

لقد فعلت هذا من قبل مع PHP و قاعدة بيانات MySQL.كان التباديل وظيفة التي من شأنها التأكد أولا من أن عدد المطلوبة رموز - $n ، على طول $l, مع عدد من الشخصيات ، $c - كان قادرا على أن يكون إنشاؤها قبل البدء في عملية توليد.

ثم أخزن كل رمز جديد إلى قاعدة البيانات والسماح لها أخبريني عن طريق مفتاح فريد أخطاء كان هناك تصادم (مكررة).ثم استمر حتى كنت قد قدمت $n عدد بنجاح الرموز التي تم إنشاؤها.يا هذا في الذاكرة ، ولكن أردت أن تبقي رموز للاستخدام في MS Word دمج المراسلات.لذا...ثم تصديرها كما CSV ملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top