Рейтинг:2

Открытый ключ RSA с нулевым разглашением

флаг us

Предположим, что у Боба есть $к>1$ открытые ключи RSA $(e_i, n_i)$ без какого-либо знания их соответствующих закрытых ключей. Алиса также имеет все открытые ключи, но также имеет закрытый ключ только для одного из них, скажем, $(d_j, n_j)$. Может ли она доказать Бобу, что у нее есть хотя бы один из секретных ключей, не раскрывая $j$

РЕДАКТИРОВАТЬ: изменено обозначение в соответствии с предложениями fgrieu

Рейтинг:3
флаг cn
jjj

Да, это возможно даже без взаимодействия (ничего Бобу не нужно отправлять Алисе). Метод называется «кольцевая подпись».

Допустим, она хочет подписать сообщение типа «Я — Алиса, настоящим подтверждаю Бобу, что я знаю один из ключей». Она хеширует его, чтобы получить $м$.

Алиса теперь генерирует случайное значение $r_i$ для каждого открытого ключа $k_i$ и шифрует их, чтобы получить $y_i$.

Обратите внимание, что все они $y_i$ являются непредсказуемыми псевдослучайными величинами. Единственный $y_i$ она может выбрать тот, который принадлежит ее ключу $k_j$, она просто выбирает $y_j$ и подпишите его, чтобы получить $r_j$ ($r_j$ выглядит как любые другие случайные данные)

Теперь она может выбрать $y_j$ так что xor всех $y_i$ равно $м$.

Она отправляет сообщение и все $r_i$ Бобу (если порядок не ясен, добавьте примечание, которое $r_i$ к какому ключу относится)

Для проверки Боб просто шифрует каждый $r_i$ с открытым ключом $k_i$ чтобы получить $y_i$, удаляет их все и проверяет, равно ли $м$.

Так как все $y_i$ подобны случайным числам, когда вы не знаете ключ, невозможно подделать подпись, не зная закрытого ключа. Кроме того, нет способа определить, какой $y_i$ и $r_i$ не был сгенерирован случайным образом, потому что все они выглядят случайными.

Важное РЕДАКТИРОВАТЬ: Я забыл шаг симметричного шифрования в кольцевой подписи. Между шагами xor должно применяться симметричное шифрование. Это по-прежнему позволяет Эллис восстановить $y_i$ она нужна, но делает атаки сложнее. Для более подробной информации см. Википедия

