تغییر از hash bcrypt به sha1 یا حتی متن ساده برای عملکرد

یک برنامه کاربردی را که در مفهوم به یک سرور FTP مشابه است، توسعه دادم. چند صد حساب کاربری وجود دارد و از bcrypt برای ذخیره کلمات عبور هشدار استفاده می کند.

تمام رمزهای عبور کاربر به صورت تصادفی تولید شده اند. GUID های 128 بیتی v4

یکی از ویژگی های برنامه من، بسیاری از ورودی های همزمان را ایجاد می کند. وقتی این اتفاق می افتد، bcrypt بر پروفیل های عملکرد غلبه می کند و تجربه کاربر را تضعیف می کند. من می خواهم CPU را با جایگزین کردن bcrypt با استفاده از تابع هش CPU کمتری کاهش دهم.

برنامه های کاربردی وب از bcrypt برای کلمه عبور استفاده می کنند به جای هش های بسیار ضعیف (مانند SHA-1 یکپارچه یا حتی ROT13)، به طوری که کرک آنلاین به طور ناگهانی غیر منتظره.

اما، از آنجا که یک برنامه FTP-server-like فقط فایل ها را بر روی دیسک محلی خواند / می نویسد، هر مهاجم با دسترسی به پایگاه داده ورود به سیستم، این دسترسی محلی را به هر حال خواهد داشت. بنابراین فکر نمی کنم آفلاین hash-cracking یک تهدید معتبر باشد.

که فقط بروتفورس آنلاین را ترک می کند، اما از آنجایی که من خوش شانس هستم تا تضمین رمز عبور قوی (GUID های 128 بیتی v4) داشته باشم، این نیز غیر قابل اجرا است.

بنابراین من در این وضعیت فکر میکنم امنیت را برای چیزی که به طور قابل توجهی ضعیف (به عنوان مثال SHA-1 یک یا حتی ROT13) پایین میآید، پایین میآورم.

سوال من این است:

آیا چیزی را فراموش کردهام ؟ آیا این تحلیل اشتباه است؟

bcrypt بدون نیاز به ذخیره نمک؟

من با bcrypt اشتباه گرفته ام، من فکر می کنم نیاز دارم که نمکم را ذخیره کنم، و سپس متن رمز ساده + نمک را به رمز عبور هشدار مقایسه کنم، اما از اسناد و مدارک آن به نظر نمی رسد که ذخیره سازی نمک ضروری باشد . در واقع من از این کد برای ایجاد نمک و هشدار رمز عبور استفاده کردم:

   let salt = در انتظار bcrypt.genSalt (10)؛

  const saltpasshash = در انتظار تحریم جدید ((حل و فصل، رد) => {
    bcrypt.hash (plain_text_password، salt، function (err، hash) {
      اگر (اشتباه) رد (اشتباه)
      حل (هش)
    })؛
  })

  // توجه داشته باشید که من نمیتوانم saltpasshash را به عنوان کاربران عبور و نمک در یک فیلد جداگانه در جدول کاربران.

این کار می کند، چیزی که من در مورد آن اشتباه می گیرم این است که پس از آن یک نتیجه معتبر را در صورتی که به صورت زیر مقایسه شود، بازگردانم:

 valid = waiting for bcrypt.compare (plain_text_password، user.saltpasshash)؛

من اشتباه می کنم که چرا این صحیح است وقتی که من نمک را ارائه نمی دهم، و اگر چنین است، چرا نمک را به طور کلی نگه دارید؟