احراز هویت – استفاده از دو نمک – یکی با رمز عبور ذخیره شده ، دیگری در یک ردیف تصادفی در یک جدول جداگانه ذخیره می شود

تصور کنید که یک سیستم ورود به سیستم ایجاد شده است ، و پسورد کاربر به این ترتیب حذف می شود:

 Users.password = sha384 (salt1 + password + salt2)

نتیجه ی این عمل و نمکی 1 به صورت جانبی در همان جدول ذخیره می شوند ، بیایید کاربران بگوییم.

salt2 ، با این حال ، این است. در یک ردیف تصادفی در یک جدول جداگانه ذخیره شده به نام UnorderedSalts .

هنگامی که کاربر سعی در ورود به سیستم کند ، سیستم اعتبار خود را با محاسبه چک می کند:

 for (let i = 0؛ i <UnorderedSalts. طول ؛ من ++)
  if (sha384 (Users.salt1 + input.password + UnorderedSalts [i]) === Users.password)
    بازگشت درست است؛ // مسابقه یافت شد!

بازگشت به دروغ؛ // هیچ کبریتی پیدا نشد

از آنجا که نمک2 در همان سطر ذخیره نشده است نمک و رمز عبور ، محاسبه باید بسته به در مورد چه تعداد کاربر تنظیم شده است.

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

  • آیا با افزایش زمان محاسبه احتمالی ، این سیستم برای سیستم ایمن تری ایجاد می کند؟
  • آیا این امنیت امنیتی رمز عبور را به خطر می اندازد؟
  • یا ، اصلاً فایده ای ندارد؟

</p>
<pre>احراز هویت - استفاده از دو نمک - یکی با رمز عبور ذخیره شده ، دیگری در یک ردیف تصادفی در یک جدول جداگانه ذخیره می شود<br />

رمزگذاری – فرمت متداول برای ارسال داده های رمز شده + نمک؟

برنامه ای دارم که از پرونده های مختلف از شخص ثالث دریافت می کند: MQTT، HTTP، AMQP، …
برخی از مشتریان نمی توانند از TLS استفاده کنند (دستگاه iot بدون پشتیبانی TLS)، بنابراین ما باید یک کامپایلر و راه آسان برای دریافت داده های رمز شده.

ایده من این است که از یک الگوریتم متقارن (AES256 یا مشابه) استفاده کنم، اما چگونه می توانم فرموله کنم چگونه داده ها ارسال شوند؟

همراه با داده های رمز شده، ما باید یک نمک و یک بروزرسانی اولیه . یک فرمت معمولی "container" وجود دارد که توضیح میدهد که چگونه باید بسته encryptedData + نمک + IV

، شاید با استفاده از ASN.1 و یا برخی از فرمت سریال سازی دیگر، اما اگر چیزی وجود دارد، آن را آسان تر برای توضیح به تمام توسعه دهندگان.

مدیریت کلید – یک کلید API مخفی با یک نمک تصادفی به جای ارسال آن به تنهایی در REST API

بگو، من یک نقطه پایانی API HTTPS دارم که تنها توسط مدیر من استفاده می شود.
در هر یک از درخواستها یک کلید API مخفی برای احراز هویت ارسال می کنم. و من با این راه حل خوب هستم

   curl -x PUT .......
  - Header "X-My-Secret-Api-Key $ my_secret_key"
  .....

در بدن من شناسه کاربر و ایمیل را به عنوان بارنامه ارسال می کنم.

آیا آن را امن تر خواهد بود اگر من hash $ my_secret_key با ایمیل کاربر؟

   curl -x PUT .......
  - Header "X-My-Secret-Api-Key SHA-256 ($ {user_email} $ {my_secret_key}}"
  .....

این ایده این است که حتی اگر "X-My-Secret-Api-Key" متوقف شود، یک مهاجم تنها تنها کلید را برای آن کاربر خاص دریافت می کند.
و قادر خواهد بود درخواست های مهمی را فقط از طرف این کاربر ارسال کند و هیچ کس دیگری.

و برای اینکه قادر به ارسال درخواست از طرف کاربر دیگری باشد، مهاجم باید سعی کند "X-My-Secret-Api-Key" را برای آن کاربر نیز دستگیر کند. و غیره.

آیا این بهبود امنیتی مناسب است؟ هر کدوم آیا این روش شناخته شده است؟