русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Хэширование и пароли


Дата добавления: 2013-12-23; просмотров: 1902; Нарушение авторских прав


В современных информационных системах часто используется вход по паролю. Если при этом где-то хранить пароли всех пользователей, система становится очень ненадежной, потому что “утечка” паролей позволит сразу получить доступ к данным. С другой стороны, кажется, что пароли обязательно где-то нужно хранить, иначе пользователи не смогут войти в систему. Однако это не совсем так. Можно хранить не пароли, а некоторые числа, полученные в результате обработки паролей. Простейший вариант — сумма кодов символов, входящих в пароль. Для пароля “A123” такая сумма равна 215:

65 (код “A”) + 49 (код “1”) + 50 (код “2”) + 51 (код “3”).

Фактически мы определили функцию H(M), которая сообщение M любой длины превращает в короткий код m заданной длины. Такая функция называется хэш­функцией (от англ. hash — “мешанина”, “крошить”), а само полученное число — хэш­кодом, хэш­суммой или просто хэшем исходной строки. Важно, что, зная хэш­код, невозможно восстановить исходный пароль! В этом смысле хэширование — это необратимое шифрование.

Итак, вместо пароля “A123” мы храним число 215. Когда пользователь вводит пароль, мы считаем сумму кодов символов этого пароля и разрешаем вход в систему только тогда, когда она равна 215. И вот здесь возникает проблема: существует очень много паролей, для которых наша хэш­функция дает значение 215, например, “B023”. Такая ситуация — совпадение хэш­кодов различных исходных строк — называется коллизией (англ. collision — “столкновение”). Коллизии будут всегда — ведь мы “сжимаем” длинную цепочку байт до числа. Казалось бы, ничего хорошего не получилось: если взломщик узнает хэш­код, то, зная алгоритм его получения, он сможет легко подобрать пароль с таким же хэшем и получить доступ к данным. Однако это произошло потому, что мы выбрали плохую хэш­функцию.

Математики разработали надежные (но очень сложные) хэш­функции, обладающие особыми свойствами:



1) хэш­код очень сильно меняется при малейшем изменении исходных данных;

2) при известном хэш­коде m невозможно за приемлемое время найти сообщение M с таким хэш­кодом;

3) при известном сообщении M невозможно за приемлемое время найти сообщение M1 с таким же хэш­кодом.

Здесь выражение “невозможно за приемлемое время” (или “вычислительно невозможно”) означает, что эта задача решается только перебором вариантов (других алгоритмов не существует), а количество вариантов настолько велико, что на решение уйдут сотни и тысячи лет. Поэтому даже если взломщик получил хэш­код пароля, он не сможет за приемлемое время получить сам пароль (или пароль, дающий такой же хэш­код).

Чем длиннее пароль, тем больше количество вариантов. Кроме длины, для надежности пароля важен используемый набор символов. Например, очень легко подбираются пароли, состоящие только из цифр. Если же пароль состоит из 10 символов и содержит латинские буквы (заглавные и строчные) и цифры, перебор вариантов (англ. brute force — метод “грубой силы”) со скоростью 10 млн. паролей в секунду займет более 2000 лет.

Надежные пароли должны состоять не менее чем из 7–8 символов; пароли, состоящие из 15 символов и более, взломать методом “грубой силы” практически невозможно. Нельзя использовать пароли типа “12345”, “qwerty”, свой день рождения, номер телефона. Плохо, если пароль представляет собой известное слово, для этих случаев взломщики используют подбор по словарю. Сложнее всего подобрать пароль, который представляет собой случайный набор заглавных и строчных букв, цифр и других знаков.

Сегодня для хэширования в большинстве случаев применяют алгоритмы MD5, SHA1 и российский алгоритм, изложенный в ГОСТ Р34.11 94 (он считается одним из самых надежных). В криптографии хэш­коды чаще всего имеют длину 128, 160 и 256 бит.

Хэширование используется также для проверки правильности передачи данных. Различные контрольные суммы, используемые для проверки правильности передачи данных, — это не что иное, как хэш­коды.



<== предыдущая лекция | следующая лекция ==>
Защита информации от несанкционированного доступа | Современные алгоритмы шифрования


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.374 сек.