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

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

 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" را برای آن کاربر نیز دستگیر کند. و غیره.

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

آیا می توان ارزش یک "نمک دائمی" را پیدا کرد، اگر بتواند رمز عبور را تنظیم کند و هش را دریافت کند؟

می گوید ما یک اوراکل داریم که مهاجم می تواند به همان اندازه که بخواهد، به همان اندازه استفاده کند. مهاجم می تواند یک رمز عبور غیر مجاز را به این اوراکل ارسال کند. اوراکل رمز عبور با استفاده از sha256 (رمز عبور + فلفل) را هش می دهد و این را به مهاجم ارسال می کند.

ارزش فلفل هرگز تغییر نمی کند (این یک نمک ثابت است).

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

حمله مشابهی در صورت استفاده از اوراکل از hash_hmac ('sha256'، رمز عبور، فلفل) روش به جای ساده sha256 ( رمز عبور + فلفل) ؟ آیا این امر برای sha256 (فلفل + رمز) به جای sha256 (رمز + فلفل) ؟

من سوال را دیده ام آیا می توانم نمک را در صورت داشتن رمز عبور هش و اصلی؟ اما وجود دارد، ما یک شرط دیگر داریم: مهاجم می تواند همانند بسیاری از هش؛ زوج اصلی آنها می خواهند فلفل ثابت را بازیابی کنند، بنابراین این شرایط ممکن است خیلی تغییر کند؟

حدس من این است که می توان فلفل را بازیابی کرد، اما مطمئن نیستم که چگونه انجام شود. فرآیند بازیابی آن بسیار مهم نیست، اما من می خواهم اثبات کنم که چنین پروسه ای وجود دارد و انجام می دهد.

آیا داشتن یک هش رمز عبور صلح باعث خراب شدن هش یکسان از رمز عبور مشابه شده است؟

اگر شما هش پارس چندگانه را با همان نمک ذخیره می کنید، هدف از استفاده از نمک را شکست می دهید. نمک باید برای هر یک از رمز عبور منحصر به فرد باشد، در غیر این صورت حمله کننده میتواند فقط یک بار برای هر نامزد رمز عبور H (password || salt) را محاسبه کند و هضم حاصل را در مقایسه با هر هش در پایگاه داده خود، زیرا همه آنها از همان نمک استفاده می کنند. .

همچنین، همانطور که در نظرات اشاره شده است، شما به نظر می رسد که پارامتر هزینه برای چیز دیگری گیج کننده است. "10" مشخص می کند که چه مقدار عملیات bcrypt را محاسبه می کند. مقدار بزرگتر هزینه را برای مهاجمان افزایش می دهد، زیرا این عملیات را به میزان قابل توجهی در محاسبات انجام می دهد.

اگر بخواهید رمزهای عبور تکراری را بررسی کنید، نیازی نیست که یک برنامه homebrew مانند این را داشته باشید. اگر واقعا میخواهید، می توانید رمز عبور ارائه شده را با هم تلفیق کنید و با استفاده از نمک کاربر اول، آن را هش کنید و آن را با هش ذخیره شده مقایسه کنید. اگر آن را مطابقت ندهد، همین کار را برای کاربر دوم انجام دهید و غیره. این بدان معنی است که هر گذرواژه جدید تنظیم شده، نیاز به راه رفتن را از طریق کل پایگاه داده دارد، اما رمزهای عبور را که دقیقا تکثیر هستند شناسایی میکند.