№ этапа
цель
|
Деятельность педагога
|
Деятельность обучающегося
|
Время
|
1
|
Этап постановки цели и задач
занятия, мотивации к учебной деятельности, повторение
|
5
|
Повторить цикл for и функции для работы с
символьными строками.
Создать рабочую атмосферу
в группе
|
Приветствие учеников
Известно, что каждый символ, вводимый с
клавиатуры, имеет десятичный код. Эти таблицы ASCII (American standard code
for information interchange) или Unicode легко можно найти в Интернете.
Для того чтобы узнать коды букв русского и
латинского алфавитов, а также цифр и знаков, можно написать простейший
программный код на языке программирования Python.
Педагог заранее подготовил строки с алфавитами.
|
Пишут программы вывода
кодов символов русского и/или(по желанию) латинского алфавитов
|
|
Заинтересовать обучающихся,
мотивировать к учебной деятельности
|
Беседа. Каждый
из нас пользуется облачными сервисами, зарегистрирован в социальных сетях,
имеет электронную почту, имеет личные кабинеты в online банках, Госуслугах,
доверив этим службам свою безопасность. Пользователь регистрируется на сайте,
создав логин и придумав пароль. Зная эту
информацию, злоумышленники могут воспользоваться личными данными в корыстных
целях.
Вопросы:
·
Где
и в каком виде хранятся логины пароли всех пользователей? Каким образом
происходит их защита?
·
Что такое
хеш (хэш, hash)? хеширование (англ. hashing)
·
Чем
хеширование отличается от шифровки данных?
|
Размышляют, делают предположения, используют
необходимую информацию из интернета, отвечают на вопросы, спорят.
В результате беседы обучающиеся приходят к следующим
выводам.
Примерные ответы.
На самом деле, наши логины и
пароли не знают, даже создатели сайтов и службы безопасности, так как, на
сервере хранятся не наши пароли, а таблицы хешей (мешанина).
Хеш —
это криптографическая функция хеширования (function), которая представляет
собой математический алгоритмспособный преобразовать произвольный массив данных в строку фиксированной
длины, состоящую из цифр и букв. Это может быть хеш-код или
хеш-сумма.
«Хеширование (англ. hashing) —
преобразование массива входных данных произвольной длины в
(выходную) битовую строку установленной длины, выполняемое определённым
алгоритмом».
Хеширование
отличается от шифровки данных, шифровка информации двусторонняя
операция, шифрованием занимались, например, разведчики, по определенному коду
можно расшифровать сообщение, а задача хеширования состоит в том, чтобы
сообщение (пароль) невозможно было привести к первоначальному виду.
|
|
Целеполагание
|
Педагог совместно с
обучающимися ставит цель и задачи занятия
|
|
2
|
Этап актуализации знаний и
пробного учебного действия
|
6
|
Разобрать на простом
примере хешироване
|
Педагог предлагает придумать
простейшую хеш-функцию, используя ранее выполненную программу. Можно рассмотреть
следующий пример.
Введем следующую
хеш-функцию: пусть строка преобразуется в сумму кодов всех символов вводимой
строки (пароля).
Например, исходная
строка – это «Максил».
Тогда, результатом
будет хеш-сумма – 6458.
1052 (код «М»)
+1072 (код «а») + 1082 (код «к») + 1089 (код «с») + 1080 (код «и») + 1083
(код «л») = 6458
Известно, что для
паролей используются латинские буквы, знаки и цифры.
Допустим пароль –
это строка «Max21», тогда хэш-кодом будет следующее число 393:
77 (код «M») + 97 (код «a») +120 (код «x») + 50 (код
«2») + 49 (код «1») =393
Задание реализуйте в среде программирования данный
алгоритм хеширования.
|
Кто-то из ребят может предложить самый простой
способ.
Обучающиеся пишут
программу на ПК, тестируют на различных входных данных.
Пример
программного кода, написанного учеником.
|
|
|
Итак, для
приведенных примеров, вместо паролей будут храниться не строки символов, а
хеш-суммы, в нашем случае 6458 и 393.
При входе в
систему, будут проверяться контрольные суммы, а не сами пароли!
А теперь попробуем
вместо первого пароля «Максил» использовать «New6)». Посмотрите, что получилось!
|
Делают вывод, что контрольная
сумма и хеш-код совпали у двух разных паролей. Можно сказать, что произошел
взлом пароля!
Алгоритм
должен преобразовать входные данные уникальным способом, то есть результат
должен быть однозначным и не допускать совпадений при вводе других строк.
|
|
3
|
Этап изучения нового материала
|
|
7
|
Познакомить обучающихся с понятием «коллизия», модулем
hashlib
|
Коллизии хеш-функций
Если
хеш-функция математически слишком проста, то может возникнуть проблема, когда
при вводе иного пароля несовпадающего с исходным паролем, контрольные суммы
оказываются равными и осуществляется доступ на сайт. Такая ситуация
называется коллизией.
Коллизия
хеш-функции — это такая пара входных данных A и B, для которых результат
хеширования одинаковый. H(A) = H(B), где H(x )- хеш-функция.
Для приведенного выше примера хеш-функции
существует много коллизий для одного пароля. В этом можно убедиться с
помощью простой программы, написанной на Python.
Например, строка
«Марица» имеет тот же хеш, что и «Максил» -6458.
Педагог предлагает обучающимся найти выход из данной
ситуации.
Педагог.
Даже если использовать сложную
математическую функцию, то коллизии все равно могут возникнуть!
Для
обеспечения безопасности в Интернете используются разработанные математиками
криптографически стойкие хеш-функции.
|
Ребята могут предложить следующее решение данной
проблемы.
Эту проблему можно решить,
используя сложную математическую функцию. Кроме того,
данная ситуация возникает из-за малого
количества символов в хэш. Чем меньше знаков использует формула, тем больше
вероятность повтора одного и того же хэш-кода на разные наборы данных. Пароль
должен быть длинным. Это повысит безопасность и уменьшит риск возникновения
коллизии.
Учащиеся знакомятся с популярными
стандартами хеширования.
|
|
Таблица
популярных стандартов хеширования
MD5
|
Протокол базируется на 128-битном (16-байтном) фундаменте.
Применяется для хранения паролей, создания уникальных криптографических
ключей и ЭЦП. Используется для аудита подлинности и целостности документов
в ПК. Недостаток – сравнительно легкое нахождение коллизий.
|
SHA-1
|
Реализует
хеширование и шифрование по принципу сжатия. Входы такого алгоритма сжатия
состоят из набора данных длиной 512 Бит и выходом предыдущего блока.
Количество раундов – 80. Размер значения хэш – 32 Бит. Найденные коллизии –
252 операции. Рекомендовано для основного использования в
госструктурах США.
|
SHA-2
|
Семейство
протоколов – однонаправленных криптографических алгоритмов, куда входит
легендарный SHA-256, используемый в Bitcoin. Размер блока – 512/1024 Бит.
Количество раундов 64/80. Найденных коллизий не существует. Размер значения
однонаправленных хэш-функций – 32 Бит.
|
ГОСТ
Р 34.11-2012 «Стрибог»
|
Детище
отечественных программистов, состоящее из пары хэш-функций, с длинами
итогового значения 256 и 512 Бит, отличающиеся начальным состоянием и
результатом вычисления. Криптографическая стойкость – 2128.
Преобразование массива данных основано на S-блоках, что существенно
осложняет поиск коллизий.
|
|
|
Модуль hashlib , включенный в стандартную
библиотеку Python, представляет собой модуль, содержащий популярные алгоритмы
хеширования.
|
При наличии времени можно
предложить ученикам онлайн хеширование в интернете. Можно познакомиться с
онлайн ресурсами хеширования дома.
|
|
4
|
Этап проверки понимания и
первичного закрепления
|
5
|
Закрепить изученные
понятия хеширования
|
Код
import hashlib предназначен для импорта алгоритмов хеширования.
Попробуйте
написать программу, которая использует различные алгоритмы хеширования модуля hashlib
|
Пример выполненного задания.
|
|
Результат работы программы.
|
5
|
Этап контроля усвоения и
коррекции ошибок
|
17
|
Формировать навыки
разработки программ, планировать свою деятельность, развивать логическое
мышление и исследовательские навыки
|
Проведем
эксперимент, усложнив хеш-функцию.
Попробуйте написать для выбранного
вами варианта.
Исследуйте предложенную модель
хеш-функции на коллизии.
Придумайте свои примеры паролей.
Предлагается на выбор задания различной
степени трудности
Один
из вариантов
Пусть
строка преобразуется по следующему правилу:
1. Код
каждого символа будем делить на число Фибоначчи = 1.618
2. Полученную
целую часть переводим в шестнадцатеричный код
3. К хешу
приписываем полученный16-ный код
4. Находим
разность кода символа и целой части при делении на 1.618
5. Полученное
число переводим в шестнадцатеричный код
6. К хешу
приписываем полученный16-ный код
7. Повторяем
действия 1-6 с первого до последнего символа строки
8. Полученная
строка из шестнадцатеричных кодов и есть результат хеширования
9. Контрольную
сумму хеширования получаем преобразовав 16-й код в десятичное число
10. Выводим
контрольную сумму и хеш-код
Педагог контролирует работу
учеников, оказывает помощь, корректирует, консультирует.
Педагог перед домашним заданием
сообщает следующую информацию с целью заинтересовать учеников
Для
снижения риска возникновения коллизии:
·
используют
хеширование с «солью».
·
двойное
хеширование строк, в котором существуют два протокола, например, в Bitcoin
используется открытый и закрытый ключ.
|
Учащийся оценивает свои
способности, делает свой выбор задания, рассчитывает время реализации модели
на ПК.
Пример программы, выполненный учеником.
Программный код хеширование функцией деления на
число Фибоначчи.
Результаты
выполнения программы:
|
|
Одинаковые символы и их количество, но разное размещение
|
Прописная и
строчная буква Р
|
В следующем примере последний
символ первой строки цифра 0, во второй – латинская буква O
|
6
|
Информация о домашнем задании,
инструктаж по его выполнению
|
1
|
закрепить знания, полученные на уроке и формировать интереса к
предмету
|
Домашнее задание
1. Найдите
информацию о хешировании с солью, о двойном хешировании строк.
2. Попробуйте
придумать свой алгоритм хеширования и напишите программы для его реализации.
3. Предложить
прочитать статью
«Чудеса хеширования» блога Касперского
|
Учащиеся задают вопросы по домашнему заданию
|
|
7
|
Этап рефлексии деятельности на
занятии
|
4
|
Закрепить пройденный
материал
формировать способность к рефлексии, научить фиксировать собственные
трудности
|
Блиц-опрос
Какие выводы можно сделать?
Когда можно хеш-функцию назвать
эффективной?
Какие затруднения вы испытали на
уроке? В чем причина их возникновения
|
Выводы:
Анализ
полученных результатов исследования позволяет сделать вывод о том, что
коллизий можно избежать, усложнив математический подход к хеш-функции.
Чем
сложнее математическая функция, тем меньше повторений при различных входных
данных.
Хеш-функцию можно назвать эффективной, если она
соответствует следующим критериям:
· Чувствительность. Небольшие изменения в
вводимых данных изменяют хеш.
· Необратимость. Невозможность восстановления из
результата хеширования исходных данных.
· Коллизионная устойчивость.
Входная информация должна иметь уникальный хеш. Алгоритм хеширования
использует математические вычисления, которые снижают риски появления
коллизии.
|
|
|
Учитель предлагает разбиться на
две группы и написать синкве́йн
по темам «хеш-функция» и «хеширование»
Педагог выдает памятку о том, что
такое синквейн.
|
Делятся на группы, работают над
созданием синквейна. Озвучивают результат своей деятельности.
Ниже приведен результат
коллективной работы одной из групп.
|
|
|
|
|
|
|
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.