Рейтинг:0

Как расширить операции с числами на более крупные «объекты» в криптографических реализациях?

флаг in

Я знаю, что не должен запускать собственную криптовалюту, но все с чего-то начинают! Я реализую протокол PSI-CA, определенный в Быстрое и частное вычисление мощности множества пересечения и объединения (рис. 1, стр. 5), и у меня он (более или менее) работает. Моя самая большая проблема в том, что у меня это работает только для int64_t типов и ничего больше. В конечном итоге я хотел бы сравнить строки или даже произвольные объекты. Итак, я полагаю, что мне нужно, чтобы объект предоставлял функциональность для сериализации/хэширования, но что потом? Как расширить этот алгоритм для многобайтовых вычислений?

Например, если я хочу использовать хэши SHA-512 вместо целых чисел, во время определенных операций, скажем $\forall я 1\leq я \leq v : a ^ {\ prime} _i = (a_i) ^ {R ^ {\ prime} _s} $, как мне перевести это из работы с целыми числами (тривиально) в байтовые поля? Я просто выполняю эту же операцию для каждого байта в поле?

SEJPM avatar
флаг us
Что-то мешает вам интерпретировать и использовать сериализованную/хешированную версию объекта как целое число? (Что, конечно, требует, чтобы сериализация/хеширование сохраняло равенство)
флаг in
Я думаю, тогда он не будет устойчив к столкновениям, верно? Подобно SHA-512 имеет большой диапазон. В документе говорится, что мне нужны две хэш-функции (смоделированы как ПЗУ в документе), поэтому я не совсем уверен, какие хеш-функции удовлетворят этим требованиям, чтобы обеспечить криптографическую безопасность информации.
Рейтинг:1
флаг ng

Мне не ясно (не видя вашего кода), в чем заключается ваша текущая проблема. Просматривая бумагу, я вижу (например, на рис. 1):

  1. (произвольные объекты) $c_1,\dots, c_v$ и $s_1,\точки, s_v$

  2. хеши этих объектов, которые написаны $hc_i = H(c_i)$ и $hs_i = H(s_i)$ (до перестановки, примененной к $s_i$).

Все остальные операции относятся к $hc_i$ и $hs_i$, которые кажутся (из контекста) в $\mathbb{Z}_p^*$, т.е. арифметика стандартная (хотя, скорее всего, придется выбирать $р$ достаточно большой, чтобы решить проблему дискретного логарифмирования было сложно, поэтому $\гг 1000$ биты. В частности, вам, вероятно, следует использовать bigints, а не u64. Я не читал достаточно внимательно, чтобы знать, что они предполагают твердость предположения типа DL в $\mathbb{Z}_p^*$ хоть).

Просматривая другие фигуры, я вижу похожую историю, а именно, что вся арифметика выполняется над хэшированными элементами $\mathbb{Z}_p^*$, а не произвольные строки байтов в $\{0,1\}^*$. Я не вижу вашего конкретного примера:

$$1â¤iâ¤v:a_i'=(a_i)^{Râ²_s}$$

как проблема.Например, похоже, это происходит на рисунке 4, где до этого я вижу $a_i = (hs_i)^{R_s'}$. На этом рисунке я не вижу определения $hs_i = H(s_i)$, и я только бегло просматриваю, но вполне вероятно, что эта интерпретация предполагается, т.е. $hs_i$ это хэш произвольной строки байтов $s_i$, и содержится в $\mathbb{Z}_p^*$ (скорее, чем $\{0,1\}^*$).

Общий ответ на

Я просто выполняю эту же операцию для каждого байта в поле?

будет "нет" (если что-то конкретно не говорит об этом). Обычно криптографические протоколы работают с четко определенными математическими объектами (скажем, битовыми строками в $\{0,1\}^*$), а их «разрезание», чтобы попытаться заставить что-то работать (если это не указано в протоколе), может легко привести к проблемам с безопасностью.

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

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