Вы очень хорошо объясняете , вы не думали записать видео уроки по языкам программирования и их практическом применении ,мне кажется это будет очень полезно. P.s. Думаю я не один такого мнения. Кто считает также лайк.
Володя, спасибо большое за твой труд и за то что ты не оставляешь свой проект. Изначально нужно различать криптографический hash и обычный hash функции. Из-за этого к каждому типу функции накладываются свои требования. На счет параллельных вычислений ты не совсем прав. В некоторых криптографических шифрах как подэтап используют паралельные вычисления. К сожалению, с ходу я не помню конкретный алгоритм.
Спасибо, Володя. Особенно за предостережение от создания тайности алгоритма хеширования. Видимо тайность алгоритма ни к чему из-за необратимости восстановления исходных данных по хешу.
Володя, ты рассказал про криптографическии хеш функции. Если нам нужна функция для ключа в hash map, то необратимость, случайное распределение и алгоритмическая последовательность нам не нужны.
MMEEEish Замечательный комментарий!!!Дело в том, что шехмап очень часто используется для хранения данных пользователя в уникальных полях для быстрого доступа по хешу. Теперь давайте представим себе ситуацию, что эта функция обратима, и мы создаём сайт загрузки своей музыки. Значит вы записали песню, и выложили её на этот сайт. Она спокойно скачивается, и давайте представим себе что ссылка у вас на сайте в формате /index.php?hash=asdfsfsf то есть хеш известен всем. И вдруг вы мне перешли дорогу, я беру и обращаю эту функцию и создаю файл с таким-же хешем, как у вас, и загружаю его на этот сайт. Этим образом я выталкиваю вашу песню из хешмапа (так как я смог создать данные с одинаковым хешем).Так что необратимость вам нужна.Вам также нужны остальные, так как если не будет случайного распределения, то я просто начну генерировать файлы, и менять по 1 биту, и наблюдать приближается-ли мой хеш к вашему или нет. Если приближается, то это изменение бит я оставляю, если нет, то пробую менять другой. Алгоритмическая последовательность в этом конкретном примере не совсем важна. Но тут уже вопрос в том, что лучше создать алгоритм, который подходит и для пароллей и для хеширования данных, таким образом большее количество людей будут пытаться в нём разобраться, чтобы возможно найти проблему.
MMEEEish Прочтите, что я написал. Коллизия, это когда случайным образом данные получают один хеш. А я описывал процесс генерации данных с данным хешем. Это уже не просто коллизия.
Vladimir Mozhenkov Если речь идёт о таких классах, как Dictionary, HashSet, HashTable (C#), то проблема коллизий и генерации данных под определённый хеш давно успешно решена. При добавлении элемента вычисляется его хеш и ищется в таблице всех хешей. Если такой хеш найден, то происходит сравнение самих объектов (метод isEquals()/Equals(), который фактически сравнивает побайтово все значимые поля класса). Если хеш совпал, а сами объекты [побайтово] нет, то добавляется новая запись в таблицу С ТЕМ ЖЕ ХЕШЕМ и ссылкой на другой экземпляр класса. При поиске выбираются все строки с переданным хешем, а затем опять побайтово (или как-то иначе) сравниваются объекты. Совпали - значит мы нашли, если нет, то это просто коллизии или "генерация данных с тем же хешем." GetHash() и isEquals всегда пишутся парами (вместе). На мой взгляд - чуть медленнее, но надёжно. Да и кто выдаёт песни по хешу?)) Autoincremented ID для слобаков?)
Если рассматривать хеширование с точки зрения комбинаторики то любой обратимый хеш подразумевает одинаковое количество комбинаций в параметрах комбинаций хешь и в параметрах комбинаций данных или с большими параметрами комбинаций хеша так как в таком случаи комбинаций у хеша будет больше, что легко вместит в себя все комбинации исходных данных. Таким образом не обратимый хешь всегда имеет повторяющиеся комбинации, а для этого всего навсего можно использовать наложение комбинаций из больших параметров комбинаций данных, циклически на комбинации с меньшими параметрами которые олицетворяют хешь. (ну тоесть, к примеру комбинаций данных равно шесть, а комбинаций хеша равно три, вот и получается что каждая вторая комбинация данных это повторяющаяся комбинация хешь) - КТО НЕ ПОНЯЛ Я НЕ ВИНОВАТ...)))))))))
Пусть исходный текст содержит числа до ста. А хэш может содержать только 10 чисел. Придётся закодировать одним число хэша 10 чисел исходника. Нельзя определить какое число исходника за данным чилом хэша. Хэшем невозможно пользоваться.
1:00 Это функция, которая принимает какие-то данные, каким-то образом преобразует эти какие-то данные, и вернет другие данные 3:55 Функция хеширования обязательно должна возвращать нам такие же данные, т.е. хэш должен быть одинаковый. ?????????? Я ничерта не понял из этого видео, про условия объяснили да, но что это за данные такие и что такое хеширование(тайтл видео) я так и не понял. Видимо я совсем тупой
Есть фунции хеширования. Но почему такая проблема, найти исходный код например. sha 256? Не на функцию, а именно на алгорим? ссыку бы на пруф. Да есть инфа типо, тут корень кубический из натуральных чисел тут xor. Но где сам исходник взять?!
Professor Bis Хеш используется для определённых вещей. Если вам нужна скорость, то скорее всего вы ищите не хеш а контрольную сумму. То есть это не то, что параллельность - это всегда плохо, а то что "для тех процессов, где вам нужен хеш, скорость - это плохо".Хеш используется для паролей, если они слишком быстрые, то атакующий сможет слишком много паролей проверить за короткий промежуток времени. Хеш также используется для создание цепей биткоина (я собираюсь об этом серию видео делать). Там если он будет слишком быстрый, люди смогут начать воровать деньги перебивая уже существующие цепи.Если вдруг это плохая аналогия, то я попытаюсь перефразировать себя. Представьте себе, что вам нужна функция, которая достаточно медленная. Вы создаёте эту функцию, и называете её "хеш". Теперь вопрос, почему она должна быть медленной? И ответ простой, потому что вы создали её тогда, когда вам была нужна медленная функция.А про квантовые компьютеры не знаю. Возможно и будут. Тут вопрос в том, сможет-ли кто-то создать алгоритм на квантовом компьютере, который будет работать параллельно. Если вы сейчас возьмёте квантовый компьютер, и попытаетесь на нём например компресоовать видео. То вы увидите, что всё происходит очень медленно. Квантовые компы исполняют очень определённые алгоритмы очень быстро, но они не какие-то магические устройства, способные делать всё. Дальше вопрос к математикам, инженерам, и возможно к физикам. Можно-ли написать квантовый алгоритм, который выполняет хеширование быстрее чем классический компьютер? Я не знаю ответа.
@@ЕвгенийБабийчук-г2н Если контрольная сумма обратима, то это уже называется коррекция ошибок. ru.wikipedia.org/wiki/%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F_%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA Хотя тогда я-бы уже не называл это контрольной суммой.
Чем вызвано требование к последовательности алгоритма? Догадываюсь, что это требование со стороны безопасности, но не пойму чем опасна возможность распараллелить алгоритм.
Спасибо. Но остаётся один вопрос. Почему независимые хэш-генераторы генерируют некое число X одинаково? Они все работают по одному и тому же алгоритму?
@@tonikkk25 Это не имеет значения. Один и тот же алгоритм выдаст один и тот же хэш для одного и того же элемента. Почему? Потому что главное свойство хэш-алгоритмов - детерминированность. Например, если моя хэш-функция это остаток от деления на 5, то любой код, который использует мою хэш-функцию всегда будет получать от числа 12 хэш равный 2, а от числа 5 хэш равный нулю. И при этом асболютно неважно кто и где будет запускать этот код: Вася Пупкин из 5 А на своем смартфоне или астронавт на квантовом компе своего космолета.
SuperCKAyTWorld Это сайт, который я создал. Если найду других преподавателей, которые захотят объединить усилия, то это станет порталом. Пока что "Почти Университет" - это я... надеюсь это не навсегда так.
Я вообще не понимаю, что такое! Чувак что, я курил!? Как это использовать в повседневной жизни? Это, типо Жене сказал, что бабки лежат в моём кошелке, но я не сказал, что он в машине в гараже. Это является hash-ом?
+FAQ The Sims 3 Это не процент - это остаток от деления ))) просто пивык к такой записи, так как этот оператор как раз так в программировании пишется. То есть f(x) равно отстоку от деления x на 100.
+Vladimir Mozhenkov Ну допустим здесь я не смогу найти X потому что мне не совсем понятно на что он делится. но как например "дехешируют" хеш в MD5? а в моем случае нужно найти первоначальные данные из Fnv hash 64 битный.
+Альберт Галиакбаров Вы знаете на что он делится. На 100. Просто это необратимая операция. Вы можете получить остаток от деления одного числа на дрогое, но зная результат и делитель, вы не знаете превоначальное число. MD5 не совсем дехешируют, там используют так называемые Радужные Таблицы. Это довольно большая тема, и давайте я про неё запишу отдельное видео. Тема-то интересная. Так что следите за каналом, ответ будет.
Вы очень хорошо объясняете , вы не думали записать видео уроки по языкам программирования и их практическом применении ,мне кажется это будет очень полезно. P.s. Думаю я не один такого мнения. Кто считает также лайк.
Спасибо. Программированием занимаюсь уже несколько лет, и теперь в полной мере раскрыл для себя понятие Хеширования.
Спасибо! Шикарное объяснение.
Все видео про хеширование в один плей-лист бы собрать. А так спасибо, доступно.
жаль, что нельзя поставить несколько лайков за столь понятное объяснение!
Володя, спасибо большое за твой труд и за то что ты не оставляешь свой проект.
Изначально нужно различать криптографический hash и обычный hash функции. Из-за этого к каждому типу функции накладываются свои требования. На счет параллельных вычислений ты не совсем прав. В некоторых криптографических шифрах как подэтап используют паралельные вычисления. К сожалению, с ходу я не помню конкретный алгоритм.
Спасибо, Володя. Особенно за предостережение от создания тайности алгоритма хеширования. Видимо тайность алгоритма ни к чему из-за необратимости восстановления исходных данных по хешу.
Лайк за бороду ))
Блин какой же ты крутой. Подписался. Спасибо за видео и твой труд! 👍
Прекрасный рассказчик, однозначно подписка) Спасибо Вам.
Хороший канал, благодарю за вашу работу
Володя, ты рассказал про криптографическии хеш функции.
Если нам нужна функция для ключа в hash map, то необратимость, случайное распределение и алгоритмическая последовательность нам не нужны.
MMEEEish Замечательный комментарий!!!Дело в том, что шехмап очень часто используется для хранения данных пользователя в уникальных полях для быстрого доступа по хешу. Теперь давайте представим себе ситуацию, что эта функция обратима, и мы создаём сайт загрузки своей музыки. Значит вы записали песню, и выложили её на этот сайт. Она спокойно скачивается, и давайте представим себе что ссылка у вас на сайте в формате /index.php?hash=asdfsfsf то есть хеш известен всем. И вдруг вы мне перешли дорогу, я беру и обращаю эту функцию и создаю файл с таким-же хешем, как у вас, и загружаю его на этот сайт. Этим образом я выталкиваю вашу песню из хешмапа (так как я смог создать данные с одинаковым хешем).Так что необратимость вам нужна.Вам также нужны остальные, так как если не будет случайного распределения, то я просто начну генерировать файлы, и менять по 1 биту, и наблюдать приближается-ли мой хеш к вашему или нет. Если приближается, то это изменение бит я оставляю, если нет, то пробую менять другой. Алгоритмическая последовательность в этом конкретном примере не совсем важна. Но тут уже вопрос в том, что лучше создать алгоритм, который подходит и для пароллей и для хеширования данных, таким образом большее количество людей будут пытаться в нём разобраться, чтобы возможно найти проблему.
Vladimir Mozhenkov Вот почему гугл мои параграфы слил в один?
Vladimir Mozhenkov
это примеры коллизии.
MMEEEish Прочтите, что я написал. Коллизия, это когда случайным образом данные получают один хеш. А я описывал процесс генерации данных с данным хешем. Это уже не просто коллизия.
Vladimir Mozhenkov Если речь идёт о таких классах, как Dictionary, HashSet, HashTable (C#), то проблема коллизий и генерации данных под определённый хеш давно успешно решена. При добавлении элемента вычисляется его хеш и ищется в таблице всех хешей. Если такой хеш найден, то происходит сравнение самих объектов (метод isEquals()/Equals(), который фактически сравнивает побайтово все значимые поля класса). Если хеш совпал, а сами объекты [побайтово] нет, то добавляется новая запись в таблицу С ТЕМ ЖЕ ХЕШЕМ и ссылкой на другой экземпляр класса.
При поиске выбираются все строки с переданным хешем, а затем опять побайтово (или как-то иначе) сравниваются объекты. Совпали - значит мы нашли, если нет, то это просто коллизии или "генерация данных с тем же хешем."
GetHash() и isEquals всегда пишутся парами (вместе).
На мой взгляд - чуть медленнее, но надёжно.
Да и кто выдаёт песни по хешу?)) Autoincremented ID для слобаков?)
вкратце бы рассказать, зачем нужно хеширование в жизни.
Spasibo vam za paleznuyu informachsiyu
Если рассматривать хеширование с точки зрения комбинаторики то любой обратимый хеш подразумевает одинаковое количество комбинаций в параметрах комбинаций хешь и в параметрах комбинаций данных или с большими параметрами комбинаций хеша так как в таком случаи комбинаций у хеша будет больше, что легко вместит в себя все комбинации исходных данных. Таким образом не обратимый хешь всегда имеет повторяющиеся комбинации, а для этого всего навсего можно использовать наложение комбинаций из больших параметров комбинаций данных, циклически на комбинации с меньшими параметрами которые олицетворяют хешь. (ну тоесть, к примеру комбинаций данных равно шесть, а комбинаций хеша равно три, вот и получается что каждая вторая комбинация данных это повторяющаяся комбинация хешь) - КТО НЕ ПОНЯЛ Я НЕ ВИНОВАТ...)))))))))
Пусть исходный текст содержит числа до ста. А хэш может содержать только 10 чисел. Придётся закодировать одним число хэша 10 чисел исходника. Нельзя определить какое число исходника за данным чилом хэша. Хэшем невозможно пользоваться.
1:00 Это функция, которая принимает какие-то данные, каким-то образом преобразует эти какие-то данные, и вернет другие данные
3:55 Функция хеширования обязательно должна возвращать нам такие же данные, т.е. хэш должен быть одинаковый.
??????????
Я ничерта не понял из этого видео, про условия объяснили да, но что это за данные такие и что такое хеширование(тайтл видео) я так и не понял.
Видимо я совсем тупой
Хорошая лекция =)
Мне понравилось) спасибо за информацию)
Спасибо большое буду ждать еще видео
На удивление в этом видео мне все понятно в отличие от других
Есть фунции хеширования. Но почему такая проблема, найти исходный код например. sha 256? Не на функцию, а именно на алгорим? ссыку бы на пруф.
Да есть инфа типо, тут корень кубический из натуральных чисел тут xor. Но где сам исходник взять?!
а как же сделать функцию необратимой если она детерминирована?
У меня вопросы
почему параллельные вычисления плохо?
Квантовый компьютер будет взламывать любой хэш легко?
Professor Bis Хеш используется для определённых вещей. Если вам нужна скорость, то скорее всего вы ищите не хеш а контрольную сумму. То есть это не то, что параллельность - это всегда плохо, а то что "для тех процессов, где вам нужен хеш, скорость - это плохо".Хеш используется для паролей, если они слишком быстрые, то атакующий сможет слишком много паролей проверить за короткий промежуток времени. Хеш также используется для создание цепей биткоина (я собираюсь об этом серию видео делать). Там если он будет слишком быстрый, люди смогут начать воровать деньги перебивая уже существующие цепи.Если вдруг это плохая аналогия, то я попытаюсь перефразировать себя. Представьте себе, что вам нужна функция, которая достаточно медленная. Вы создаёте эту функцию, и называете её "хеш". Теперь вопрос, почему она должна быть медленной? И ответ простой, потому что вы создали её тогда, когда вам была нужна медленная функция.А про квантовые компьютеры не знаю. Возможно и будут. Тут вопрос в том, сможет-ли кто-то создать алгоритм на квантовом компьютере, который будет работать параллельно. Если вы сейчас возьмёте квантовый компьютер, и попытаетесь на нём например компресоовать видео. То вы увидите, что всё происходит очень медленно. Квантовые компы исполняют очень определённые алгоритмы очень быстро, но они не какие-то магические устройства, способные делать всё. Дальше вопрос к математикам, инженерам, и возможно к физикам. Можно-ли написать квантовый алгоритм, который выполняет хеширование быстрее чем классический компьютер? Я не знаю ответа.
@@VladimirMozhenkov Здравствуйте , скажите пожалуйста контрольная сумма обратима?
@@ЕвгенийБабийчук-г2н Если контрольная сумма обратима, то это уже называется коррекция ошибок. ru.wikipedia.org/wiki/%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F_%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA
Хотя тогда я-бы уже не называл это контрольной суммой.
Чем вызвано требование к последовательности алгоритма? Догадываюсь, что это требование со стороны безопасности, но не пойму чем опасна возможность распараллелить алгоритм.
А чем плох алгоритм который может быть запаралелен?
Вопрос можно поиграть на телефоне игры которые на пк
Вот это годится
Спасибо. Но остаётся один вопрос. Почему независимые хэш-генераторы генерируют некое число X одинаково? Они все работают по одному и тому же алгоритму?
Алгоритмов хэширования много. И каждый выдает свой результат. А что такое "независимый хэш-генератор" известно только вам.
@@garrygaller2853 я имел в виду разные сайты хэш генераторов, они же независимы друг от друга
@@tonikkk25 Это не имеет значения. Один и тот же алгоритм выдаст один и тот же хэш для одного и того же элемента. Почему? Потому что главное свойство хэш-алгоритмов - детерминированность. Например, если моя хэш-функция это остаток от деления на 5, то любой код, который использует мою хэш-функцию всегда будет получать от числа 12 хэш равный 2, а от числа 5 хэш равный нулю. И при этом асболютно неважно кто и где будет запускать этот код: Вася Пупкин из 5 А на своем смартфоне или астронавт на квантовом компе своего космолета.
Спасибо!
У хэширования нет требования на не обратимость. У криптографического хэширования есть такое требование.
там разница два бита
А что за "Почти университет"? Это университет который скоро заработает или организация какая-то?))
SuperCKAyTWorld Это сайт, который я создал. Если найду других преподавателей, которые захотят объединить усилия, то это станет порталом. Пока что "Почти Университет" - это я... надеюсь это не навсегда так.
Я вообще не понимаю, что такое! Чувак что, я курил!? Как это использовать в повседневной жизни? Это, типо Жене сказал, что бабки лежат в моём кошелке, но я не сказал, что он в машине в гараже. Это является hash-ом?
ничего не понял
Скажите почему алгоритм необратим ведь у каждого алгоритма есть формула по которой он считается и по этой формуле высчитать X если он ранее неизвестен
+Альберт Галиакбаров
Представьте себе формулу f(x) = x % 100
Я вам говорю f(x) = 20. Скажите мне чему равен x?
+Vladimir Mozhenkov не может быть формулы с процентами. Как ее считать то?
+FAQ The Sims 3 Это не процент - это остаток от деления ))) просто пивык к такой записи, так как этот оператор как раз так в программировании пишется.
То есть f(x) равно отстоку от деления x на 100.
+Vladimir Mozhenkov Ну допустим здесь я не смогу найти X потому что мне не совсем понятно на что он делится. но как например "дехешируют" хеш в MD5? а в моем случае нужно найти первоначальные данные из Fnv hash 64 битный.
+Альберт Галиакбаров Вы знаете на что он делится. На 100. Просто это необратимая операция. Вы можете получить остаток от деления одного числа на дрогое, но зная результат и делитель, вы не знаете превоначальное число.
MD5 не совсем дехешируют, там используют так называемые Радужные Таблицы. Это довольно большая тема, и давайте я про неё запишу отдельное видео. Тема-то интересная.
Так что следите за каналом, ответ будет.