Укороченная версия: Является ли обычной практикой (и действительной практикой) жестко кодировать элемент? $d \in \mathcal{L}$ языка в симулятор? (делает тренажер неоднородным и неконструктивным)
Длинная версия:
у меня есть доказательство $P$ который делает следующее: он принимает битовую строку $d \in \mathcal{L}$ для некоторых языков в $\textsf{НП}$, то он шифрует $д$ используя шифрование CPA-secure для получения шифрования $к$, и он отправляет неинтерактивное доказательство с нулевым разглашением (NIZK) $\пи$ доказывая, что $к$ шифрует сообщение $d \in \mathcal{L}$. Я хотел бы сказать сейчас, что эта схема не пропускает много информации о $д$, в том смысле, что существует симулятор $Сим$ так что для любого злонамеренного неоднородного верификатора $В^*$:
$$\{Sim(V_\lambda^*)\}_{\lambda,d} \stackrel{comp}{\equiv} \{\textf{OUT}_{V^*}(P_\lambda(d) \leftrightarrow V^*_\лямбда)\}_{\лямбда,д}$$
( $\{X _{\lambda,d}\}_{\lambda,d}\stackrel{comp}{\equiv}\{Y _{\lambda,d}\}_{\lambda,d}$ символ обозначает вычислительную неразличимость: для любого неоднородного различителя $Д$, существует пренебрежимо малое $\му$ такой, что для всех $\lambda \in \mathbb{N},d \in \mathcal{L}$, $|\Pr[D_\lambda(X_d)]-\Pr[D_\lambda(Y_d)]| <\му(\лямбда)$)
Без части NIZK доказательство простое: мой симулятор просто выберет случайный $d'$ и зашифровать его в $к'$: не могу различить $к$ и $к'$ без нарушения безопасности CPA. Интуитивно понятно, что добавление доказательства NIZK не должно привести к утечке дополнительной информации...Однако я не уверен, как поступить в этом случае: у меня есть идея, но она кажется мне довольно странной (я никогда раньше не видел такого метода), и я немного сомневаюсь в этом.
Моя главная проблема заключается в том, что если я ввожу случайный $d'$ в НИЗК, затем $d'$ может не принадлежать $\mathcal{L}$, поэтому я не могу использовать симулятор NIZK, который ожидает $к$ быть шифрованием $d \in \mathcal{L}$. Итак, моя идея состоит в том, чтобы сказать, что если $\mathcal{L}$ не пусто, то существует строка $d' \in \mathcal{L}$ (который может быть или не быть равным $д$). Затем, если я зашифрую эту строку в $к'$, $к'$ теперь является «допустимым» элементом для ввода в симулятор NIZK. Так что теперь я мог просто запустить симулятор NIZK с помощью $к'$ чтобы получить $Сим$ Я хотел: окончательное доказательство неразличимости добавило бы промежуточное распределение, в котором мы используем $к$ с симулятором NIZK: первые две игры должны быть неразличимы из-за свойства NIZK, вторые две игры должны быть невозможно различимы из-за свойства CPA. (Мне все еще нужно формально написать этот набросок доказательства, чтобы проверить, не содержит ли он глупой ошибки).
Однако жесткое кодирование элемента $\mathcal{L}$ в $Сим$ выглядит немного странно (в частности, потому, что тренажер неконструктивен и неоднороден, так как для любого размера $д$ нам нужен другой $d'$). Это что-то общее/действительное в доказательствах с нулевым разглашением, или я что-то упустил?