Рейтинг:0

Выдает ли мой алгоритм SHA-256 TableSalt начальную соль?

флаг cn

Установка

У меня есть таблица значений, для которой мне нужно вычислить соленый хэш за каждый стол-клетка стоимость. Кроме того, мне нужно, чтобы соль для каждой ячейки таблицы была уникальный и непредсказуемый. (Чем мотивируется эта потребность, я могу объяснить позже, а пока не хочу отвлекаться от постановки задачи.)

Теперь я не хочу добавлять дополнительный столбец к существующему столбцу в таблице только для хранения этой уникальной соли для каждой ячейки. Итак, простая стратегия, которую я имею в виду, состоит в том, чтобы сначала сгенерировать секретную, безопасную случайную 32-байтовую последовательность для всей таблицы, назовите ее Р_32, а затем для любой заданной ячейки вычислить ее соль как SHA-256 Р_32 объединены с координатами строки/столбца ячейки. В псевдокоде это выглядит так

tableSalt (строка, столбец) = SHA_256 (R_32 + строка + столбец)

куда + здесь подразумевается конкатенация строк байтов, а не сложение. (Координаты строки/столбца представлены в виде 8-байтовых значений каждое.)

Вопрос

В моем приложении важно, чтобы секретный начальный хэш Р_32 выше, не может быть реконструирован, независимо от того, сколько различных клеточных солей из одной и той же таблицы известно. Это столовая соль описанная выше процедура безопасна в этом отношении?

bk2204 avatar
флаг fr
В этом случае я бы использовал HMAC для вычисления соли, а затем использовал соль в качестве ключа для второго HMAC для вычисления вашего соленого хэша. Это определенно будет безопасным, и он использует более стандартные методы, которые будет легче проверять.
Babak Farhang avatar
флаг cn
На самом деле меня беспокоят любые известные недостатки в SHA-256 (отклонения от *идеальной* криптографической хеш-функции) при использовании с этими низкоэнтропийными 16-байтовыми придатками фиксированной ширины к начальному значению выше. Это то, что меня беспокоит.
Meir Maor avatar
флаг in
Это, вероятно, хорошо, как есть, но HMAC лучше, он обеспечит достаточное смешивание после добавления кординатов, что делает маловероятным то, что различные соли будут связаны проблематичным образом. Также SHA3 лучше в этом отношении.
Рейтинг:0
флаг in

Это безопасно? Да, поскольку эта базовая установка используется где-то еще, и я не знаю о каких-либо практических атаках. Однако SHA256 — не лучший выбор. Его базовая структура не смешивает суффикс так, как нам бы хотелось. Структура HMAC или просто использование SHA3 со структурой губки было бы лучше, но даже в том виде, в котором он написан, я не верю, что соли будут связаны между собой пригодным для эксплуатации способом.

Babak Farhang avatar
флаг cn
Спасибо за ваш ответ. У меня недостаточно очков кармы, чтобы отметить ваш ответ. (Довольно странно, учитывая, что это *мой* вопрос, и мне было разрешено опубликовать его :) Что это за «структура губки», о которой вы говорите? Кроме того, с целью «смешивания» есть ли большое преимущество во вложенных вычислениях, как в Hash(Hash(content + row) + column))?
Meir Maor avatar
флаг in
Вы можете отметить как утвержденный. с проверкой, даже если вы не можете проголосовать. Вложение будет означать применение полного хэша после добавления хэша части с низкой энтропией (хеш (основное начальное число + строка + столбец)). это особенно полезно для конструкций Merkel damgard. Но SHA3, вероятно, не нужен, это: https://en.m.wikipedia.org/wiki/Sponge_function
Babak Farhang avatar
флаг cn
Спасибо большое за ссылку и подсказку про возможность пометить закрывающий ответ. Re *hash(hash(master seed+row+column))* вместо *hash(hash(master_seed+row)+column)* Это опечатка? Потому что я всегда думал, что хэш хэша не более безопасен, чем исходный хеш.
Meir Maor avatar
флаг in
Это не эквивалентно, потому что он более тщательно смешивает семя с высокой энтропией. а то что я написал пыж на самом деле не "правильно"/лучше всего должно быть как hmac. хеш(начальное число + хэш(начальное значение+местоположение)). Но на самом деле, поскольку я не могу атаковать даже вашу первоначальную формулировку, эти улучшения могут не понадобиться.

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

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