Помогни ни да направим Uroci.net по - богат! Добави урок

PHP - част 12 (Кодиране и хеширане на данни)

PHP » PHP
fix3d   трудност:    видян: 9014

Може би се чудите, как възниква въпросът за кодирането на данните при разглеждането на метода за осигуряване на автентичност чрез парола и високата степен на сигурност, която базите данни предлагат при съхраняването на пароли. Базите данни са сигурни, но не може да се разчита само на едно ниво на сигурност. За да разберете това, разгледайте следния пример.
Да предположим, че хакер е успял да влезе в базата ви данни за няколко часа. Този хакер, може да свали целият списък и да използва тази информация по-късно. Можете ли да поискате всеки потребител на сайта да променя паролата си, или да блокирате всички потребители!

Нито една от тези възможности не е добра. Тези действия, ще доведат до негативни отзиви за вашият сайт и потребителите няма да са сигурни за вашата услуга. Така че, освен сигурността, предлагана от базите данни, трябва да се предприеме стъпка за кодиране на всяка парола. Но как кодирането или хеширането може да подобри сигурността?

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


Кодиране на данни

Кодирането ( или криптирането ) е наука за защита на данните от неоторизиран достъп. Кодирането е метод за скриване на истинската информация чрез прилагане на алгоритъм, който преобразува теста така, че да няма нищо общо с оригинала и никой друг да не може да го прочете. Но алгоритмите за кодиране трябва да осигуряват възможността да извличате оригиналната информация, която е необходима.

Данните се кодират на базата на два компонента - ключ и кодиращ алгоритъм. Ключът трябва да е число или ключова фраза, която да се използва за кодирането на информацията. Следващият компонент е алгоритъма за кодиране, който е познат под името кодиращ алгоритъм. Кодиращият алгоритъм е логическа поредица от стъпки, която се използва за конвертиране на оригиналния текст до неразгадаем формат.

Следващият логически въпрос е как се кодират данните ? Процесът на кодиране може да се раздели на следните стъпки:

[list=1]
[*]Текст, напримерн пароли, които трябва да се кодират.
[*]Ключът и алгоритъмът се използват за конвертиране на този текст в случайни битове. В терминологията на кодирането, текстът, който трябва да се кодира, се нарича чист текст. Полученият текст, който сте получили след кодирането се нарича шифриран текст.
[*]В зависимост от нуждите, шифрираният текст след това може да бъде или съхранен ( в базата данни ), или предаден на получателя.
[*]Когато шифрираният текст, трябва да се конвертира обратно до чистия текст, трябва да се използват същите алгоритми и същия ключ, които са били използвани за кодиране на информацията, за да може тя да се декорира.

На базата на броя използвани ключове, техниките на кодиране могат да се разделят на две:

[*]Кодиране с единичен ключ.
[*]Кодиране с публичен ключ.


Кодиране с единичен ключ
При тази техника се използва един и същи ключ за кодиране и декориране на данните. Като резултат от това, човек който има достъп до кодираните данни, но не и до ключа, не може да дешифрира съобщението.

Въпреки че е проста, при тази техника има няколко проблема. Ако тайния ключ стане известен на хакер, всички кодирани данни с този ключ са изложени на риск. Също така, ако има голям поток от секретни комуникации, се изисква голям брой ключове.

Освен от ключа, успехът на кодирането с единичен ключ зависи и от кодиращия алгоритъм. Някой от по-известните алгоритми са:

