Шифрування, хешування, засолювання – у чому різниця?
Шифрування, хешування та засолювання – це всі споріднені методи, але кожен із цих процесів має властивості, які надають їх різним цілям.
Коротко, шифрування передбачає кодування даних, щоб до нього могли отримати доступ лише ті, хто має ключ. Це захищає його від сторонніх сторін.
Криптографічне хешування включає обчислення, які неможливо змінити. Ці функції мають деякі особливі властивості, які роблять їх корисними для цифрових підписів та інших форм аутентифікації.
Соління передбачає додавання випадкових даних, перш ніж вони будуть передані через криптографічну хеш-функцію. В основному використовується для збереження паролів під час зберігання, але він може бути використаний і для інших типів даних.
Що таке шифрування?
Простіше кажучи, шифрування – це процес використання коду, щоб запобігти доступу до інформації інших сторін. Коли дані зашифровані, до неї можуть отримати доступ лише ті, хто має ключ. Поки використовується досить складна система і вона правильно використовується, нападникам забороняється бачити дані.
Дані шифруються алгоритмами шифрування, які також відомі як шифри. Одне з найважливіших відмінностей між шифруванням та хешированием (про яке ми підемо пізніше) – це те, що шифрування призначене для того, щоб йти обома способами. Це означає, що колись щось зашифровано ключем, його також можна розшифрувати.
Це робить шифрування корисним у різних ситуаціях, таких як безпечне зберігання або передача інформації. Після того, як дані зашифровані належним чином, вони вважаються захищеними, і отримати доступ до них можуть лише ті, хто має ключ. Найбільш відомий тип – це шифрування симетричного ключа, яке передбачає використання одного і того ж ключа в процесах шифрування та дешифрування..
Шифрування відкритого ключа є дещо складнішим, оскільки один загальнодоступний ключ використовується для шифрування даних, а його відповідний приватний ключ використовується для його розшифрування. Ця функція дозволяє людям, які ніколи не зустрічалися, безпечно спілкуватися. Шифрування відкритим ключем також є важливою частиною цифрових підписів, які використовуються для перевірки достовірності та цілісності даних та повідомлень.
Дивись також: Пояснено загальні типи шифрування
Загальні алгоритми шифрування
- Шифр Цезаря – Це простий код, який передбачає зміщення кожної літери на фіксовану кількість місць. Якщо шифр Цезаря має зміну три, кожен “а” стане “d”, кожне “b” стане “e”, кожне “c” стане “f” і так далі. Він названий на честь Юлія Цезаря, який був першим, хто записав цю схему.
- AES – Розширений стандарт шифрування – це складний алгоритм симетричного ключа, який забезпечує значну частину наших сучасних комунікацій. Він включає ряд складних кроків і часто використовується для шифрування даних у TLS, додатках для обміну повідомленнями, у спокої та у багатьох інших ситуаціях. Тут ми заглиблюємося в шифрування AES тут.
- 3DES – Потрійна DES заснована на алгоритмі DES. Коли зростала потужність комп’ютера, робив DES небезпечним, 3DES був розроблений як посилений алгоритм. У 3DES дані запускаються через алгоритм DES тричі, а не один раз, що ускладнює злом. 3DES можна використовувати для багатьох тих же речей, що й AES, але безпечними вважаються лише певні реалізації.
- RSA – Шифр Rivest-Shamir-Adleman був першою формою широко використовуваної криптографії з відкритим ключем. Це дозволяє безпеці спілкуватися, навіть якщо вони не зустрілися або не мали можливості обмінятися ключами. Він може використовуватися в ряді різних протоколів безпеки, таких як PGP та TLS. У нас є поглиблений посібник із шифрування RSA.
- ECDSA – Алгоритм цифрового підпису Еліптичної кривої – це варіант DSA, який використовує криптографічну еліптичну криву. Як алгоритм відкритого ключа, він може застосовуватися в подібних ситуаціях до RSA, хоча він рідше реалізується через деякі проблеми безпеки..
Шифрування в дії
Щоб дати вам уявлення про те, як шифрування працює на практиці, ми використаємо шифр Цезаря як приклад. Якщо ми хотіли зашифрувати повідомлення “Давайте їсти“Зі зміною три,”L“Стане”О“,”е“Стане”год” і так далі. Це дає нам зашифроване повідомлення про:
Ой, hdw
Щоб розшифрувати повідомлення, одержувач повинен знати, що алгоритм шифрування передбачає зсув у три, а потім повертати кожну букву на три місця. Якби ми хотіли, ми могли б змінити код, перемістивши кожну букву на іншу цифру. Ми могли навіть використовувати набагато складніший алгоритм.
Один із прикладів – AES. Якщо ми використовуємо 128-бітний онлайн-калькулятор AES для шифрування “Давайте їсти“З ключем”1234 рік“Це дає нам:
FeiUVFnIpb9d0cbXP / Ybrw ==
Цей шифротекст можна розшифрувати лише ключем “1234 рік”. Якби ми використовували більш складний ключ і зберігали його приватним, то ми могли б вважати дані захищеними від зловмисників.
Що таке хеш?
Криптографічні хеш-функції – це особливий тип однобічного обчислення. Вони беруть рядок даних будь-якого розміру і завжди дають вихід заздалегідь визначеної довжини. Цей вихід називається хеш, хеш-значення або дайджест повідомлень. Оскільки ці функції не використовують клавіші, результат для заданого вводу завжди однаковий.
Не має значення, чи є ваш внесок повністю Війна і мир або просто дві літери, результат хеш-функції завжди буде однакової довжини. Функції хешу мають декілька різних властивостей, що робить їх корисними:
- Вони є односторонніми функціями – Це означає, що немає жодного практичного способу зрозуміти, який вихідний вхід був із заданого хеш-значення.
- Навряд чи два входи матимуть однакове хеш-значення – Хоча за двома різними входами можна отримати одне і те ж хеш-значення, шанси на це трапляються настільки малі, що ми насправді про це не хвилюємося. Для практичних цілей хеш-значення можна вважати унікальними.
- Один і той же вхід завжди дає однаковий результат – Кожен раз, коли ви вводите одну і ту ж інформацію в задану хеш-функцію, вона завжди буде отримувати один і той же результат.
- Навіть найменша зміна дає зовсім інший результат – Якщо навіть один символ буде змінено, хеш-значення буде сильно відрізнятися.
Для чого використовуються хеші?
Функції хешу можуть мати деякі цікаві властивості, але що ми можемо з ними насправді зробити? Можливість виплюнути унікальний вихід фіксованого розміру для введення будь-якої довжини може здатися не що інше, як неясний фокус партії, але хеш-функції насправді мають ряд застосувань.
Вони є основним компонентом цифрові підписи, які є важливим аспектом перевірки справжності та цілісності в Інтернеті. Коди аутентифікації повідомлення хеша (HMAC) також використовують хеш-функції для досягнення подібних результатів.
Криптографічні хеш-функції також можна використовувати як звичайні хеш-функції. У цих сценаріях вони можуть діяти як контрольні суми для перевірки цілісності даних, як алгоритми відбитків пальців, які усувають повторювані дані, або створювати хеш-таблиці для індексації даних.
Загальні криптографічні хеш-функції
- MD5 – Це хеш-функція, яка вперше була опублікована в 1991 році Рон Рівест. Зараз він вважається небезпечним і не повинен використовуватися для криптографічних цілей. Незважаючи на це, його все ще можна використовувати для перевірки цілісності даних.
- SHA-1 – Алгоритм безпечного хешу 1 використовується з 1995 року, але він не вважається безпечним з 2005 року, коли відбулася низка успішних атак зіткнення. Тепер рекомендується замість цього застосовувати або SHA-2, або SHA-3.
- SHA-2 – Це сімейство хеш-функцій, які виступають як наступники SHA-1. Ці функції містять численні вдосконалення, завдяки чому вони захищені у широкому спектрі застосувань. Незважаючи на це, SHA-256 і SHA-512 вразливі до атак з подовженням довжини, тому є певні ситуації, коли найкраще реалізувати SHA-3.
- SHA-3 – SHA-3 – це найновіший член сімейства алгоритмів безпечного хешу, але він побудований зовсім інакше, ніж його попередники. На цьому етапі він ще не замінив SHA-2, а просто дає криптографам інший варіант, який може забезпечити поліпшену безпеку в певних ситуаціях.
- RIPEMD – RIPEMD – це ще одне сімейство функцій, яке розробило академічне співтовариство. Він заснований на багатьох ідеях MD4 (попередник MD5) і не обмежений жодними патентами. RIPEMD-160 все ще вважається відносно безпечним, але він не набув значного поширення.
- Джакузі – Whirlpool – хеш-функція з сімейства шифрів квадратного блоку. Він заснований на модифікації AES і не поширюється на будь-які патенти. Це вважається безпечним, але дещо повільніше, ніж деякі його альтернативи, що призвело до обмеженого прийняття.
Функції хешування в дії
Тепер, коли ви розумієте, що таке хеш-функції, саме час їх застосувати на практиці. Якщо ми помістимо той самий текст “Давайте їсти“В онлайн-калькулятор SHA-256, він дає нам:
5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2
Якщо ми змінимо навіть один символ однією позицією, він різко змінить весь хеш. Опечатка типу “Зустрів їсти“Дає зовсім інший результат:
4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342
На відміну від шифрування, ми не можемо поставити це хеш-значення через функцію в зворотному порядку, щоб отримати ще раз наше введення. Хоча ці хеш-функції не можна використовувати так само, як шифрування, їх властивості роблять їх цінною частиною цифрових підписів та багатьох інших програм.
Функції та паролі хешу
Функції хешу мають ще одне поширене використання, про яке ми ще не обговорювали. Вони також є ключовим компонентом зберігаючи наші паролі під час зберігання.
Напевно у вас є десятки онлайн-акаунтів із паролями. Для кожного з цих облікових записів ваш пароль потрібно десь зберігати. Як можна було підтвердити ваш логін, якщо веб-сайт не мав власної копії вашого пароля?
Такі компанії, як Facebook або Google, зберігають мільярди паролів користувачів. Якби ці компанії зберігали паролі як простий текст, то будь-який зловмисник, який міг би проникнути в базу даних паролів, отримав би доступ до кожного облікового запису, який знайшов..
Це було б серйозним лихом безпеки як для компанії, так і для її користувачів. Якби кожен окремий пароль піддавався зловмисникам, то всі їх облікові записи та дані користувачів загрожували б небезпеці.
Найкращий спосіб запобігти цьому – це щоб не зберігати самі паролі, а натомість хеш-значень для паролів. Як ми обговорювали в попередньому розділі, криптографічні хеш-функції функціонують в одному напрямку, виробляючи вихід фіксованого розміру, який неможливо повернути назад.
Якщо організація зберігає хеш пароля замість самого пароля, вона може перевірити, чи відповідають два хеші під час входу користувача. Користувачі вводять свої паролі, які потім хешуються. Потім цей хеш порівнюється з хешем пароля, який зберігається в базі даних. Якщо два хеші збігаються, то введено правильний пароль і користувачеві надається доступ.
Ця установка означає це пароль ніколи не повинен зберігатися. Якщо зловмисник пробивається в базу даних, то все, що вони знайдуть, – це хеші паролів, а не паролі.
Хоча хешування паролів для зберігання даних не заважає зловмисникам використовувати хеші для з’ясування паролів, це робить їх роботу значно складнішою та трудомісткою. Це піднімає нашу останню тему, засолювання.
Що таке засолення?
Солі по суті додавання випадкових даних, перш ніж вони будуть передані через хеш-функцію, і вони найчастіше використовуються з паролями.
Найкращий спосіб пояснити використання солей – це обговорити, навіщо вони нам потрібні. Ви могли подумати, що зберігання хешів паролів вирішило би всі наші проблеми, але, на жаль, речі є дещо складнішими, ніж це.
Слабкі паролі
У багатьох людей справді погані паролі, можливо, ви теж. Проблема полягає в тому, що люди схильні думати за передбачуваними зразками та вибирати паролі, які легко запам’ятати. Ці паролі вразливі до атак на словники, які щомісяця проходять тисячі або мільйони найпоширеніших комбінацій паролів, намагаючись знайти правильний пароль для облікового запису.
Якщо натомість зберігаються хеші паролів, речі дещо відрізняються. Коли зловмисник наштовхується на базу даних хешей, він може використовувати будь-який хеш-таблиці або райдужні столи шукати відповідні хеші, які вони можуть використовувати, щоб дізнатися паролі.
Хеш-таблиця – це попередньо обчислений хеш для загальних паролів, який зберігається в базі даних. Вони вимагають більше роботи достроково, але як тільки таблиця буде заповнена, шукати хеші в таблиці набагато швидше, ніж це обчислити хеш для кожного можливого пароля. Ще одна перевага полягає в тому, що ці таблиці можна використовувати неодноразово.
Таблиці веселки схожі на хеш-таблиці, за винятком того, що вони займають менше місця ціною більшої обчислювальної потужності.
Обидва ці способи атаки стають набагато практичнішими, якщо використовуються слабкі паролі. Якщо у користувача є загальний пароль, то ймовірно, що хеш для пароля буде в хеш-таблиці або в райдужній таблиці. Якщо це так, то зловмисник має доступ лише до пароля користувача.
Користувачі можуть допомогти зірвати ці атаки, вибравши довші та складніші паролі, які набагато рідше зберігатимуться в таблицях. На практиці це не відбувається ніде поруч, як слід, тому що користувачі, як правило, вибирають паролі, які легко запам’ятовуються. Як правило, легко можна запам’ятати речі, які легко запам’ятовуються.
Солі пропонують інший спосіб подолати цю проблему. Додаючи випадковий рядок даних до пароля до його хешування, він по суті робить його більш складним, що перешкоджає шансам на успіх цих атак..
Як працює засолювання на практиці
Наприклад, скажімо, що у вас є обліковий запис електронної пошти, і ваш пароль “1234 рік”. Коли ми використовуємо онлайн-калькулятор SHA-256, ми отримуємо таке хеш-значення:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Цей хеш – це те, що зберігатиметься в базі даних для вашого облікового запису. Коли ви вводите свій пароль “1234 рік“, Воно хеширується, а потім значення порівнюється із збереженим значенням. Оскільки два значення однакові, вам буде наданий доступ.
Якщо зловмисник увірветься в базу даних, вони отримають доступ до цього значення, а також до всіх інших хешей паролів, які там були. Тоді зловмисник буде приймати це хеш-значення і шукати його у попередньо обчисленій хеш-таблиці або таблиці веселки. З тих пір «1234 рік”- один з найпоширеніших паролів, вони швидко знайдуть відповідний хеш.
Хеш-таблиця скаже їм, що:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Відповідає:
1234 рік
Тоді зловмисник дізнається, що ваш пароль “1234 рік”. Потім вони можуть використовувати цей пароль для входу у ваш обліковий запис.
Як бачите, для нападника це було не багато роботи. Щоб зробити це складніше, ми додаємо сіль довільних даних до пароля до його хешування. Соління допомагає значно знизити шанси хеш-таблиць та райдужних таблиць повернути позитивний результат.
Візьмемо 16-символьну сіль випадкових даних:
H82BV63KG9SBD93B
Ми додаємо його до простого пароля “1234 рік“Ось так:
1234H82BV63KG9SBD93B
Тільки тепер, коли ми її засолили, ми переносимо її через ту саму хеш-функцію, що і раніше, яка повертається:
91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303
Звичайно, це хеш-значення більше не є складним, ніж попереднє, але в цьому справа не в цьому. Хоча вони обоє однакової довжини, “1234H82BV63KG9SBD93B“Є набагато менш поширеним паролем, тому набагато менше шансів, що його хеш буде збережено в хеш-таблиці.
Чим менше ймовірність збереження пароля в хеш-таблиці, тим менше шансів на успіх атаки. Ось як додавання солей допомагає зробити хеші паролів більш безпечними.
Злом цілих баз даних
Якщо зловмисник має доступ до цілої бази даних хешей паролів, їм не потрібно перевіряти кожен хеш проти кожного запису. Натомість вони можуть шукати у всій базі даних відповідність, яка збігається з їх хеш-таблицею. Якщо база даних досить велика, зловмисник може скомпрометувати величезну кількість облікових записів, навіть якщо вони мають лише п’ять відсотків успішності.
Якщо паролі надаються унікальні солі до їх хешування, то це робить процес набагато складнішим. Якщо солі досить довгі, шанси на успіх стають значно нижчими, що вимагало б Хеш-таблиці та веселкові таблиці мають бути надмірно великими, щоб можна було знайти відповідні хеші.
Ще одна перевага солей полягає в тому, що кілька користувачів в одній базі даних мають один і той же пароль або якщо один користувач має один і той же пароль для декількох облікових записів. Якщо хеши паролів попередньо не засолюються, зловмисники можуть порівняти хеші та визначити, що будь-які облікові записи з однаковим хеш-значенням також мають той самий пароль.
Це полегшує хакерам націлити на найпоширеніші значення хешу, які принесуть їм найбільшу винагороду. Якщо паролі заздалегідь засолені, то значення хешу будуть іншими, навіть якщо використовуються однакові паролі.
Потенційні слабкі солі
Соління втрачає свою ефективність, якщо її робити неправильно. Дві найпоширеніші проблеми виникають, коли солі занадто короткі, або якщо вони не є унікальними для кожного пароля. Більш короткі солі все ще вразливі до атак з веселкових столів, оскільки вони не роблять отриманий хеш достатньо рідкісним.
Якщо солі використовуються повторно для кожного хешованого пароля, а сіль виявлена, це значно спрощує розібрання кожного пароля в базі даних. Використання тієї ж солі також означає, що кожен, хто має той самий пароль, матиме той же хеш.
Загальні алгоритми засолювання
Не рекомендується використовувати звичайні хеш-функції для зберігання паролів. Натомість було розроблено ряд функцій із специфічними функціями, які допомагають підвищити безпеку. До них відносяться Argon2, scrypt, bcrypt і PBKDF2.
Аргон2
Аргон2 став переможцем конкурсу злучення пароля 2015 року. Він все ще відносно новий, що стосується алгоритмів, але він швидко став однією з найбільш надійних функцій хешування паролів.
Незважаючи на свою молодість, до цих пір він займав власну роль у ряді наукових праць, які розглядали його як недоліки. Argon2 є більш гнучким, ніж інші алгоритми хешування паролів, і його можна реалізувати різними способами.
скрипт
Вимовлено “крипта ess”, Це другий наймолодший алгоритм хешування паролів, який є загальним для використання. Створений у 2009 році, scrypt використовує у своїх обчисленнях великий, але регульований об’єм пам’яті. Його регульований характер означає, що він все ще може бути стійким до атак, навіть якщо з часом зростає обчислювальна потужність.
криптовалюта
bcrypt був розроблений в 1999 році і базується на шифрі Blowfish. Це був один з найбільш часто покладаються на алгоритми, що використовуються в хешировании паролів протягом багатьох років, але тепер він більш вразливий до програмованих на місцях масивів воріт (FPGA). Ось чому Argon2 часто віддають перевагу в новіших реалізаціях.
PKFD2
Ця функція виведення ключів була розроблена для заміни PBKDF1, який мав коротшу і менш безпечну довжину ключа. Вказівки NIST від 2023 року все ще рекомендують PKFD2 для хешування паролів, але Argon2 вирішує деякі проблеми безпеки і може бути кращим варіантом у багатьох ситуаціях.
Шифрування, хешування та засолювання: резюме
Тепер, коли ми детально розшифрували деталі шифрування, хешування та засолювання, настав час швидко повернутись до ключових відмінностей, щоб вони занурилися. Хоча кожен із цих процесів пов’язаний, вони служать різній цілі.
Шифрування – це процес кодування інформації для її захисту. Коли дані шифруються, до них можна розшифрувати та отримати доступ лише ті, хто має потрібний ключ. Алгоритми шифрування є оборотними, що дає нам спосіб утримувати наші дані подалі від зловмисників, але все-таки мати можливість отримати доступ до нього, коли нам це потрібно. Він широко використовується, щоб захистити нас в Інтернеті, виконуючи вирішальну роль у багатьох наших протоколах безпеки, що забезпечують безпеку наших даних під час їх зберігання та перевезення..
У контрасті, хешування – це однобічний процес. Коли ми щось маємо, ми не хочемо мати можливість повернути його до початкового вигляду. Функції криптографічного хешу мають ряд унікальних властивостей, які дозволяють нам довести достовірність та цілісність даних, наприклад, за допомогою цифрових підписів та кодів аутентифікації повідомлень.
Для зберігання наших паролів також використовуються конкретні типи криптографічних хеш-функцій. Збереження хеша пароля замість самого пароля забезпечує додатковий рівень безпеки. Це означає, що якщо зловмисник отримує доступ до бази даних, він не може негайно отримати доступ до паролів.
Хоча хешування паролів ускладнює життя хакерам, його все одно можна обійти. Ось тут і відбувається засолювання. Засолення додає додаткові дані до паролів до їх хешування, що робить напади більш трудомісткими та важкими для ресурсів. Якщо солі та паролі використовуються правильно, вони роблять хеш-таблиці та веселкові таблиці непрактичними засобами нападу.
Разом, шифрування, хешування та засолювання – це всі важливі аспекти забезпечення безпеки в Інтернеті. Якби ці процеси не були на місці, зловмисники мали б безкоштовно для всіх ваших облікових записів та даних, не залишаючи вас без захисту в Інтернеті.
Технологія-1 від tec_estromberg під CC0