jjj avatar
флаг cn
jjj
@fgrieu Я изменил имена фон $e$ на $y$, спасибо за это. Вы можете просто выбрать, объединив все остальные $y_i$ и $m$, чтобы получить $y_j$. Нет необходимости в пробах и ошибках, когда вы знаете закрытый ключ $k_j$. Проблему длины можно легко решить, ограничив биты xor числом битов в m и игнорируя остальные.
fgrieu avatar
флаг ng
Да, маскирование достаточного количества старших битов (только одного, если $n_i$ имеют одинаковую разрядность) позволяет избежать проб и ошибок. Опять же, выбор старшего бита (битов) $y_j$ требует тщательного рассмотрения.
fgrieu avatar
флаг ng
Когда хэш равен $h$-bit, мне [сообщают] (https://crypto.stackexchange.com/a/92216/555), что происходит [атака] (https://doi.org/10.1007/ 3-540-45708-9_19) стоимостью $\mathcal O(2^{h/(1+\log_2(k))})$, что может вызывать беспокойство при больших $k$. С другой стороны, я считаю нетривиальной задачу помешать противнику получить некоторое (небольшое) преимущество при угадывании $j$, особенно когда $h$ приближается к ширине наименьшего $n_i$.
jjj avatar
флаг cn
jjj
@fgrieu Хорошо, я проверил и заметил, что неправильно запомнил алгоритм. Базовая идея по-прежнему верна. Я добавил примечание к своему ответу. Спасибо за проверку. Я все еще думаю, что кольцевые подписи действительно хороши для этой проблемы.
fgrieu avatar
флаг ng
Да, кольцевая подпись работает для этого. Но в статье Википедии и ответе отсутствует важная деталь: домен для $r_i$ и $y_i$ должен быть сделан одинакового размера, даже если $n_i$ разные, чтобы предотвратить утечку информации о $j. $. Это рассматривается в разделе [Расширение лазейки на общий домен] (https://link.springer.com/content/pdf/10.1007/3-540-45682-1_32.pdf#page=6) Бумага Ривеста-Шамира-Таумана.
флаг us
@jjj это именно то, что я искал. Всем спасибо!
Рейтинг:2
флаг ng

Вот предложение (вылетело из головы). Большая фотография

  • Боб вытягивает случайный $Х$, и отправляет его детерминистически зашифрованным под каждым открытым ключом
  • Алиса расшифровывает $Х$ с открытым ключом, который она держит
  • Алиса проверяет, что Боб сделал так, как ожидалось, учитывая, что $Х$
  • Алиса показывает $Х$ Бобу

Точнее:

  • Определите 8 миллиардов долларов-битный хэш (скажем, SHA-512), такой, что $\мин(n_i)>2^{16b}$
  • Определите функцию генерации маски (например, MGF1 с этим хешем), так что для байтовой строки $Х$, $\operatorname{MGF}(X,\ell)$ является $\ell$-байтовый хэш $Х$
  • Определите длину байтов $\ell_i=\слева\lfloor\log_2(n_i)/8\справа\rfloor$, которые таковы, что $2^{8\ell_i}<n_i<2^{8\ell_i+8}$ (во избежание тайминг-атак желательно, чтобы $n_i$ имеют одинаковую разрядность, поэтому $l_i$ равный)
  • Боб вытягивает случайный $X\in\{0,1\}^{8b}$$б$-байтовая байтовая строка)
  • Для каждого $я$, Боб
    • вычисляет $M_i=\operatorname{MGF}\bigl(X\mathbin\|H(n_i),l_i-b\bigr)$
    • вычисляет $X_i=M_i\mathbin\|(X\oplus H(M_i\mathbin\|H(n_i)))$ (ан $l_i$-байтовая байтовая строка)
    • вычисляет и выводит $C_i={X_i}^{e_i}\bmod n_i$
  • Алиса получает $C_i$, в том числе $C_j$
  • Алиса вычисляет $f={C_j}^{d_j}\bmod n_j$
  • Алиса выражает $ф$ как строка байтов $M\mathbin\|G$ с $ млн $ из $l_i-b$ байты и $G$ из $б$ байт.
  • Алиса выздоравливает $Х$ вычисляя $X=G\oplus H(M\mathbin\|J)$
  • Для каждого $я$, Алиса
    • вычисляет $M_i=\operatorname{MGF}\bigl(X\mathbin\|H(n_i),l_i-b\bigr)$, куда $I$ индекс $я$ как байтовая строка.
    • вычисляет $X_i=M_i\mathbin\|(X\oplus H(M_i\mathbin\|H(n_i)))$ (ан $l_i$-байтовая байтовая строка)
    • чеки ${X_i}^{e_i}\bmod n_i=C_i$ (когда $я=j$, это проверяет $M=\operatorname{MGF}\bigl(X\mathbin\|H(n_j),l_j-b\bigr)$ как побочный эффект)
  • Только если все проверки пройдены, и без выявления (например, по времени), где произошла ошибка, если таковая имеется, или какая $X_i$ был использован для восстановления $Х$
    • Алиса показывает $Х$
  • Боб проверяет, что Алиса раскрыла правду. $Х$

Обоснование:

  • Алиса доказывает, что может расшифровать одну из криптограмм $C_i$, таким образом, она держит закрытый ключ
  • Она не раскрывает какие, так как убедилась, что все криптограммы совпадают. $Х$. Нет риска, что смещение в старших битах в каком-то количестве в $[0,n_j)$ может дать преимущество в угадывании $j$ (как могло бы быть в случае наивной реализации тот другой ответ).
  • Представители $X_i$ из $Х$ распространяются на $[0,n_i)$ как в РСАССА-ОАЭП, с независимыми функциями заполнения. Обратите внимание, что прямое шифрование $X_i=X$, или же $X_i=F(X)$ для некоторого фиксированного впрыска $F$, сделает систему уязвимой для Широковещательная атака Хостада; кроме того, может оказаться невозможным определить безопасную общую ширину для $X_i$, например если $n_0$ 2048-битный, $n_1$ 8192-бит, $e_1=3$; прокладка решает это.
  • С $Х$ является вызовом, нарисованным Бобом, протокол невосприимчив к воспроизведению: Алиса не может уйти с данными, которые она предварительно вычислила до потери доступа к своему закрытому ключу, или данными, ранее вычисленными Амандой, у которой также есть закрытый ключ.

Возможные улучшения, чтобы еще больше уберечь Алису от превращения в оракула дешифрования, а Боба от настройки его $Х$, и, возможно, упростить доказательство:

  • Алиса сначала рисует $б$-байт $Y$ и отправляет обязательство $H(Y\mathbin\|S_0)$
  • Боб рисует свой $б$-байт $Х$ и отправляет обязательство $H(X\mathbin\|S_1)$
  • Алиса показывает $Y$, Боб сверяет его с $H(Y\mathbin\|0)$
  • вышеуказанный протокол изменен
    • это используется $M_i=\operatorname{MGF}\bigl(X\mathbin\|Y\mathbin\|H(n_i),l_i-b\bigr)$
    • это используется $X_i=M_i\mathbin\|(X\oplus H(M_i\mathbin\|Y\mathbin\|H(n_i)))$
    • Алиса далее проверяет $H(X\mathbin\|1)$ совпадения
    • Алиса показывает $H(X\mathbin\|S_2)$ скорее, чем $Х$
    • Боб проверяет это. (где $S_i$ являются различными произвольными короткими непустыми байтовыми строками)

Обновление: другой метод, описанный в этот другой ответ, заключается в использовании Кольцевая подпись на основе RSA, и заставьте Алису продемонстрировать Бобу свою способность подписывать сообщение с вызовом.

jjj avatar
флаг cn
jjj
Бобу не нужно ничего рисовать. Алиса может это сделать. Чтобы Алиса не выбирала вместо рисования, можно просто использовать хэш сообщения, которое она публикует.
fgrieu avatar
флаг ng
@jjj: ваше предложение делает протокол уязвимым для воспроизведения. См. новый четвертый пункт в обосновании.
jjj avatar
флаг cn
jjj
Не обязательно, это зависит от хэшируемого сообщения. Можно просто включить одноразовый номер.

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

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