در رمزنگاری، salt شامل بیت های تصادفی است که ورودی های یک تابع یک طرفه را ایجاد میکند. دیگر ورودی معمولاً یک password یا pass-phrase است. خروجی یک تابع یک طرفه می تواند به جای password ذخیره شود و برای تصدیق کاربران استفاده گردد.
تابع یک طرفه معمولاً از یک تابع درهم سازی استفاده می کند. Salt می تواند با password ترکیب شده و به عنوان یک تابع اشتقاق کلید مانند PBKDF2 به منظور تولید یک کلید برای استفاده با یک cipher یا الگوریتم رمزنگاری دیگر عمل کند.
در کاربردهای خاص برای تصدیق password، salt همراه با خروجی تابع یک طرفه ذخیره می شود. در ابتدا سیستم های Unix از salt 12 بیتی استفاده می کردند، اما پیاده سازی های کنونی از salt 48 تا 128 بیتی استفاده می کند.
نسخه های پیشین Unix از یک password file (etcpasswd) به منظور ذخیره کردن هش های رمزعبورهای saltی استفاده می کردند.
نکته اینجاست که در نسخه های قدیمی تر Unix، Salt در passwd file همراه با هش رمزعبور Saltی به-صورت cleartext ذخیره می¬شد. فایل password به طور عمومی برای تمامی کاربران سیستم قابل خواندن بود.
این فایل باید قابل خواندن باشد تا ابزار نرم افزاری سطوح دسترسی کاربر بتوانند نام کاربری و دیگر اطلاعات را پیدا کنند. بنابراین امنیت رمزهای عبور فقط توسط توابع یک طرفه پشتیبانی می شود.
پیاده سازی های Unix پیشین رمزهای عبور را به 8 کاراکتر محدود می کرد و از یک salt 12 بیتی استفاده می کرد، که 4096 حالت را برای ارزش salt ممکن می ساخت. تا دهه 1970که 12بیت کافی بود، با 2005 دیسک برای یک مهاجم پرهزینه بود که بتواند تمامی هش های مربوط به رمزهای عبور را از پیش تولید کند.
بسیاری از برنامه های کاربردی web رمزهای عبور کاربران را به عنوان یک هش در یک پایگاه داده ذخیره می کنند. بدون salt، یک حمله SQL injection می تواند به راحتی رمزهای عبور را بشکند. به خاطر اینکه بیشتر کاربران از رمزهای عبور یکسانی برای سایت های مختلف استفاده می کنند، salt یک مؤلفه مهم برای امنیت برنامه های کاربردی وب است.
در سیستم پیشرفته shadow password، هش های رمزعبور و دیگر اطلاعات امنیتی در یک فایل غیرعمومی ذخیره شده است تا نگرانی ها را کاهش دهد. اما این اطلاعات برای نصب سرورهای چندگانه که سیستم مدیریت رمزعبور متمرکز دارند باقی می مانند.Salt همچنین شما را در مقابل حملات از نوع استفاده از rainbow table محافظت می کند با توسعه دادن طول رمزعبور و افزایش پیچیدگی آن. اگر جداول rainbow طول رمزعبور و پیچیدگی آن را تطبیق ندهند، رمزعبور پیدا نخواهد شد. حتی اگر رمزعبور پیدا گردد، لازم است salt از رمزعبور حذف گردد تا بتوان از آن استفاده کرد.Salt همچنین dictionary attack و brute-force attack را برای شکستن رمزهای عبور کندتر می کند. بدون salt، یک مهاجم کافی است هش هر رمزعبور را حدس زده و آن را با تمامی هش ها مقایسه کند. اما با salt، همه رمزهای عبوری احتمالی saltهای متفاوتی دارند به طوری که هر حدس برای هر salt باید هش شود و این عملیات محاسبه هش را بسیار پرهزینه می کند.
مزیت دیگر salt هنگامی است که دو کاربر ممکن است یک رمزعبور را استفاده کنند یا یک کاربر از یک رمزعبور بر روی دو ماشین استفاده کند. بدون salt این رمزعبور با هشی یکسان در فایل password ذخیره می شود.
این آشکار است که دو حساب کاربری رمزعبور یکسان دارند و با دانستن یکی حساب کاربری دیگر نیز قابل دسترسی می باشد. با salt، رمزعبور با دو کاراکتر تصادفی هش می شوند، لذا تفاوت وجود دارد حتی اگر دو حساب کاربری از یک رمزعبور استفاده کنند و هیچ کدام از آن ها قابل کشف نیستند حتی با خواندن فایل های password.
اگر می خواهید مباحث امنیت شبکه و تست نفوذ را به خوبی یاد بگیرید به دوره آموزش سیستم تشخیص نفوذ در این لینک مراجعه کنید.