Слепая подпись

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Слепая подпись (Blind Signature) — разновидность ЭЦП, особенностью которой является то, что подписывающая сторона не может точно знать содержимое подписываемого документа. Понятие слепой подписи придумано Дэвидом Чаумом (англ.)[1], им же предложена первая реализация через алгоритм RSA.

Описание[править | править вики-текст]

Основная идея слепых подписей заключается в следующем. Отправитель А посылает документ стороне В, который В подписывает и возвращает А. Используя полученную подпись, сторона А может вычислить подпись стороны В на более важном для себя сообщении t. По завершении этого протокола сторона В ничего не знает ни о сообщении t, ни о подписи под этим сообщением.

Эту схему можно сравнить с конвертом, в котором размещён документ и копировальный лист. Если подписать конверт, то подпись отпечатается на документе, и при вскрытии конверта документ уже будет подписан.

Цель слепой подписи состоит в том, чтобы воспрепятствовать подписывающему лицу В ознакомиться с сообщением стороны А, которое он подписывает, и с соответствующей подписью под этим сообщением. Поэтому в дальнейшем подписанное сообщение невозможно связать со стороной А.

Алгоритмы слепой подписи[править | править вики-текст]

Полностью слепая подпись[править | править вики-текст]

Дана ситуация: Боб — нотариус. Алисе нужно, чтобы он подписал документ не имея никакого представления о его содержании. Боб только заверяет, что документ нотариально засвидетельствован в указанное время. Тогда они действуют по следующему алгоритму:

  1. Алиса берёт документ и умножает его на случайное число. Оно называется маскирующим множителем.
  2. Алиса отсылает документ Бобу
  3. Боб подписывает документ и отсылает обратно
  4. Алиса удаляет маскирующий множитель и получает свой документ с подписью.

Этот протокол работает, только если функции подписи и умножения коммутативны.

Слепая подпись[править | править вики-текст]

  1. Боб готовит n документов на каждом из которых написано некоторое уникальное слово (чем больше n, тем меньше у Боба шансов смошенничать).
  2. Боб маскирует каждый документ уникальным маскирующим множителем и отправляет их Алисе.
  3. Алиса получает все документы и случайным образом выбирает n-1 из них.
  4. Алиса просит Боба выслать маскирующие множители для выбранных документов.
  5. Боб делает это.
  6. Алиса вскрывает n-1 документов и убеждается что они корректны.
  7. Алиса подписывает оставшийся документ и отсылает Бобу.
  8. Теперь у Боба есть подписанный Алисой документ с уникальным словом, которое Алиса не знает.

Протокол RSA[править | править вики-текст]

Первая реализация слепых подписей была осуществлена Чаумом с помощью криптосистемы RSA:

  1. Алиса выбирает случайное число k, взаимно простое с n. Затем она маскирует m, вычисляя:  t = mk^e \mod n
  2. Боб подписывает t:  t^d = (mk^e)^d \mod n
  3. Алиса снимает маскировку с t^d, вычисляя s=t^d/k\mod n
  4. Результатом является s=t^d/k\mod n

Чаум придумал целое семейство более сложных алгоритмов слепой подписи под общим названием неожиданные слепые подписи. Их схемы ещё сложнее, но они дают больше возможностей.

Применение[править | править вики-текст]

Банковские системы[править | править вики-текст]

Наиболее широкое применение протокол слепых подписей нашёл в сфере цифровых денег. Например, чтобы вкладчик не обманул банк, может использоваться такой протокол: вкладчик пишет одинаковый номинал купюр на ста документах с разными номерами и депонирует в зашифрованном виде у банка. Банк выбирает случайным образом и требует раскрыть 99 (или n-1) конвертов, убеждается, что везде написано $10, а не $1000, тогда подписывает оставшийся конверт вслепую, не видя номера купюры.

Может быть предусмотрен более простой вариант: за каждым номиналом купюры у банка закреплена своя пара открытых ключей. Тогда под подпись присылается только номер купюры и необходимость проверки номинала перед подписью отпадает.

Тайное голосование[править | править вики-текст]

Слепые подписи используются для тайного голосования. В протоколе Фуджиока, Окамото и Охта, избиратель подготавливает избирательный бюллетень со своим выбором, который он сделал, шифрует его секретным ключом, и маскирует его. Далее избиратель подписывает избирательный бюллетень и посылает его валидатору. Валидатор проверяет, что подпись принадлежит зарегистрированному избирателю, который еще не голосовал.

Если избирательный бюллетень действителен, валидатор подписывает избирательный бюллетень и возвращает его избирателю. Избиратель удаляет маскировку, раскрывая таким образом зашифрованный избирательный бюллетень, подписанный валидатором. Далее избиратель посылает в результате полученный подписанный, зашифрованный избирательный бюллетень счётчику, который проверяет подпись на зашифрованном избирательном бюллетене.

Если избирательный бюллетень действителен, счётчик размещает его в списке, который будет издан после всего голосования. После того, как список издан, избиратели проверяют, что их избирательные бюллетени находятся в списке и посылают счётчику ключи расшифрования, необходимые, чтобы открыть их избирательные бюллетени. Счётчик использует эти ключи для расшифрования избирательных бюллетеней и добавляет голос к общему числу. После выборов счётчик издает ключи расшифрования наряду с зашифрованными избирательными бюллетенями, чтобы избиратели могли независимо проверить выбор.

Примечания[править | править вики-текст]

  1. Брюс Шнайер, "Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С", издательство "Триумф", 2002г.

Литература[править | править вики-текст]

  • Шнайер, Б., Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С - "Триумф", 2002г.
  • Клюжев А., Электронное голосование, 2003г.
  • Шаньгин, В.Ф., Соколов, А.В., Защита информации в распределенных корпоративных сетях и системах - "ДМК", 2002.