Тема: Шифрування даних. Стаття
Спочатку невеличке інтро
Стаття намалювалась із простого питання:
Хай всім, я саме порядок наводжу в себе на сайті, то перебираю власні статті, про реєстрацію,
авторизацію на ресурсі,... але можливо ще де помилки, то вибачайте лиш чищу...
Між іншим ось таке питання, думав в себе в топіку спитати, але якщо доречна тема є то й тут запитаю,
питання слідуюче, Якщо ми використовуємо шифрування паролю на стороні серверу, скажімо ось так:$password = md5($password);
то передача самого паролю до серверу йде запитом POST, а от цікаво чи є сенс кодувати пароль ще на стороні клієнта? Скажімо той же md5 засобами javascript, чи то вже лишнє і воно того не варте, так як відправлення даних форми методом POST теж в деякій мірі кодоване.
на що отримав відповідь :
на мою думку немає сенсу кодувати на клієнті - краще відправляти по https (тобто вчепити на сервері сертифікат шифрування) (таким чином всі дані при відправці шифруються браузером)
без сертифікату ваш пароль ловиться у вай-фай мережі і не тільки, ловиться mitm атакою (man in the middle) між вами і сервером - у провайдера, ще десь...
за умови наявності сертифіката - зашифровані дані розшифрувати на порядки складніше
також на сервері краще робити$salt1='some string ffF zx $$%$$78&*%%'; $salt2='some other long string with ZZZzz#4@*()-=\/'; $password = md5($salt1.$password.$salt2);
таким чи подібним чином ви ускладните взломщику можливість підібрати пароль за допомогою rainbow таблиць чи перебором з хешуванням напряму у себе у випадку якщо у вас якимось чином злили бд/таблицю з паролями користувачів
звісно це не захистить вас у випадку якщо файли також злили
проте на практиці sql inject зустрічається частіше ніж можливість залити свої будь-які файли на чужий сервер
та
З PHP5.5
Є password_hash() - хешування та password_verify() - перевірка.
На основі crypt()
на що вирішив позбирати інформацію в Інтернеті про тему шифрування даних, що з того вийшло, можливо десь щось не зрозумів та загалом на те й він і форум добрі люди підкажуть як має бути правильніше....
Шифрування даних
зміст
Інтро.
Навіщо взагалі щось шифрувати в Інтернеті?
Глосарій криптографії.
Коротко про шифрування.
Знайомство із HTTPS.
Що означає HTTPS?
Принцип роботи безпечного з'єднання.
Цифровий сертифікат.
Що таке MitM-атака?
Висновок. Що ж я дізнався?
Інтро
Поняття "Безпеки даних в Інтернеті" звучить серйозно . Ціль статті здається проста, якщо ж розглядати в контексті застосування Баз Даних, - то, де-не-де, але ж відразу з'являється думка: "- А що ж якщо дані викрадуть?", доречніше навіть: "- А якщо паролі викрадуть?".
Особисто я взагалі не спеціаліст з веб-безпеки, але цікаво, ж що з приводу безпеки даних каже містер Інтернет.
цікаво!
Більшість з нас постійно використовують шифрування, хоча і не завжди знають про це. Якщо у вас встановлена операційна система Microsoft, то знайте, що Windows зберігає про вас (як мінімум) таку секретну інформацію:
• паролі для доступу до мережевих ресурсів (домен, принтер, комп'ютери в мережі і т.п.);
• паролі для доступу в Інтернет за допомогою DialUр;
• кеш паролів (в браузері є така функція - кешувати паролі, і Windows зберігає всі коли-небудь вводяться вами в Інтернеті паролі);
• сертифікати для доступу до мережевих ресурсів і зашифрованих даних на самому комп'ютері.
Ці дані зберігаються в SAM-файлі (Windows NT/2000/XР). Це файл Реєстру Windows, і тому операційна система нікому не дасть до нього доступу навіть на читання. Зловмисник може скопіювати такі файли, тільки завантажившись в іншу ОС або з дискети. Утиліт для їх злому досить багато, найсучасніші з них здатні підібрати ключ за кілька годин.
2. Навіщо взагалі щось шифрувати в Інтернеті?
Шифрування – це спосіб підвищення безпеки повідомлення або файлу, шляхом перетворення його вмісту таким чином, щоб його змогла прочитати лише та особа, яка має ключ шифрування для розшифрування файлу. Наприклад під час купівлі товарів або послуг через Інтернет відомості про транзакцію (такі як ваша адреса, номер телефону та кредитної картки) зазвичай шифруються з метою посилення безпеки.
3. Глосарій криптографії
Як і кожна область людської діяльності криптографія має свої терміни та визначення, вважаю, варто спочатку ознайомитись із деякими поняттями перед тим як розглядати тему шифрування даних.
Криптографія (від грецького kryptos — прихований і graphein — писати) — наука про математичні методи забезпечення конфіденційності, цілісності і автентичності інформації. Розвинулась з практичної потреби передавати важливі відомості найнадійнішим чином.
Шифрування — оборотне перетворення даних, з метою приховання інформації.
Центр сертифікації - (англ. Certification authority, CA) - сторона (відділ, організація), чия чесність незаперечна, а відкритий ключ широко відомий. Завдання центру сертифікації - підтверджувати справжність ключів шифрування за допомогою сертифікатів електронного підпису.
Наприклад ресурс - Ukrnames
Цифровий сертифікат - цифровий документ, що підтверджує відповідність між відкритим (публічним) ключем і інформацією, що ідентифікує власника ключа. Найчастіше супроводжує певне електронне повідомлення і використовується, щоб засвідчити, що відкритий ключ належить саме тому власнику, чиї дані зазначено в ньому.
Асиметричні криптосистеми — ефективні системи криптографічного захисту даних, які також називають криптосистемами з відкритим ключем. В таких системах для зашифровування даних використовується один ключ, а для розшифровування — інший ключ (звідси і назва — асиметричні). Перший ключ є відкритим і може бути опублікованим для використання усіма користувачами системи, які шифрують дані. Розшифровування даних за допомогою відкритого ключа неможливе. Для розшифровування даних отримувач зашифрованої інформації використовує другий ключ, який є секретним. Зрозуміло, що ключ розшифровування не може бути визначеним з ключа зашифровування.
Відкритий ключ (англ. public key) - асиметричні системи шифрування, шифрування в криптографічній системі, коли відкритий ключ передається по відкритому (незахищеному) каналу зв'язку та використовується для перевірки електронних підписів або шифрування повідомлень. Для розшифрування повідомлень використовується закритий ключ.
Закритий (секретний, приватний) ключ (англ. private key) - асиметричні системи шифрування, секретний ключ для розшифровування повідомлень.
HTTPS — схема URI, що синтаксично ідентична http: схемі, яка зазвичай використовується для доступу до ресурсів Інтернет. Використання https:URL вказує, що протокол HTTP має використовуватися, але з іншим портом за замовчуванням ( порт 443) і додатковим шаром шифрування/автентифікації між HTTP і TCP. Ця схема була винайдена у компанії Netscape Communications Corporation для забезпечення автентифікації та шифрування комунікацій і широко використовується в Інтернеті у програмному забезпеченні, в якому важлива безпека комунікацій, наприклад, у платіжних системах та корпоративних логінах.
Схема URI - Уніфікований ідентифікатор ресурсів (англ. Uniform Resource Identifier, URI) — компактний рядок літер, який однозначно ідентифікує окремий абстрактний чи фізичний ресурс. Основне призначення таких ідентифікаторів — зробити можливою взаємодію з представленнями ресурсів через мережу, переважно Всесвітнє павутиння, використовуючи спеціальні протоколи. URI визначається схемами, які визначають синтаксис та відповідні протоколи. Найбільш поширеною формою URI є уніфікований локатор ресурсів (URL), який неофіційно називають веб-адресою.
SSL- (англ. Secure Sockets Layer — рівень захищених сокетів) — криптографічний протокол, який забезпечує встановлення безпечного з'єднання між клієнтом і сервером. Протокол забезпечує конфіденційність обміну даними між клієнтом і сервером, що використовують TCP / IP, причому для шифрування використовується асиметричний алгоритм з відкритим ключем.
TLS (англ. Transport Layer Security — захист на транспортному рівні), як і його попередник SSL — криптографічний протокол, що надає можливості безпечної передачі даних в Інтернет для навігації, отримання пошти, спілкування та передачі інших даних.
Криптографічний протокол (англ. Cryptographic protocol) — це абстрактний чи конкретний протокол, що включає набір криптографічних алгоритмів. В основі протоколу лежить набір правил, що регламентують використання криптографічних перетворень та алгоритмів в інформаційних процесах.
Атака посередника, атака «людина посередині», MITM-атака (англ. Man in the middle) — термін в криптографії, що позначає ситуацію, коли криптоаналітик (атакувальник) здатний читати та видозмінювати за своєю волею повідомлення, якими обмінюються кореспонденти, причому жоден з останніх не може здогадатися про його присутність в каналі.
4. Коротко про шифрування
Шифрування - це спосіб зміни повідомлення або іншого документа, що забезпечує спотворення (приховування) його вмісту. Кодування - це перетворення звичайного, зрозумілого, тексту в код. При цьому мається на увазі, що існує взаємно однозначна відповідність між символами тексту (даних, чисел, слів) і символьного коду - в цьому принципова відмінність кодування від шифрування. Часто кодування і шифрування вважають одним і тим же, забуваючи про те, що для відновлення закодованого повідомлення, достатньо знати правило підстановки (заміни). Для відновлення ж зашифрованого повідомлення крім знання правил шифрування, потрібно і ключ до шифру.
Шифрування з'явилось близько 4 тис. років назад. Першим відомим зразком шифру вважається єгипетський текст, створений приблизно в 1900 р. до н. е., в якому замість звичних для єгиптян ієрогліфів використовувались інші символи.
Існують симетричні та асиметричні методи шифрування.
В симетричному шифруванні один і той самий ключ (що зберігається в секреті) використовується як для шифрування, так і для розшифрування. Проблемою симетричного шифрування є необхідність передачі ключа, для розшифрування інформації, таким чином ключ може бути перехоплений кимось іншим. Будь хто, знаючи секретний ключ, може розшифрувати інформацію.
В асиметричному шифруванні є два пов'язаних ключа — пара ключів. Відкритий ключ (англ. public key) — публічний, до нього повинні мати доступ всі ті, хто матиме потребу зашифрувати інформацію. Тоді як закритий ключ — приватний ключ (англ. private key), повинен бути доступним лише тому хто має право розшифрувати інформацію.
Будь-яку інформацію, зашифровану за допомогою відкритого ключа можна розшифрувати лише застосовуючи той самий алгоритм, але з використанням відповідного приватного ключа. Також всю інформацію, зашифровану за допомогою приватного ключа, можна розшифрувати лише за допомогою відповідного відкритого ключа. Це означає, що немає необхідності хвилюватись за передачу ключа, відкритий ключ повинен бути публічним. Але асиметричне шифрування є значно повільнішим від симетричного. Також потребує значно більше обчислювальної потужності як для шифрування, так і для розшифрування інформації.
Через вади в швидкодії асиметричного методу цей метод доводиться використовувати разом з симетричним (асиметричні методи на 3 — 4 порядки повільніші). Так, для розв'язання задачі ефективного шифрування з передаванням секретного ключа, використаного відправником, інформація спочатку симетрично зашифровується випадковим ключем, потім цей ключ зашифровують відкритим асиметричним ключем одержувача, після чого повідомлення і ключ відправляються по мережі.
5. Знайомство із HTTPS
Що означає HTTPS?
На сьогоднішній день (2016 рік) досить поширеним є HTTP-протокол обміну даними між браузером юзера та сервером. Недоліком такого протоколу є те, що дані передаються відкрито та ніяк не захищені від зловмисників.
Та в деяких системах, наприклад, платіжні системи, дані передаються за протоколом HTTPS.
Всі сучасні браузери автоматично підтримують HTTPS-протокол.
HTTPS означає HyperText Transfer Protocol Secure. Тобто маємо протокол HTTP+S.
HTTP. HTTP є мережевим протоколом, який виконує передачу даних між клієнтами (браузером) і сервером, яким зазвичай є комп'ютер хостингу веб-сайту.
Secure. Безпечні з'єднання представляють собою комбінацію з двох протоколів: HTTP та SSL/TLS. Останні є криптографічними протоколами, які шифрують з'єднання мережі, та унеможливлюють перегляд даних третьою стороною. Скорочення перекладаються як протоколи Secure Sockets Layer і Transport Layer Security. Окрім перегляду веб-сторінок, ці протоколи використовуються для шифрування передачі даних в повідомленнях електронної пошти, онлайн-факсів, миттєвих повідомлені і голосу поверх IP.
Взяті разом протоколи утворюють HTTPS, який означає, що зв'язок "звичайного тексту" веб-сайту зашифрований для підвищення безпеки.
Принцип роботи безпечного з'єднання
Як працює з'єднання HTTPS? Загальний принцип роботи протоколу SSL/TLS можна порівняти за рисунком 2.
Якщо нам необхідно передати цінну інформацію співрозмовнику, то необхідно:
1. Закриваємо ящик з цінною інформацією на замок (ключ залишається у Вас) та відправляємо співрозмовнику,
2. Співрозмовник отримує ящик, проте не має змоги його відкрити (відсутній ключ на Ваш замок), співрозмовник також додатково встановлює замок на ящик (ключ залишає собі) та повертає ящик,
3. Отримавши закритий ящик назад, Ви знімаєте власний замок -> відправляєте співрозмовнику,
4. Співрозмовник відкриває власний замок та дістає цінні дані.
Тобто для обміну інформацією Ваш комп'ютер та сервер встановлюють загальний секретний ключ, потім шифрують інформацію за допомогою цього ключа. Секретний ключ генерується для кожного сеансу зв'язку, його неможливо перехопити та неможливо підібрати - загалом його довжина більше 100 знаків. Майже ідеально, проте ще залишилось вирішити одне питання - знати, що Ваш співрозмовник саме той, за кого себе видає.
Цифровий сертифікат
Для чого потрібен цифровий сертифікат?
В питаннях доступу до секретної інформації зловмисники можуть підробити повідомлення таким чином, щоб кореспонденти навіть не здогадувались про присутність третьої сторони (MitM-атака, або атака «Людина посередині» англ. Man in the middle - MitM -attack).
Що таке MitM-атака?
HTTPS гарантує помірний захист від підслуховування та від нападу «людина посередині» (man-in-the-middle). Проте що таке «людина посередині»?
MitM-атака, або атака «Людина посередині» (Англ. Man in the middle- MitM-attack) - Термін криптографії, що позначає ситуацію, коли атакуючий здатний читати і видозмінювати по своїй волі повідомлення, якими обмінюються кореспонденти, причому жоден з останніх не може здогадатися про його присутність в каналі.
MitM-атакою називають метод компрометації каналу зв'язку, при якому зломщик, підключившись до каналу між контрагентами, здійснює активне втручання в протокол передачі, видаляючи, спотворюючи інформацію або нав'язуючи хибну.
Для того щоб засвідчити правдивість того, що Ви є саме той, за кого себе видаєте, створені Цифрові Сертифікати (SSL-сертифікат).
SSL сертифікат - це цифровий підпис домену, забезпечує безпечне з'єднання та передачу даних між сервером та клієнтом. Сертифікат встановлюється на сервер та гарантує, що обмін даними між сайтом та клієнтом відбувається по захищеній лінії зв'зку із застосуванням htpps-протоколу.
Сертифікати видає "паспортний стіл " - Центр Сертифікації, правдивість якого незаперечна, наприклад, ресурс - Ukrnames .
Любий сервер (сайт), який хоче встановити безпечне з'єднання з Вами, повинен мати сертифікат.
Сертифікат встановлює:
1) Що особа, якій він виданий існує.
2) Що особа володіє сервером(сайтом), що вказаний в сертифікаті.
Сертифікати видають Центри Сертифікації. Завдання Центру Сертифікації - підтверджувати справжність ключів шифрування за допомогою сертифікатів електронного підпису.
В сертифікаті зазначені дані, що засвідчують особу та підпис, що засвідчує правдивість даного сертифікату.
Перевірка достовірності сертифікату, це перше, що виконує браузер під час встановлення безпечного HTTPS-зв'язку.
Користувачу для HTTPS-з'єднання сертифікат не потрібен.
Висновок. Що ж я дізнався?
Коротко:
https-протокол безпечний протокол передачі секретних даних.
Передача даних шифрується відкритим ключем SSL-сертифікату, що має власник сайту.
Достовірність Сертифікату підтверджує Центр Сертифікації.
Сучасні браузери перед тим як відправляти дані автоматично перевіряють достовірність Сертифікату та встановлюють https-протокол з'єднання.
P.S. Між іншим. TCP портом за замовчуванням для HTTPS є 443 (для HTTP — 80).
P.S.S. Згідно заяви Google рейтинг сайтів із https-протоколом буде вищим.