Чому солі роблять словникові атаки «неможливими»?


85

Оновлення: Зверніть увагу: я не питаю, що таке сіль, що таке райдужний стіл, що таке атака за словником чи яке призначення солі. Я запитую: якщо ви знаєте, що користувачі солять і хеш, чи не так просто розрахувати їх пароль?

Я розумію процес і сам реалізую його в деяких своїх проектах.

s =  random salt
storedPassword = sha1(password + s)

У базі даних, яку ви зберігаєте:

username | hashed_password | salt

Кожна реалізація засолювання, яку я бачив, додає сіль або в кінці пароля, або на початку:

hashed_Password = sha1(s + password )
hashed_Password = sha1(password + s)

Тому, атака словника від хакера, який вартий своєї солі (ха-ха), просто запускатиме кожне ключове слово проти збереженої солі у загальних комбінаціях, перелічених вище.

Звичайно, реалізація, описана вище, просто додає ще один крок для хакера, фактично не вирішуючи основної проблеми? Які альтернативи є, щоб обійти цю проблему, чи я не розумію проблему?

Єдине, що я можу подумати, це створити секретний алгоритм змішування, який поєднує сіль і пароль разом у випадковому порядку, або додає інші користувацькі поля до процесу хешування, тобто хакер повинен мати доступ до бази даних І коду для мережива їх за словникову атаку, яка виявилася плідною. (Оновлення, як зазначено в коментарях, найкраще припустити, що хакер має доступ до всієї вашої інформації, тому це, мабуть, не найкраще).

Дозвольте навести приклад того, як я пропоную хакеру зламати базу даних користувачів зі списком паролів та хешів:

Дані з нашої зламаної бази даних:

RawPassword (not stored)  |  Hashed   |     Salt
--------------------------------------------------------
letmein                       WEFLS...       WEFOJFOFO...

Спільний словник паролів:

   Common Password
   --------------
   letmein
   12345
   ...

Для кожного запису користувача циклічно використовуйте загальні паролі та хешуйте їх:

for each user in hacked_DB

    salt = users_salt
    hashed_pw = users_hashed_password

    for each common_password

        testhash = sha1(common_password + salt)
        if testhash = hashed_pw then
           //Match!  Users password = common_password
           //Lets visit the webpage and login now.
        end if

    next

next

Сподіваюсь, це набагато ілюструє мою думку.

Враховуючи 10 000 загальних паролів і 10 000 записів користувачів, нам потрібно було б розрахувати 100 000 000 хешів, щоб виявити якомога більше паролів користувачів. Це може зайняти кілька годин, але насправді це не проблема.

Оновлення щодо теорії розтріскування

Ми будемо вважати, що ми є пошкодженим веб-хостом, який має доступ до бази даних хешів та солей SHA1, а також ваш алгоритм їх поєднання. База даних містить 10 000 записів користувачів.

Цей сайт стверджує, що він може обчислити 2 300 000 000 хешів SHA1 за секунду за допомогою графічного процесора. (В реальному світі ситуація, ймовірно, буде повільнішою, але наразі ми будемо використовувати цю цитовану цифру).

(((95 ^ 4) / 2300000000) / 2) * 10000 = 177 секунд

Враховуючи повний діапазон 95 друкованих символів ASCII, максимальна довжина 4 символи, поділена на швидкість обчислення (змінна), поділена на 2 (припускаючи, що середній час пошуку пароля в середньому вимагатиме 50% перестановок) на 10000 користувачам знадобиться 177 секунд для вироблення всіх паролів користувачів, де довжина <= 4.

Давайте трохи підкоригуємо це для реалізму.

(((36 ^ 7) / 1000000000) / 2) * 10000 = 2 дні

Припускаючи відсутність чутливості до регістру, при довжині пароля <= 7, лише буквено-цифрові символи, для вирішення 10 000 записів користувачів знадобиться 4 дні, і я зменшив удвічі швидкість алгоритму, щоб відобразити накладні та неідеальні обставини.

