Сіль (також модифікатор) — рядок даних, який передається геш-функції разом з паролем.
Головним чином використовується для захисту від перебору за словником і атак з використанням райдужних таблиць, а також приховування однакових паролів. Однак, сіль не може захистити від повного перебору кожного окремого пароля.
Сіль використовується для захисту паролів при їх зберіганні. Раніше паролі зберігались у відкритому вигляді на серверах в файлах або БД, що не забезпечувало їх захист в разі несанкційного доступу до серверу або у випадках викрадення файлу. Для протидії таким загрозам з часом створювали додаткові методи захисту паролів при їх зберігання. Сіль - одне з таких методів.
Сіль генеруються випадковим чином для кожного пароля. Сіль та пароль об'єднують і ця строка перетворюється за допомогою криптографічної хеш-функції в геш, який і зберігається разом із сіллю. Це дозволяє перевірити пароль без його збереження.
Приклад використання
Наприклад, ви хешуєте і зберігаєте свої паролі в MD5. Якщо ваша база буде вкрадена — зловмисник досить просто відновить більшість вихідних паролів, використовуючи заздалегідь підготовлені веселкові таблиці. Якщо ж ми «посолимо» пароль, тобто з'єднаємо рядок з 10-20 випадковими символами з паролем і вже від цього рядка знайдемо MD5, — стандартні таблиці не будуть працювати, так як вони не розраховані на пошук такого довгого рядка.
Приклад створення хешу з сіллю на PHP:
$password = 'password'; // Безпосередньо пароль $hash1 = md5($password); // Хешуємо первісний пароль $salt = 'sflprt49fhi2'; // Сіль $saltedHash = md5($hash1 . $salt); // Додаємо до гешу первісного паролю сіль, і це об'єднання знов хешуємо
В наведеному прикладі сіль задана константою, але в реальних проектах потрібно її генерувати кожного разу як випадкове число.
Приклад використання функції crypt на мові PHP, зберігання гешу пароля та його солі:
$salt = rand(); $hashed_password = crypt('password', $salt); // crypt генерує сіль і хешує, використовуючи алгоритм за умовчанням // зберігаємо $hashed_password та $salt
Перевірка вказаного пароля по його гешу та солі:
if ( $hashed_password == crypt($user_input, $salt) ) { echo "Пароль правильний!"; }
Приклад результатів застосування солі із хешуванням SHA256.
Для початку у нас є дані Користувачів з певними іменами та Паролями:
Користувач | Пароль |
---|---|
user1 | password123 |
user2 | password123 |
Код додає сіль до паролю, створюючи більш унікальний хеш:
Користувач | Значення солі | Рядок що хешується | Хешоване значення = SHA256 (Пароль + Значення солі) |
---|---|---|---|
user1 | E1F53135E559C253 | password123E1F53135E559C253 | 72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8 |
user2 | 84B03D034B409D4E | password12384B03D034B409D4E | B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A |
Якщо значення паролів для різних користувачів однакові — хеш рядки для різних користувачів теж є однаковими:
Користувач | Рядок що хешується | Хешоване значення = SHA256 |
---|---|---|
user1 | password123 | 57DB1253B68B6802B59A969F750FA32B60CB5CC8A3CB19B87DAC28F541DC4E2A |
user2 | password123 | 57DB1253B68B6802B59A969F750FA32B60CB5CC8A3CB19B87DAC28F541DC4E2A |
Проблеми, пов'язані з сіллю і надійністю паролів
При несанкціонованому доступі до бази даних або вдалій SQL-ін'єкції зловмисник отримає дані доступу одного або декількох користувачів. Якби паролі зберігалися в первісному вигляді, зловмисник міг би спробувати використовувати їх для доступу до інших ресурсів (таким чином відбувається захист користувача сайту від злому профілів в інших системах — у нього буде час на зміну паролів, поки зловмисник зайнятий підбором.)
Існує безліч функцій для створення хешів як складних, так і простих, до того ж кожен може написати свою реалізацію. Однак, все зводиться до того, як швидко буде отримано доступ до використання такої ж хешуючої функції і генерування райдужної таблиці.
Одна з найважливіших місій солі — зробити різними хеши паролів в тому випадку, якщо двоє вказали однаковий пароль, тим самим ускладнивши перебір. Це ж актуально за умови, що одній людині дозволено мати кілька профілів.
Сіль у системах UNIX
У більшості UNIX-систем в якості односторонньої функції використовується системна бібліотека crypt(3). Спочатку ця бібліотека використовувала хеш-функцію на базі алгоритму DES. При цьому пароль був обмежений 8 символами (по 7 біт на символ, тобто 56 біт), і використовувалася 12-бітна сіль.
1994 року Поуль-Геннінґ Камп на основі MD5 створив новий алгоритм хешування паролів, який дозволяв використовувати паролі будь-якої довжини і використовував тисячу ітерацій MD5. Результатом роботи функції став рядок, що містить мітку алгоритму хешування (версію), сіль і власне хеш.
В ті часи, час обчислення такого хешу виглядав достатнім для ефективного протистояння знаходженню пароля повним перебором. Однак по мірі зростання обчислювальних потужностей час знаходження MD5 сильно зменшився. Це призвело до появи в crypt обчислювально більш складних алгоритмів та управління числом ітерацій.
Зараз бібліотека підтримує кілька хеш-функцій на базі алгоритмів: MD5, SHA-256, SHA-512, Blowfish (у деяких дистрибутивах Linux, OpenBSD і деяких інших UNIX-подібних системах). Результатом роботи функції є рядок, що містить мітку алгоритму хешування, сіль, власне хеш і, опціонально, інші дані (наприклад, число раундів хеш-функції).
У 2012 році Poul-Henning Kamp закликав повністю відмовитися від створеного ним алгоритму md5crypt, який не забезпечує, в сучасних умовах, відчутного збільшення часу обчислення хешу, а як наслідок не захищає від повного перебору.
Помилки застосування
Повторне використання солі
Використання однієї і тієї ж солі для всіх паролів небезпечно, оскільки попередньо обчислена таблиця, яка просто враховує сіль, зробить сіль непотрібною.
Створення попередньо обчислених таблиць для баз даних з унікальними солями для кожного пароля неможливе через обчислювальні витрати. Але якщо для всіх записів використовується одна єдина сіль, створення такої таблиці (в якій враховується сіль) стає практичною алк і одночасно можливо, легкою здобиччю при атаках.
Оскільки повторне використання солі може призвести до того, що користувачі з тим самим паролем отримають той самий хеш, злом одного хеша може призвести до компрометації інших паролів.
Коротка сіль
Якщо сіль занадто коротка, зловмисник може попередньо обчислити таблицю всіх можливих солей, доданих до кожного ймовірного пароля. Використання довгої солі гарантує, що така таблиця буде надзвичайно великою.
Дивись також
Примітки
- Проект OpenNet: MAN crypt (3) Библиотечные вызовы (FreeBSD и Linux)
- FreeBSD CVS log for src/lib/libcrypt/crypt.c
- Niels Provos, David Mazières (June 1999). A Future-Adaptable Password Scheme. Paper - 1999 USENIX Annual Technical Conference, June 6-11, 1999, Monterey, California, USA. Архів оригіналу за 9 серпня 2012. Процитовано 5 квітня 2018.
- Unix crypt with SHA-256/512
- crypt(3) — Linux manual page
- . Архів оригіналу за 17 березня 2018. Процитовано 5 квітня 2018.
- Secure Salted Password Hashing - How to do it Properly. crackstation.net. Процитовано 19 березня 2021.
- Secure Salted Password Hashing - How to do it Properly:salt.
Література
- Robert Morris, Ken Thompson. Password security: a case history. — ACM New York, NY, USA, 1979. — Т. 22, № 11. — С. 594—597.
- B. Kaliski (September 2000). PKCS #5: Password-Based Cryptography Specification Version 2.0 (англ.). Архів оригіналу за 2 липня 2012. Процитовано 13 червня 2012.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Sil znachennya Sil takozh modifikator ryadok danih yakij peredayetsya gesh funkciyi razom z parolem Golovnim chinom vikoristovuyetsya dlya zahistu vid pereboru za slovnikom i atak z vikoristannyam rajduzhnih tablic a takozh prihovuvannya odnakovih paroliv Odnak sil ne mozhe zahistiti vid povnogo pereboru kozhnogo okremogo parolya Sil vikoristovuyetsya dlya zahistu paroliv pri yih zberiganni Ranishe paroli zberigalis u vidkritomu viglyadi na serverah v fajlah abo BD sho ne zabezpechuvalo yih zahist v razi nesankcijnogo dostupu do serveru abo u vipadkah vikradennya fajlu Dlya protidiyi takim zagrozam z chasom stvoryuvali dodatkovi metodi zahistu paroliv pri yih zberigannya Sil odne z takih metodiv Sil generuyutsya vipadkovim chinom dlya kozhnogo parolya Sil ta parol ob yednuyut i cya stroka peretvoryuyetsya za dopomogoyu kriptografichnoyi hesh funkciyi v gesh yakij i zberigayetsya razom iz sillyu Ce dozvolyaye pereviriti parol bez jogo zberezhennya Priklad vikoristannyaNapriklad vi heshuyete i zberigayete svoyi paroli v MD5 Yaksho vasha baza bude vkradena zlovmisnik dosit prosto vidnovit bilshist vihidnih paroliv vikoristovuyuchi zazdalegid pidgotovleni veselkovi tablici Yaksho zh mi posolimo parol tobto z yednayemo ryadok z 10 20 vipadkovimi simvolami z parolem i vzhe vid cogo ryadka znajdemo MD5 standartni tablici ne budut pracyuvati tak yak voni ne rozrahovani na poshuk takogo dovgogo ryadka Priklad stvorennya heshu z sillyu na PHP password password Bezposeredno parol hash1 md5 password Heshuyemo pervisnij parol salt sflprt49fhi2 Sil saltedHash md5 hash1 salt Dodayemo do geshu pervisnogo parolyu sil i ce ob yednannya znov heshuyemo V navedenomu prikladi sil zadana konstantoyu ale v realnih proektah potribno yiyi generuvati kozhnogo razu yak vipadkove chislo Priklad vikoristannya funkciyi crypt na movi PHP zberigannya geshu parolya ta jogo soli salt rand hashed password crypt password salt crypt generuye sil i heshuye vikoristovuyuchi algoritm za umovchannyam zberigayemo hashed password ta salt Perevirka vkazanogo parolya po jogo geshu ta soli if hashed password crypt user input salt echo Parol pravilnij Priklad rezultativ zastosuvannya soli iz heshuvannyam SHA256 Dlya pochatku u nas ye dani Koristuvachiv z pevnimi imenami ta Parolyami Koristuvach Parol user1 password123 user2 password123 Kod dodaye sil do parolyu stvoryuyuchi bilsh unikalnij hesh Koristuvach Znachennya soli Ryadok sho heshuyetsya Heshovane znachennya SHA256 Parol Znachennya soli user1 E1F53135E559C253 password123E1F53135E559C253 72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8 user2 84B03D034B409D4E password12384B03D034B409D4E B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A Yaksho znachennya paroliv dlya riznih koristuvachiv odnakovi hesh ryadki dlya riznih koristuvachiv tezh ye odnakovimi Koristuvach Ryadok sho heshuyetsya Heshovane znachennya SHA256 user1 password123 57DB1253B68B6802B59A969F750FA32B60CB5CC8A3CB19B87DAC28F541DC4E2A user2 password123 57DB1253B68B6802B59A969F750FA32B60CB5CC8A3CB19B87DAC28F541DC4E2AProblemi pov yazani z sillyu i nadijnistyu parolivPri nesankcionovanomu dostupi do bazi danih abo vdalij SQL in yekciyi zlovmisnik otrimaye dani dostupu odnogo abo dekilkoh koristuvachiv Yakbi paroli zberigalisya v pervisnomu viglyadi zlovmisnik mig bi sprobuvati vikoristovuvati yih dlya dostupu do inshih resursiv takim chinom vidbuvayetsya zahist koristuvacha sajtu vid zlomu profiliv v inshih sistemah u nogo bude chas na zminu paroliv poki zlovmisnik zajnyatij pidborom Isnuye bezlich funkcij dlya stvorennya heshiv yak skladnih tak i prostih do togo zh kozhen mozhe napisati svoyu realizaciyu Odnak vse zvoditsya do togo yak shvidko bude otrimano dostup do vikoristannya takoyi zh heshuyuchoyi funkciyi i generuvannya rajduzhnoyi tablici Odna z najvazhlivishih misij soli zrobiti riznimi heshi paroliv v tomu vipadku yaksho dvoye vkazali odnakovij parol tim samim uskladnivshi perebir Ce zh aktualno za umovi sho odnij lyudini dozvoleno mati kilka profiliv Sil u sistemah UNIXU bilshosti UNIX sistem v yakosti odnostoronnoyi funkciyi vikoristovuyetsya sistemna biblioteka crypt 3 Spochatku cya biblioteka vikoristovuvala hesh funkciyu na bazi algoritmu DES Pri comu parol buv obmezhenij 8 simvolami po 7 bit na simvol tobto 56 bit i vikoristovuvalasya 12 bitna sil 1994 roku Poul Genning Kamp na osnovi MD5 stvoriv novij algoritm heshuvannya paroliv yakij dozvolyav vikoristovuvati paroli bud yakoyi dovzhini i vikoristovuvav tisyachu iteracij MD5 Rezultatom roboti funkciyi stav ryadok sho mistit mitku algoritmu heshuvannya versiyu sil i vlasne hesh V ti chasi chas obchislennya takogo heshu viglyadav dostatnim dlya efektivnogo protistoyannya znahodzhennyu parolya povnim pereborom Odnak po miri zrostannya obchislyuvalnih potuzhnostej chas znahodzhennya MD5 silno zmenshivsya Ce prizvelo do poyavi v crypt obchislyuvalno bilsh skladnih algoritmiv ta upravlinnya chislom iteracij Zaraz biblioteka pidtrimuye kilka hesh funkcij na bazi algoritmiv MD5 SHA 256 SHA 512 Blowfish u deyakih distributivah Linux OpenBSD i deyakih inshih UNIX podibnih sistemah Rezultatom roboti funkciyi ye ryadok sho mistit mitku algoritmu heshuvannya sil vlasne hesh i opcionalno inshi dani napriklad chislo raundiv hesh funkciyi U 2012 roci Poul Henning Kamp zaklikav povnistyu vidmovitisya vid stvorenogo nim algoritmu md5crypt yakij ne zabezpechuye v suchasnih umovah vidchutnogo zbilshennya chasu obchislennya heshu a yak naslidok ne zahishaye vid povnogo pereboru Pomilki zastosuvannyaPovtorne vikoristannya soli Vikoristannya odniyeyi i tiyeyi zh soli dlya vsih paroliv nebezpechno oskilki poperedno obchislena tablicya yaka prosto vrahovuye sil zrobit sil nepotribnoyu Stvorennya poperedno obchislenih tablic dlya baz danih z unikalnimi solyami dlya kozhnogo parolya nemozhlive cherez obchislyuvalni vitrati Ale yaksho dlya vsih zapisiv vikoristovuyetsya odna yedina sil stvorennya takoyi tablici v yakij vrahovuyetsya sil staye praktichnoyu alk i odnochasno mozhlivo legkoyu zdobichchyu pri atakah Oskilki povtorne vikoristannya soli mozhe prizvesti do togo sho koristuvachi z tim samim parolem otrimayut toj samij hesh zlom odnogo hesha mozhe prizvesti do komprometaciyi inshih paroliv Korotka sil Yaksho sil zanadto korotka zlovmisnik mozhe poperedno obchisliti tablicyu vsih mozhlivih solej dodanih do kozhnogo jmovirnogo parolya Vikoristannya dovgoyi soli garantuye sho taka tablicya bude nadzvichajno velikoyu Divis takozhPBKDF2 scryptPrimitkiProekt OpenNet MAN crypt 3 Bibliotechnye vyzovy FreeBSD i Linux FreeBSD CVS log for src lib libcrypt crypt c Niels Provos David Mazieres June 1999 A Future Adaptable Password Scheme Paper 1999 USENIX Annual Technical Conference June 6 11 1999 Monterey California USA Arhiv originalu za 9 serpnya 2012 Procitovano 5 kvitnya 2018 Unix crypt with SHA 256 512 crypt 3 Linux manual page Arhiv originalu za 17 bereznya 2018 Procitovano 5 kvitnya 2018 Secure Salted Password Hashing How to do it Properly crackstation net Procitovano 19 bereznya 2021 Secure Salted Password Hashing How to do it Properly salt LiteraturaRobert Morris Ken Thompson Password security a case history ACM New York NY USA 1979 T 22 11 S 594 597 B Kaliski September 2000 PKCS 5 Password Based Cryptography Specification Version 2 0 angl Arhiv originalu za 2 lipnya 2012 Procitovano 13 chervnya 2012