Да это несомненно интересно. Но я не ставил перед собой цель сделать полный анализ хеш-функции. Я просто хотел разобраться как она реализована.
Так что всех подробностей я не знаю, но если кратко основная вкусность в том, что Keccak не использует функцию сжатия, в отличие от Sha-2 или Sha-1. Вместо функции сжатия используется псевдослучайная перестановка, собственно Sponge.
Это позволяет свести скойкость Keccak к модели случайного оракула.Т.е. создателям удалось постоить даказательство неразличимости Keccak от случайного оракула. И это в свою очередь позволяет говорить о Keccak, не просто как о хеш-функции, но как об универсальном криптопримитиве. Т.е. Без всяких дополнительных костылей Keccak можно использовать и для генерации псевдослучайного потока, и для вычисления MAC и для генерации ключей.
Там у меня в коде была ошибка. Но благодаря вам я ее уже исправил:)
Этот цикл должен выглядить не do{}while(), а while() do{}. Таким образом минимальное число добавляемых байт все таки 2(это если не хватает двух байт), а максимальное (r/8)+1(если не хватает 1 байта.
Минимальное количество добавляемых байт-2. Максимальное r+8. Т.е. если не хватает 2-ух байт будут добавлены 01 и 80.
Если не хватает одного байта будут дописаны 01, r-8 нулей и 80.
Спасибо за такой интересный комментарий. Да я понимаю что описанная в топике схема всего лишь Somewhat Homomorphic Encryption, просто честно говоря отсутсвие времени да и слабое знания английского языка не позволили рассмотреть чтоже скрывается под этой идеей, в частности что такое Bootstrapping и как она работает.
Поэтому лично мне ваш пост было бы вдвойне интересно почитать. Просим, просим.:)
Отличный курс. Лично мне больше всего понравилась задача про поточные шифры. Любопытно глянуть чужое решение. Я например эту задачу решил следующим образом: проксорил искомый шифротекст со всеми остальными по очереди. получил 10 «открытых» текстов. А дальше, например на первой позиции в двух «открытых» текстах получилась буква T, значит это и есть первая буква исходного текста. И так для всех позиций. В результате получился текст, в котором не хватало всего пары букв, которые легко можно было угадать.
Ну это да, и это кстати одна из причин почему гомоморфное шифрование еще нигде не применяется. Очень много вычислительных можностей надо чтобы работать над шифротекстами.
Ну что за скепсис. Мы же не говорим, что обычные схемы ЭЦП с появлением гомоморфных алгоритмов сразу вымрут. Вполне мирно могут сосуществовать и те и другие. Просто будут применяться для разных целей.
Тут понимаете какое ограничение есть. Схема то гомоморфна относительно двух операций: умножения и сложения. Полностью гомоморфной ее называют из-за того что с помощью этих двух операций можно выразить любую другую математическую операцию. Т.е. если вашу функцию F_W() можно будет описать только с помощью умножения и сложение, то тогда да, то о чем вы говорите будет возможно.
Конкретно этой схемы никакого:)
А если говорить вообще о гомоморфном шифровании, то оно открывает большие возможности для облачных вычислений. Ведь используя такой способ шифрования, вы сможете отправить данные в облако в зашифрованном виде. И чтобы обработать эти данные и вернуть результат вычислений облаку даже не нужно будет знать ваш секретный ключ, т.е. никто кроме вас даже теоретически не сможет получить доступ к вашим секретным данным, хотя при этом вы сможете пользоваться всеми прелестями облачных технологий.
2^64 итераций потребуется чтобы найти два СЛУЧАЙНЫХ блока с одинаковым хешем, это ни в коем случае не поможет вычислить коллизию для заданного значения. И если уж говорить о таком случае то ни о каких 500 годах и речи нет. 15 секунд на пентиуме 4. habrahabr.ru/post/113127/ (соори за саморекламу).
В схеме личностной криптографии предлошенной Шамиром, закрытые ключи пользователя генерируются центром ключей, на основе главного ключа, который известен только этому самому центру. Для чего Шамир предлагал такую схему? В настоящее время открытый ключ в любой асимметричной криптосистеме и идентификатор пользователя никак не связаны. Т.е. Мы можем зашифровать сообщение ключом в котором написано что он принадлежит Васе Пупкину, а на самом деле это может быть ключ другого человека. Т.е. нет жесткой связи между именем и ключом(можно только посмотреть подпись сертифицирующего центра). Так вот Шамир предлагал для облегчения жизни пользователей и для устранения этой проблемы ввести систему в которой, в качестве открытого ключа будет служить именно идентификатор пользователя. Т.е. зашифровывая сообщение ключом Вася Пупкин мы уверены что только Вася Пупкин расшифрует наше послание. А достигается это все с помощью центра ключей. Который используя свой закрытый главный ключ, преобразует идентификатор пользователя в закрытый ключ этого самого пользователя. А некую информацию, которую можно сравнить с открытым ключом рассылает всем пользователям системы. Таким образом, если вы хотите послать сообщение Васе Пупкину вы используете не только открытый ключ получателя, но и открытый ключ центра. А получатель уже используя свой секретный ключ восстанавливает сообщение.
Очень интересные курсы. Записался на лекции по криптографии. Возник такой вопрос. На сайте есть возможность скачать субтитры в формате txt, которые представляют собой на первый взгляд обычный текстовый файл. Может кто-нибудь знает как этот файл прикрутить к видео, английским владею не очень субтитры просто жизненно необходимы:)
Так что всех подробностей я не знаю, но если кратко основная вкусность в том, что Keccak не использует функцию сжатия, в отличие от Sha-2 или Sha-1. Вместо функции сжатия используется псевдослучайная перестановка, собственно Sponge.
Это позволяет свести скойкость Keccak к модели случайного оракула.Т.е. создателям удалось постоить даказательство неразличимости Keccak от случайного оракула. И это в свою очередь позволяет говорить о Keccak, не просто как о хеш-функции, но как об универсальном криптопримитиве. Т.е. Без всяких дополнительных костылей Keccak можно использовать и для генерации псевдослучайного потока, и для вычисления MAC и для генерации ключей.
Этот цикл должен выглядить не do{}while(), а while() do{}. Таким образом минимальное число добавляемых байт все таки 2(это если не хватает двух байт), а максимальное (r/8)+1(если не хватает 1 байта.
Если не хватает одного байта будут дописаны 01, r-8 нулей и 80.
Поэтому лично мне ваш пост было бы вдвойне интересно почитать. Просим, просим.:)
А если говорить вообще о гомоморфном шифровании, то оно открывает большие возможности для облачных вычислений. Ведь используя такой способ шифрования, вы сможете отправить данные в облако в зашифрованном виде. И чтобы обработать эти данные и вернуть результат вычислений облаку даже не нужно будет знать ваш секретный ключ, т.е. никто кроме вас даже теоретически не сможет получить доступ к вашим секретным данным, хотя при этом вы сможете пользоваться всеми прелестями облачных технологий.
Чот я не уловил как и зачем вычисляются Cmi. И что это за пи, которое на 4 шаге используется?