Важливо визнати, що це лінійна атака грубої сили, всі розрахунки не залежать один від одного, тому це ідеальне завдання для вирішення кількох систем. (IE легко налаштувати 2 комп’ютери, які запускають атаки з різних кінців, що скорочувало б половину часу виведення).

Враховуючи випадок рекурсивного хешування пароля 1000 разів, щоб зробити це завдання більш обчислювально дорогим:

(((36 ^ 7) / 1 000 000 000) / 2) * 1000 секунд = 10,8839117 годин

Це являє собою максимальну довжину 7 алфавітно-цифрових символів при виконанні менш ніж на половину швидкості від вказаного рисунка для одного користувача .

Рекурсивне хешування 1000 разів ефективно блокує загальну атаку, але цілеспрямовані атаки на дані користувачів все ще вразливі.


12
Вся суть в засолюванні полягає у тому, щоб ви не могли переглядати хешований пароль і бачити, що кілька користувачів мають однаковий хеш (і, отже, той самий пароль). Без засолювання ви можете просто використовувати алгоритм хешування та генерувати всі можливі хеші, а потім здійснювати грубий пошук цього хешу. Оскільки алгоритм ніколи не змінюється, це робить його передбачуваним для зловмисників, а засолення робить це набагато складнішим.
BeRecursive

25
Бо сухарі - як слимаки, а сіль пересушує слизову на шкірі і вбиває їх.
TED

6
@TED: Я швидше люблю солоні сухарики. Солоних слимаків, не так вже й багато.
FrustratedWithFormsDesigner

3
@Tom - у вашому прикладі атаки. Якщо солі немає, тоді зловмисник може зробити "для кожного загального пароля, хеш-пароль. Чи відповідає це одному або кільком користувачам? Так, у мене є їх пароль" - зловмисник може атакувати всі паролі "паралельно" , без додаткових витрат.
Damien_The_Unbeliever

3
@Tom Gullen - у вас лише половина картини. Без солі зловмисник не використовував би метод, продемонстрований у "Оновлення 2". Він просто виконував пошук у таблиці і отримував пароль за час O (1) або O (log n) (n - кількість кандидатів на паролі). Сіль - це те, що заважає цьому і змушує його використовувати підхід O (n), який ви демонструєте. Інший прийом (посилення ключів) може спричинити за собою, що кожна спроба у вашому циклі триває цілу секунду, це означає, що на проведення цих тестів піде 3 роки ... і лише з 10 000 паролів ви, швидше за все, зламаєте нуль паролів у цьому час.
erickson

Відповіді:


31

Так, вам потрібно всього 3 дні для sha1 (сіль | пароль). Тому хороші алгоритми зберігання паролів використовують 1000-ітераційне хешування: вам знадобиться 8 років.


3
+1, найкоротша і точніша відповідь на даний момент, я не знав, що це варіант.
Том Гуллен,

Очевидно, ви ніколи не виконували тестування хешу у своїй системі. Ви можете робити МНОГО МІЛЬОНІВ обчислень sha1 за секунду. 1000 раундів для нападника безглуздо. Також -1, оскільки sha1 - це непрацююча хеш-функція.
грак

Очевидно, я використовую імена та цифри з питання. Якщо ви коли-небудь чули про таке поняття, як тема та ясність ... о, це Рук. Не зважай.
спалах

1
@Rook, 1000 раундів означає, що на грубу силу буде потрібно 1000 разів більше. Мені здається гарною рисою.
Том Гуллен,

