В криптографии слепая подпись , введенная Дэвидом Чаумом , [1] является формой цифровой подписи , в которой содержимое сообщения маскируется ( слепляется ) до того, как оно будет подписано. Полученная слепая подпись может быть публично проверена по отношению к исходному, неслепому сообщению способом обычной цифровой подписи. Слепые подписи обычно используются в протоколах, связанных с конфиденциальностью, где подписывающее лицо и автор сообщения являются разными сторонами. Примерами служат криптографические избирательные системы и схемы цифровых денег .
Часто используемая аналогия криптографической слепой подписи — это физическое действие избирателя, вкладывающего заполненный анонимный бюллетень в специальный конверт, выложенный копировальной бумагой , на внешней стороне которого предварительно напечатаны учетные данные избирателя. Чиновник проверяет учетные данные и подписывает конверт, тем самым перенося свою подпись на бюллетень внутри через копировальную бумагу. После подписания пакет возвращается избирателю, который перекладывает теперь уже подписанный бюллетень в новый обычный конверт без маркировки. Таким образом, подписавший не видит содержание сообщения, но третья сторона может позже проверить подпись и узнать, что подпись действительна в рамках ограничений базовой схемы подписи.
Слепые подписи также могут использоваться для обеспечения несвязываемости , что не позволяет подписывающему связать подписываемое им скрытое сообщение с более поздней неослепленной версией, которую он может потребовать проверить. В этом случае ответ подписывающего сначала «раскрывается» перед проверкой таким образом, что подпись остается действительной для неослепленного сообщения. Это может быть полезно в схемах, где требуется анонимность .
Схемы слепой подписи могут быть реализованы с использованием ряда распространенных схем подписи открытым ключом , например RSA и DSA . Для выполнения такой подписи сообщение сначала «ослепляется», как правило, путем объединения его каким-либо образом со случайным «фактором ослепления». Ослепленное сообщение передается подписывающему, который затем подписывает его с помощью стандартного алгоритма подписи. Полученное сообщение вместе с фактором ослепления может быть позже проверено с помощью открытого ключа подписывающего. В некоторых схемах слепой подписи, таких как RSA, можно даже удалить фактор ослепления из подписи до ее проверки. В этих схемах конечный вывод (сообщение/подпись) схемы слепой подписи идентичен выводу обычного протокола подписи.
Схемы слепой подписи широко используются в приложениях, где важна конфиденциальность отправителя. Это включает в себя различные схемы « цифровой наличности » и протоколы голосования .
Например, целостность некоторых систем электронного голосования может потребовать, чтобы каждый бюллетень был сертифицирован избирательным органом, прежде чем он может быть принят для подсчета; это позволяет органу проверять учетные данные избирателя, чтобы убедиться, что ему разрешено голосовать, и что он не подает более одного бюллетеня. В то же время важно, чтобы этот орган не узнал выбор избирателя. Несвязываемая слепая подпись обеспечивает эту гарантию, поскольку орган не увидит содержание любого бюллетеня, который он подписывает, и не сможет связать подписанные им слепые бюллетени с неослепленными бюллетенями, которые он получает для подсчета.
Схемы слепой подписи существуют для многих протоколов подписи открытым ключом. Более формально схема слепой подписи представляет собой криптографический протокол , в котором участвуют две стороны: пользователь Алиса, которая хочет получить подписи на своих сообщениях, и подписывающий Боб, у которого есть его секретный ключ подписи. В конце протокола Алиса получает подпись Боба на m, при этом Боб ничего не узнает о сообщении. Эту интуицию не узнавания чего-либо трудно выразить математическими терминами. Обычный подход заключается в том, чтобы показать, что для каждого (состязательного) подписывающего существует симулятор, который может выводить ту же информацию, что и подписывающий. Это похоже на то, как нулевое разглашение определяется в системах доказательства с нулевым разглашением .
[2] : 235
Одна из самых простых схем слепой подписи основана на подписании RSA. Традиционная подпись RSA вычисляется путем возведения сообщения m в секретную степень d по модулю открытого модуля N. Слепая версия использует случайное значение r , такое, что r является относительно простым числом N ( т. е. gcd ( r , N ) = 1). r возводится в публичную степень e по модулю N , и полученное значение используется в качестве ослепляющего фактора. Автор сообщения вычисляет произведение сообщения и ослепляющего фактора, т. е.:
и отправляет полученное значение подписывающему органу. Поскольку r — случайное значение, а отображение — перестановка, то следует, что оно также случайно. Это подразумевает, что не происходит утечки информации о m . Затем подписывающий орган вычисляет слепую подпись s' как:
s' отправляется обратно автору сообщения, который затем может удалить маскирующий фактор, чтобы раскрыть s , действительную подпись RSA m :
Это работает, потому что ключи RSA удовлетворяют уравнению и, таким образом,
следовательно, s действительно является сигнатурой m .
На практике свойство, что подписание одного слепого сообщения производит не более одного действительного подписанного сообщения, обычно желательно. Это означает один голос на подписанный бюллетень на выборах, например. Это свойство не выполняется для простой схемы, описанной выше: исходное сообщение и не слепая подпись действительны, но также действительны слепое сообщение и слепая подпись, и, возможно, другие комбинации, учитывая умного злоумышленника. Решением этой проблемы является слепое подписание криптографического хеша сообщения, а не самого сообщения. [3]
RSA подвержен атаке ослепления RSA, посредством которой можно обманом заставить расшифровать сообщение, слепо подписав другое сообщение. Поскольку процесс подписания эквивалентен расшифровке с помощью секретного ключа подписчика, злоумышленник может предоставить слепую версию сообщения, зашифрованную с помощью открытого ключа подписчика, для подписи. Зашифрованное сообщение обычно представляет собой некоторую секретную информацию, которую злоумышленник наблюдал, отправляя зашифрованной с помощью открытого ключа подписчика, о которой злоумышленник хочет узнать больше. Когда злоумышленник снимает слепоту, подписанная версия будет иметь открытый текст:
где зашифрованная версия сообщения. Когда сообщение подписано, открытый текст легко извлекается:
Обратите внимание, что относится к функции Эйлера . Теперь сообщение легко получить.
Эта атака работает, потому что в этой схеме слепой подписи подписывающий подписывает сообщение напрямую. Напротив, в схеме неслепой подписи подписывающий обычно использует схему заполнения (например, подписывая вместо этого результат криптографической хэш-функции, примененной к сообщению, вместо подписания самого сообщения), однако, поскольку подписывающий не знает фактического сообщения, любая схема заполнения даст неправильное значение при неслепой подписи. Из-за этого мультипликативного свойства RSA один и тот же ключ никогда не должен использоваться как для шифрования, так и для подписи.