Рейтинг:1

Будет ли этот алгоритм шифрования на основе хэша работать теоретически?

флаг bf

Я как раз думал об этом и не мог найти ничего об этом в Интернете.

Итак, идея у меня была такая:

Генерация случайного ключа некоторой длины. Затем хэширует этот ключ с помощью SHA256 (или чего-то подобного), затем перебирает каждый байт хеша и каждый байт текста и выполняет операцию XOR с обоими этими байтами, создавая новый байт. Затем связывание этих новых байтов вместе для создания зашифрованного текста. Это можно легко изменить, если вы знаете ключ.

Мои вопросы:

Насколько это может быть безопасно? Другие соображения? Советы по улучшению системы?

Спасибо!

kelalaka avatar
флаг in
Вы находитесь на пути к стандартному режиму CTR [1979] (https://ee.stanford.edu/~hellman/publications/32.pdf). Режим CTR изначально разработан для PRF. Пусть $H$ — безопасная хэш-функция, тогда $$H(k||counter_0) || F(k||счетчик_1) || \ldots || F(k||counter_m)$$ создает безопасный поток, чтобы можно было x-или зашифровать сообщение. Они также обеспечивают [множество преимуществ и некоторые недостатки] (https://crypto.stackexchange.com/q/85571/18298).
Рейтинг:0
флаг ng

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

Еще одна небольшая проблема заключается в том, что вы можете шифровать сообщения только до тех пор, пока длина вывода вашего хэша.

Оба они могут быть исправлены путем выборки случайного IV, а затем хеширования ключа IV||, а не ключа. Если вы хотите зашифровать несколько блоков, либо хешируйте с помощью расширяемой функции вывода, либо хешируйте ключ IV||, ключ (IV+1)|| и т. д.

Эта конструкция представляет собой просто (рандомизированный) режим счетчика, в котором мы используем хеш-функцию в качестве PRG. Поскольку нашему хэшу нужны свойства псевдослучайности, это безопасно только в модели случайного оракула, и наш хеш должен быть хорош как случайный оракул.

theflamingtiger avatar
флаг bf
Что вы подразумеваете под выборкой случайного IV? Если это случайно, не означает ли это, что другой человек не может его расшифровать?
Morrolan avatar
флаг ng
IV обычно не обязаны быть секретными, поэтому его можно просто передать вместе с зашифрованным текстом.
Рейтинг:0
флаг cn

Это полностью эквивалентно Виженеру с размером ключа $256$ (и ключ Виженера будет хешем вашего ключа). Тогда это совсем не безопасно.

Например, предположим, что я знаю первые 256 бит вашего сообщения. Тогда я могу вывести полную $ ч (к) $.

И даже я не знаю $к$, я могу получить полное сообщение.

Конечно, если ваше сообщение точно $256$ bits, у вас идеальная безопасность (это одноразовый блокнот).

theflamingtiger avatar
флаг bf
Это также применимо, если сообщение меньше 256 бит, верно?
Ievgeni avatar
флаг cn
Да, но тогда вопрос в размере ключа. Если это больше 256, это менее эффективно, чем одноразовый блокнот, тогда вы должны быть уверены, что у вашего ключа достаточно энтропии. В противном случае это может быть грубая сила.
theflamingtiger avatar
флаг bf
Это полностью теоретическая ситуация: что произойдет, если вы поместите открытый текст во что-то вроде QR-кода, а затем вместо этого выполните исходный процесс над этими байтами. Будет ли это считаться более безопасным, поскольку теперь каждый байт не обязательно представляет один в исходном открытом тексте?
Ievgeni avatar
флаг cn
Я не слишком хорошо знаком с QR-кодом. Но если у злоумышленника есть утечка информации о распространении вашего QR-кода, он может сделать много выводов. Например, путем xoring двух частей по 256 бит $c_1$, $c_2$ полностью удаляется ключ, а затем выводится $m_1 \oplus m_2$. Я не знаю, являются ли это конфиденциальными данными в вашем случае, но в целом такие схемы считаются небезопасными.
theflamingtiger avatar
флаг bf
Это имеет большой смысл. Хорошо, последнее, что, если бы был способ зашифровать этот QR-код способом, определяемым ключом/хэшем, так что без ключа/хэша кто-то, пытающийся расшифровать, не знал бы, какие байты соответствуют чему?
Ievgeni avatar
флаг cn
Я не знаю. Я полагаю, это зависит от энтропии перестановки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.