якщо зловмисник може вгадати пароль, це те саме для входу (чи щось мені втекло?
хаха

62

Це не зупиняє словникові атаки.

Що це робить, це зупинити когось, кому вдається отримати копію файлу вашого пароля, використовувати таблицю веселки, щоб з’ясувати, які паролі є з хешів.

Врешті-решт, це може бути примусово. Відповідь на цю частину полягає в тому, щоб змусити користувачів не використовувати словникові слова як паролі (наприклад, мінімальні вимоги принаймні одного числа або спеціального символу).

Оновлення :

Я повинен був згадувати про це раніше, але деякі (більшість?) Систем паролів використовують різну сіль для кожного пароля, ймовірно, що зберігається з самим паролем. Це робить єдиний райдужний стіл марним. Ось як працює криптова бібліотека UNIX , і сучасні UNIX-подібні ОС розширили цю бібліотеку новими хеш-алгоритмами.

Я точно знаю, що підтримка SHA-256 та SHA-512 була додана в новіших версіях GNU crypt.


17
+1 Сіль запобігає корисності заздалегідь розрахованих списків хешів (райдужних таблиць). Зловмисник повинен почати все спочатку.
Ян Бойд,

2
У PHP ви можете використовувати бібліотеки mcrypt або bcrypt для кращого шифрування, ніж md5 або sha1. Якщо ви застрягли в md5 або sha1, вам слід "розтягнутись", де ви хешуєте пароль 1000 разів, перш ніж дістатись до того, що зберігається в базі даних. Це зберігає таку саму ентропію, але збільшує час обчислення хешу.
Малфіст

2
@Tom Gullen, які статті ви читаєте? Самовизнані експерти чи рецензовані статті в науковому журналі?
Малфіст

7
І це ваш середній розробник Джо, який створює ці дописи в блозі / довідці про те, як написати "безпечну" систему. Безпека - це не те, що ви можете підібрати збоку, вона вимагає великих знань. Це несправедливо? Ймовірно. Це безпечно? До певної міри. Є причини, за якими є експерти з безпеки. Але знову ж таки, не все повинно бути настільки безпечним, як Форт Нокс. Найкраща політика - використовувати попередньо побудовану систему, розроблену цими експертами, та модифікувати її відповідно до ваших потреб.
Малфіст

3
@Michael: При довшій солі потрібно заздалегідь розрахувати всі можливі значення солі, щоб вона відображалася у таблиці веселки. Справа в тому, що ви не зберігаєте однакову сіль для всіх паролів, ви вибираєте її випадково для кожного пароля і зберігаєте в базі даних поряд із збереженим хешованим засоленим паролем. Отже, хакеру знадобиться запис у таблиці веселки для кожної можливої ​​великоцінної солі, внаслідок чого стіл буде занадто великим, щоб бути здійсненним, у чому полягає суть.
Колін ДеКлю

31

Точніше кажучи, атака за словником , тобто атака, при якій намагаються всі слова у вичерпному списку, стає не «неможливою», але стає недоцільною : кожен шматочок солі подвоює обсяг пам’яті та обчислень .

Це відрізняється від заздалегідь розрахованих словникових атак, таких як атаки, що стосуються таблиць веселки, де не має значення, є сіль секретною чи ні.

Приклад: За допомогою 64-бітної солі (тобто 8 байт) вам потрібно перевірити 2 64 додаткові комбінації паролів у вашій атаці на словник. За допомогою словника, що містить 200 000 слів, вам доведеться скласти

200 000 * 2 64 = 3,69 * 10 24

тести в гіршому випадку - замість 200 000 тестів без солі.

Додатковою перевагою використання солі є те, що зловмисник не може попередньо обчислити хеші паролів зі свого словника. Це просто зайняло б занадто багато часу та / або місця.

Оновлення

Ваше оновлення передбачає, що зловмисник вже знає сіль (або вкрав її). Звичайно, це інша ситуація. Проте зловмисник не може використовувати заздалегідь розраховану таблицю веселки. Тут важливе значення має швидкість функції хешування. Щоб зробити напад непрактичним, функція хешування повинна бути повільною. MD5 або SHA тут не є хорошими кандидатами, оскільки вони розроблені для швидкого використання, кращими кандидатами для алгоритмів хешування є Blowfish або деякі його варіації.

Оновлення 2

Вдале прочитання щодо захисту хешей паролів загалом (виходить далеко за рамки початкового питання, але все одно цікаве):

Досить із таблицями веселки: що потрібно знати про безпечні схеми паролів

Висновок статті: Використовуйте солоні хеші, створені за допомогою bcrypt (на основі Blowfish) або Eksblowfish, що дозволяє використовувати настроюваний час налаштування, щоб зробити хешування повільним.


4
@Tom Gullen - навіть маючи розумну жорстку політику щодо паролів, словник із сотень мільйонів або декількох мільярдів кандидатів, ймовірно, отримає певні хіти, оскільки всі паролі не однаково ймовірні (оскільки люди використовують мнемоніку, а не RNG, щоб вибрати їх) . Словник такого розміру є precomputable на товарних системах , якщо сіль не використовується. Якщо використовується сіль, зловмисник повинен кожен раз перераховувати хеші, і якщо виконується достатня кількість ітерацій хешу, швидкість атаки зловмисника може бути сповільнена до декількох спроб в секунду.
erickson

3
-1 від мене: зберігати таємницю - це зовсім не сенс солі. Вони все одно вам потрібні для перевірки паролів, тому будь-яка спроба зберегти їх у таємниці, швидше за все, зробить систему вразливішою через додаткову складність, а не насправді.
Michael Borgwardt

2
@ 0xA3: ще раз: невідомість зловмиснику - не суть солі . Ваша машина повинна якось отримати до неї доступ, тому зловмисник, який увірвався в машину, може також отримати її. Будь-який сценарій, коли зловмисник не знає солі, є червоною оселедцем.
Майкл Борґвардт

1
Думаю, варто згадати, що у пов’язаній статті неправильно описуються райдужні таблиці. Те, що він описує, - це просте додавання до словника. Столи веселки насправді досить різні (і дещо складніші). Існує досить пристойне пояснення того, як насправді працюють райдужні столи : kestas.kuliukas.com/RainbowTables
Джеррі Коффін

3
-1 для "Звичайно, сіль потрібно тримати в таємниці". Якщо зловмисник має доступ до хешей вашого пароля, він також матиме ваші солі - вам потрібні солі для кожного користувача , а не безпека через затемнення "прихованої" солі.
snemarch

17

Словник - це структура, де значення індексуються ключами. У разі попередньо розрахованої атаки словника кожен ключ є хешем, а відповідне значення - паролем, що приводить до хешу. Маючи в руках попередньо обчислений словник, зловмисник може «миттєво» шукати пароль, який створить необхідний хеш для входу.

З сіллю простір, необхідний для зберігання словника, швидко зростає ... настільки швидко, що спроба попередньо обчислити словник паролів незабаром стає безглуздою.

Найкращі солі вибираються випадковим чином із криптографічного генератора випадкових чисел. Вісім байт - це практичний розмір, а більше 16 байтів не мають жодної мети.


Сіль робить набагато більше, ніж просто «робить роботу зловмисника більш дратуючою». Він усуває цілий клас атак - використання попередньо обчислених словників.

Ще один елемент необхідний для повного захисту паролів, а саме "посилення ключів". Один раунд SHA-1 недостатньо хороший: алгоритм безпечного хешування паролів повинен бути дуже повільним обчислювально.

Багато людей використовують PBKDF2, ключову функцію виведення, яка тисячі разів передає результати до хеш-функції . Алгоритм "bcrypt" подібний, використовуючи ітераційне виведення ключа, яке є повільним.

Коли операція хешування дуже повільна, попередньо обчислена таблиця стає все більш бажаною для зловмисника. Але належні сольові поразки наближаються.


Коментарі

Нижче наводяться коментарі, які я зробив з цього питання.


Без солі зловмисник не використовував би метод, продемонстрований у "Оновлення 2". Він просто виконував пошук у заздалегідь обчисленій таблиці і отримував пароль за час O (1) або O (log n) (n - кількість кандидатів-паролів). Сіль - це те, що заважає цьому і змушує його використовувати підхід O (n), показаний у "Оновлення 2".

Після зведення до атаки O (n) ми повинні врахувати, скільки часу триває кожна спроба. Підсилення ключів може призвести до того, що кожна спроба циклу триватиме цілу секунду, це означає, що час, необхідний для тестування 10k паролів для 10k користувачів, триватиме від 3 днів до 3 років ... і лише з 10k паролями ви, швидше за все, зламаєте нуль паролі в той час.

Ви повинні врахувати, що зловмисник буде використовувати найшвидші інструменти, які він може, а не PHP, тому тисячі ітерацій, а не 100, будуть хорошим параметром для посилення ключів. Щоб обчислити хеш для одного пароля, знадобиться велика частка секунди.

Посилення ключів є частиною стандартних алгоритмів виведення ключів PBKDF1 та PBKDF2, від PKCS # 5, які створюють чудові алгоритми затухання пароля ("похідний ключ" - "хеш").

Багато користувачів на StackOverflow посилаються на цю статтю, оскільки це була відповідь на допис Джеффа Етвуда про небезпеку райдужних столів. Це не моя улюблена стаття, але вона детальніше обговорює ці концепції.


Звичайно, ви припускаєте, що у зловмисника є все: сіль, хеш, ім’я користувача. Припустимо, що зловмисник - корумпований працівник хостингової компанії, який кинув таблицю користувачів на ваш фанатський сайт myprettypony.com. Він намагається відновити ці паролі, тому що збирається обернутися і перевірити, чи використовували ваші шанувальники поні той самий пароль на своїх рахунках citibank.com.

Завдяки добре продуманій схемі паролів цьому хлопцеві буде неможливо відновити будь-які паролі.


1
Я думаю, що під "словниковою атакою" Том має на увазі випробування відомих слабких паролів (тобто прямо з словника людської мови), а не попередньо обчислених таблиць хеш-відкритого тексту - це також те, про що я вперше думаю, коли читаю "словник" у цей контекст.
Michael Borgwardt

@Michael Borgwardt: Я згоден, @erickson посилається на попередньо розраховані атаки на словники.
Dirk Vollmar

1
Сіль зупиняє попередньо розраховані атаки на словники. Підсилення клавіш зупиняє атаки словників. Обидва вони повинні використовуватися разом для безпечної автентифікації пароля.
erickson

Я маю на увазі прості англійські таблиці так. Питання має на меті вирішити проблему, як зупинити хакера, який розробляє всі можливі комбінації хешей для кожного облікового запису користувача
Том Галлен,

7

Суть засолювання полягає у запобіганні амортизації зусиль нападника.

Без солі єдину таблицю попередньо обчислених записів хеш-паролів (наприклад, MD5 усіх буквено-цифрових рядків із 5 символів, які легко знайти в Інтернеті) можна використовувати для кожного користувача в будь-якій базі даних у світі.

За допомогою солі, специфічної для сайту, зловмисник повинен обчислити таблицю самостійно, а потім може використовувати її для всіх користувачів сайту.

Вживаючи сіль для кожного користувача, зловмисник повинен витратити ці зусилля на кожного користувача окремо.

Звичайно, це не робить багато для захисту дійсно слабких паролів прямо зі словника, але захищає досить надійні паролі від цієї амортизації.


1
Коротка і точна відповідь - варто додати, що без солі або з усією сіллю на сайті ви можете легко виявити користувачів з однаковим паролем, і вам знадобиться лише груба сила. З солями для кожного користувача цього робити не можна.
snemarch

6

Також - ще один важливий момент - використання специфічної для ПОЛІЗНИКА солі запобігає виявленню двох користувачів з ТИМ самим паролем - їх хеші будуть збігатися. Тому багато разів хеш є хеш (сіль + ім'я користувача + пароль)

Якщо ви намагаєтеся зберегти хеш-секрет, зловмисник також не може перевірити хеші.

Редагувати - я просто помітив, що головне було зроблено у коментарі вище.


1
Ви повинні редагувати, щоб вказати сіль для кожного користувача; сайти, що використовують загальнодоступну сіль, все одно дозволять вам виявити однакові паролі.
snemarch

@snemarch - Так - велике спасибі за цю важливу відзнаку!
Домінік Вебер,

5

Солі застосовуються для запобігання атакам райдужного столу. Веселкова таблиця - це список заздалегідь розрахованих хешів, що робить переклад хешу у його фразу набагато простішим. Ви повинні розуміти, що засолювання не є ефективним засобом попередження злому пароля, якщо у нас немає сучасного алгоритму хешування.

Отже, скажімо, ми працюємо з SHA1, користуючись перевагами нещодавніх подвигів, виявлених за допомогою цього альго, і скажімо, у нас є комп’ютер, що працює зі швидкістю 1 000 000 хешів / секунду щоб знайти зіткнення знадобиться 5,3 мільйона мільйонів років , так що так, php може працювати 300 секунд, великий вуп, насправді не має значення. Причина, по якій ми солимо, полягає в тому, що якщо хтось потрудився генерувати всі типові словникові фрази, (2 ^ 160 людей, ласкаво просимо до подвигів ери 2007 року).

Отже, ось фактична база даних, у якій 2 користувачі я використовую для тестування та адміністративних цілей.

RegistrationTime        UserName        UserPass    
1280185359.365591       briang      a50b63e927b3aebfc20cd783e0fc5321b0e5e8b5
1281546174.065087       test        5872548f2abfef8cb729cac14bc979462798d023

Насправді схема соління - це ваш sha1 (час реєстрації + ім'я користувача). Вперед, скажіть мені мій пароль, це справжні паролі у виробництві. Ви навіть можете там сидіти і хешувати список слів у php. Здичавіти.

Я не божевільний, я просто знаю, що це безпечно. Для розваги пароль тесту - test. sha1(sha1(1281546174.065087 + test) + test) = 5872548f2abfef8cb729cac14bc979462798d023

Вам потрібно буде генерувати всю таблицю веселки perpended з 27662aee8eee1cb5ab4917b09bdba31d091ab732для всього цього користувача. Це означає, що я дійсно можу дозволити, щоб мої паролі не були скомпрометовані однією райдужною таблицею, хакер повинен сформувати всю таблицю веселки для 27662aee8eee1cb5ab4917b09bdba31d091ab732 для тестування і знову f3f7735311217529f2e020468004a2aa5b3ang. Згадайте 5,3 мільйона мільйонів років за всі хеші. Подумайте про розмір зберігання лише 2 ^ 80 хешів (це значно більше 20 йотабайт ), цього не станеться.

Не плутайте засолювання як засіб створення хешу, чого ви ніколи не зможете декодувати, це засіб запобігання райдужній таблиці перекладати всі ваші паролі користувачів. На цьому рівні технологій це неможливо.


Я розумію, що таке райдужний стіл, але ви втрачаєте суть мого запитання. Якщо ви надали мені свій алгоритм соління, хешований пароль і сіль, тоді так, я, мабуть, міг би сказати вам, яким був ваш пароль, за кілька хвилин.
Том Гуллен,

Покласти гроші туди, де рот?
Інкогніто

Звичайно, але ви щойно сказали мені, який у вашому прикладі пароль, дайте мені сіль, хешований пароль і як ви поєднуєте сіль + пароль (нерекурсивний) і якщо пароль <= 5 малих буквено-цифрових символів (без пробілів / спеціальні символи) Я повідомлю вам, що це в цій коробці. Якщо ви хочете, щоб я поклав на це гроші, як ви пропонуєте, дайте мені знати, хоча мій коментар за кілька хвилин, ймовірно, є грубим заниженням, але за кілька годин так.
Том Гуллен,

1
Можливо, фактично секунди, див. Golubev.com/hashgpu.htm, який використовує графічний процесор для обчислення вказаного "2300M / s SHA1 хеші в секунду". Завдяки повному спектру 95 символів ASCII від 1 до 6 символів, ми можемо зламати його за <6 хвилин. Якщо ми маємо лише малі буквено-цифрові символи, довжиною до 8 символів <25 хвилин. Маючи базу даних з 10000 записів користувачів, ми змогли знайти всі 4 повних пароля ASCII за <200 секунд ((((95 ^ 4) / 2300000000) / 2) * 10000). (Більше накладних витрат, ніж вказані, і вказані швидкості графічного процесора - це, мабуть, ідеальні ситуації).
Том Гуллен,

Так, соління не заважає вам мати можливість грубо змусити цей пароль. Вам ускладнює створення ((10 ^ 5) * (94 ^ 10)) = 10 ^ 24, якщо користувачі мають приблизно 10-символьні паролі, що набагато складніше, ніж 10 ^ 19 без хешів. Знову ж таки, це не ускладнює злом одного пароля, це робить збиття всіх паролів неможливим за допомогою попередньо обробленої таблиці веселки. (і перевірте свою математику тут, але я вважаю 10 ^ 25/2300000000/60/60/24/365/1000 = 137 869 ~ milinea для пароля кожного). Якщо ми хочемо надійніші паролі, ми їх не солимо, ми використовуємо такі речі, як обмін ключами Діффі – Хеллмана.
Incognito

3

Ідея атаки на словник полягає в тому, що ви берете хеш і знаходите пароль, з якого цей хеш був розрахований, без обчислення хешу. Тепер зробіть те ж саме із засоленим паролем - не можна.

Відсутність солі робить пошук пароля таким же простим, як пошук у базі даних. Додаючи сіль, зловмисник виконує хеш-розрахунок усіх можливих паролів (навіть для вкладеного словника це значно збільшує час атаки).


У сценарії OP, зловмисник отримує солі з бази даних, і йому доведеться випробувати кожну сіль із кожним записом у "словнику". ...Я думаю.
FrustratedWithFormsDesigner

2

Найпростішими словами: без просочування, кожен кандидат-пароль потрібно хешувати лише один раз, щоб перевірити його щодо кожного користувача в будь-якому місці "відомого всесвіту" (колекція скомпрометованих баз даних), чий пароль хешується за допомогою того самого алгоритму. При засолюванні, якщо кількість можливих значень солі значно перевищує кількість користувачів у "відомому всесвіті", кожен кандидат-пароль повинен хешуватися окремо для кожного користувача, щодо якого він буде перевірятися.


2

Простіше кажучи, засолювання не заважає хешу атакувати (bruteforce або словник), це лише ускладнює; зловмисникові потрібно буде або знайти алгоритм соління (який при правильному впровадженні використовуватиме більше ітерацій), або жорстоко застосувати альго, що, якщо не дуже просто, майже неможливо. Соління також майже повністю відкидає можливість пошуку весільних столів ...


1

Сіль робить Веселковий стіл атаки на оскільки набагато важче зламати один хеш пароля. Уявіть, що у вас є жахливий пароль лише цифри 1. Атака на райдужному столі негайно це зламає.

А тепер уявіть, що кожен пароль у базі даних посолений довгим випадковим значенням багатьох випадкових символів. Тепер ваш паршивий пароль "1" зберігається в базі даних як хеш 1 плюс купа випадкових символів (сіль), тому в цьому прикладі у райдужній таблиці повинен бути хеш для приблизно такого: 1.

Отже, припускаючи, що ваша сіль є чимось захищеним і випадковим, скажімо ()% ISLDGHASKLU ( % #% #, таблиця веселки хакера повинна мати запис для 1 * ()% ISLDGHASKLU (*% #% #. Тепер використовуємо райдужну таблицю навіть цей простий пароль вже не практичний.


Будь ласка, перегляньте оновлення №2, ви просто отримаєте необроблені паролі та обчислите всі хеші щодо солей для кожного запису користувача.
Том Гуллен,

2
Звичайно, Том, я погоджуюсь, але суть у тому, що хакер повинен зробити цей потворний трудомісткий процес один раз для кожного пароля, якщо використовується сіль. Таким чином, сіль ускладнює користування райдужним столом.
Кори Хаус

3
@Tom Gullen: створення солоних таблиць веселки можливо лише за умови використання солей на всій території; соління на користувача робить атаки райдужних столів майже марними.
snemarch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.