[*]DES Това е алгоритъм с 56-битов ключ, който разделя данните на блокове с фиксиран размер. Всеки един от тези блокове се кодира независимо от другите. Но кодирането на даден блок, влияе на кодирането на следващия блок.
[*]3DES Това е подобрена и по-сигурна версия на DES, където всеки блок се кодира три пъти, като се използва поне два различни ключа.
[*]IDEA Това е симетричен блоков механизъм за шифриране, който използва 128 битов ключ за кодиране на данните в блокове по 64-бита. Тъй като дължината на ключа в алгоритъма е доста голяма, дори пълното изброяване на ключовете, може да не доведе до резултат. освен това IDEA премахва статистическата зависимост между шифрираният текст и чистият текст. Тези факти правят алгоритъма IDEA един от най-сигурните алгоритми.
[*]RC4 Това е блоков механизъм за шифриране, при който дължината на ключа може да бъде до 2048 бита. Това е бърз, ефективен и сигурен алгоритъм.
[*]CAST-128 Това е блоков механизъм за шифриране, при който се използва ключ с променлива дължина и който генерира 64-битови блокове. Дължината на ключа може да варира от 40 до 128 бита.
[*]АЕС Този алгоритъм успешно измести алгоритъма DES и различните му версии. Това е блоков механизъм за шифриране, при който ключът може да е с променлива дължина- 128, 192 и 256 бита. Освен това е много бърз алгоритъм.


Кодирането с единичен ключ е обект на различни атаки, който все още успяват д разкрият оригиналните данни. Тези атаки са:

[*]Атаки с груба сила (Broute Force). При този тип атаки е наличен шифрираният текст. След това се генерират случайни ключове и се прилагат към шифрираният текст, докато се открие валиден ключ. Този ключ се използва за декодиране на данните. Успехът на тази атака зависи от дължината на ключа. Колкото по-дълъг е ключа, толкова по-трудно може да се декодира текстът.
[*]Атаки с диференциален анализ на кода. При този тип атаки, вероятния ключ се генерира, като се сравняват двойки от шифрираният текст, за които разликите в чистите ключове са известни.
[*]Атаки с линеен анализ на кода. При този вид атаки върху битовете от шифрираният текст се прилага операция XOR, която е за битове от чистият текст. След това върху резултат от тези две операции отново се прилага операцията XOR и се получава бит, който е резултат от прилагането на операцията XOR върху някой битове от ключа.


Кодиране с публичен ключ

Това е техника за кодиране, която използва два ключа вместо един. Един от тези ключове се нарича публичен. Другият ключ е секретният ключ, който не е разпространен и е лична собственост на едната страна. Този ключ е познат под името частен ( личен ) ключ. Данните се кодират с помощта на публичен ключ. От друга страна, данните се декодират с частен ключ.

Кодирането с публичен ключ се реализира с помощта на RSA алгоритъма, който носи името си от първите букви на създателите си - Rivest, Shamir и Adelman. Този алгоритъм изисква единичният ключ на комуникацията да знае публичния ключ на другия член. Личният ключ е известен само на потребителя си, но не и за другия участник в комуникацията. В резултат на това, за глобална комуникация са нужни 2n ключа. където n е номерът на потребителя.

Процедурата за кодиране на публичен ключ е следната:

[*]Текст, например пароли, трябва да бъде кодиран.
[*]Изпращача получава публичния ключ на получателя от проверена публично достъпна независима организация.
[*]Подателят кодира данните, използвайки публичен ключ, който е получил.
[*]При получаване на кодирани данни, получателят декодира шифрираният текст, използвайки личният си ключ.

Кодирането с публичен ключ предлага подобрена сигурност. Това е така, защото ключовете не трябва да се предават между подателя и получателя. Всички комуникации използват публичния ключ, а личният ключ остава скрит за любопитните, тъй като не се предава по никакъв начин.

Въпреки силния механизъм за кодиране, кодирането с публичен ключ е обект на циклични атаки, при които шифрираният текс се декодира многократно, докато се достигне оригиналният текст. Това обаче е изключително бавна и несигурна атака, тъй като изисква голям брой цикли. Освен това тя пропада, ако дължината на ключа е голям.

PHP поддържа различни механизми за кодиране, като използва популярната библиотека Mycryp. Освен това MySQL също предлага функции, като encode() и decode(), за целите на кодирането


Страници: 1 2 »

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com