Віктор Турський про програмування / навігатор

Безпека і криптографія / крок 01

Хешування, кодування, шифрування — у чому різниця?

середній 08:41 дивитися на YouTube ↗

Розділи

Про що це відео

Три поняття, які розробники постійно плутають, розплутані на планшеті у вигляді маленького дерева-таксономії. Автор відкриває каверзними питаннями: чи JSON Web Token зашифрований — чи може фронтенд прочитати його без ключа? Чи паролі у вашій базі зашифровані? Чи безпечно, що HTTP Basic Auth шле облікові дані в Base64? Його відповіді: JWT підписаний і закодований, а не зашифрований; паролі хешовані, а не зашифровані; а Base64 — це те саме, що звичайний текст. Він трактує шифрування технічно як форму кодування, що додає властивість безпеки (нечитабельність без ключа), тоді як хешування стоїть окремо як строго одностороннє.

Головне

  • Хешування — це одностороннє стиснення до фіксованого розміру: подай йому 1 ТБ чи 100 ТБ — на виході все одно, наприклад, 20 байтів (розмір SHA-1), і назад дороги немає — це не архівація.
  • Він розрізняє три сімейства хеш-функцій за призначенням: контрольні суми (MD5, SHA-1 — які git використовує для цілісності), криптографічне хешування паролів (scrypt, bcrypt — як паролі мають зберігатися, обіцяне окреме відео) і швидкі хеші для хеш-таблиць (MurmurHash — перетворення ключів на індекси масиву, див. Структури даних).
  • Завдання шифрування в тому, щоб інші не могли зрозуміти дані без ключа. Два види: симетричне — один ключ в обидва боки (AES, ChaCha20) — і асиметричне з парою публічний/приватний ключ (RSA, еліптичні криві), яке працює в обидва боки й тому також уможливлює цифрові підписи.
  • Кодування — це просто подання даних в іншій формі під задачу: Base64 перетворює бінарник на текст (а щойно ви це зрозуміли, Base32 і Base85 йдуть за тією самою ідеєю), і навіть zip-стиснення — це різновид кодування.
  • Відповідаючи на власні вступні питання: JWT виглядає зашифрованим, але це не так — він закодований у Base64 і підписаний (симетрично чи асиметрично); HTTP Basic Auth у Base64 «це те саме, що plaintext»; а хешовані паролі в БД не можна відновити навіть тому, хто тримає всю базу і всі конфіги — у цьому й суть (Практики безпеки).

Теми відео

Частина цих треків