اشتقاق مفتاح كلمة المرور
جزء من قسم المصادقة والأمان في رحلة Node.js على Coddy. الدرس 2 من 24.
يُشتق مفتاح كلمة المرور من كلمة مرور وملح. وعلى عكس الترميز، لا يُصمَّم هذا الحساب ليكون قابلاً للعكس. تجعل Scrypt تخمين كلمات المرور مكلفًا، إذ تتطلب إجراء عمليات حسابية مع كل محاولة. عند استخدام كلمة المرور والملح وإعدادات الاشتقاق نفسها، بما في ذلك طول المفتاح، يمكن إعادة إنتاج المفتاح. ويُسمى هذا المفتاح المشتق عادةً تجزئة كلمة المرور.
const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');المعامل الثالث هو طول المفتاح بالبايت. تستخدم الدالة المساعدة المقدَّمة promisify لتحويل scrypt المعتمدة على دالة رد نداء في Node إلى دالة تُعيد وعدًا. يمكنك استخدام await معها كما تفعل عند قراءة ملف. يتيح لك الملح الثابت في هذا التدريب مقارنة النتائج؛ أما تخزين كلمات المرور الفعلي فيستخدم ملحًا عشوائيًا جديدًا.
ينشئ التدريب التالي الملح العشوائي الجديد المطلوب عند تخزين كلمة مرور جديدة.
التحدي
سهلهذا مشروع تدريبي صغير. الإعداد مُجهّز؛ عدّل exercise.js فقط.
أكمل الدالة: اشتق مفتاحًا من 32 بايتًا من كلمة المرور والملح المُعطيين، ثم أعد تمثيله النصي بالنظام الست عشري في key. أرسل {"password":"practice","salt":"fixed-for-this-exercise"} مرتين باستخدام POST إلى /result: سيظهر المفتاح نفسه المكوّن من 64 حرفًا. غيّر أيًا من المدخلين، وسيتغير المفتاح.
جرّب بنفسك
import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
return { key: password };
}
جميع دروس المصادقة والأمان
1كلمات المرور
البايتات والنص الست عشرياشتقاق مفتاح كلمة المرورقيمة Salt جديدةلا تخزّن كلمات المرور أبدًامقارنة بايتات المفتاحالتحقق من كلمة المرورقواعد التسجيلتدرّب بنفسك: Playground لـ Express