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

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

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

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

Основная идея слепых подписей заключается в следующем:

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

По завершении этого протокола сторона В ничего не знает ни о сообщении t, ни о подписи под этим сообщением.

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

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

Схема безопасной слепой подписи должна удовлетворять 3 свойствам, а именно :

1) Нулевое разглашение. Это свойство помогает пользователю получить подпись на данном сообщении, не раскрывая самого сообщения подписывающей стороне.

2) Непрослеживаемость. Подписывающая сторона не может отследить пару подпись-сообщение после того, как пользователь обнародовал подпись на своем сообщении.

3) Неподложность. Только подписывающая сторона может сгененировать действительную подпись. Это свойство самое важное и должно удовлетворяться для всех схем подписей.

Благодаря свойствам нулевого разглашения и непрослеживаемости, схема слепой подписи может быть широко задействована в приложениях, где необходима конфидециальность, например, в системах электронного голосования[4] [5] [6] [7].

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

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

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

BlindSignature.jpg

В этой схеме Алиса хочет, чтобы Боб вслепую подписал сообщение m. Для этого:

  1. Алиса зашифровывает сообщение m функцией f, получая зашифрованное сообщение c = f (m).
  2. Алиса отсылает зашифрованное сообщение Бобу.
  3. Боб вслепую (т.к. что он не знает что находится внутри) подписывает сообщение c функциией g, получая c^{'} = g (c) = g (f (m)).
  4. Боб посылает c^{'}обратно Алисе.
  5. Алиса получает c^{'} и убирает свое шифрование , получая: c^{''}=g(f(m))*f^{-1}=g(m).

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

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

  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.

Также, возможно представление этой схемы в следующем виде:

Blindsignature-RSA.jpg

Допустим, что изначально у Боба есть открытый ключ (p, e) , где p - это просто число, а e - публичная экспонента ключа.

  1. Алиса выбирает случайный маскирующий множитель r , взаимно простой с p, и вычисляет m^{'}\equiv m r^{e} \bmod p.
  2. Алиса посылает m^{'} по открытому каналу Бобу.
  3. Боб вычисляет s^{'}\equiv (m^{'})^{d} \bmod p, используя свой закртытй ключ (p, d).
  4. Боб остылает s^{'} обратно Алисе.
  5. Алиса убирает свою изначальную подпись и получает подписанное Бобом исходное сообщение m следующим образом: s \equiv s^{'}* r^{-1} \bmod p \equiv m^{d} \bmod p.

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

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

Пусть Алиса хочет подписать сообщение m у Боба таким образом, чтобы, во-первых, Боб не мог ознакомиться с сообщением в ходе подписи, во-вторых, чтобы Боб не мог впоследствии при получении сообщения m и соответствующей подписи идентифицировать пользователя, инициировавшего протокол слепой подписи для данного конкретного сообщения (Алису). Данный протокол реализуется следующим образом:

  1. Алиса инициирует взаимодействие с Бобом.
  2. Боб отправляет Алисе значение  R = a^k \mod p.
  3. Алиса вычисляет значения  R^{'} = Ra^{-w}y^{-t} \mod y (w и t - случайные числа, не превосходящие y),  E^{'} = H(m||R^{'}) и  E = E^{'}+t \mod y, послего чего отправляет Бобу значениеE .
  4. Боб вычисляет значение S, такое что  R = a^S y^{E} \mod p, и отправляет S Алисе.
  5. Алиса вычисляет подпись (E^{'},S^{'}), где  E^{'} = E^{- t} \mod y и  S^{'} = S-w \mod y, которая является подлинной по отношению к сообщению m.

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

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

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

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

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

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

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

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

Уязвимости подписи вслепую[править | править вики-текст]

Алгоритм RSA может являться объектом атаки, благодаря которой становится возможным расшифровать ранее подписанное вслепую сообщение, выдав его за сообщение, которое только еще предстоит подписать. Исходя из того, что процесс подписи эквивалентен расшифровке подписывающей стороной (с использованием ее секретного ключа), атакующий может подложить для подписи уже подписанную вслепую версию сообщения m, зашифрованного с помощью открытого ключа подписывающей стороны, то есть подложить сообщение m'.


\begin{align}
m'' & = m' r^e\pmod n \\
    & = (m^e\pmod n \cdot r^e)\pmod n \\
    & = (mr)^e \pmod n \\
\end{align}

где m' - это зашифрованная версия сообщения. Когда сообщение подписано, открытый текст m легко извлекаем:


\begin{align}
s' & = m''^d\pmod n \\
   & = ((mr)^e\pmod n)^d\pmod n \\
   & = (mr)^{ed} \pmod n \\
   & = m \cdot r \pmod n  \mbox{, since } ed \equiv 1 \pmod{\phi(n)}\\
\end{align}

где \phi(n) - это Функция Эйлера. Теперь сообщение легко получить.


\begin{align}
m = s' \cdot r^{-1} \pmod{n}
\end{align}

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

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

  1. Брюс Шнайер, "Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С", издательство "Триумф", 2002г.
  2. Жан Каменич, Жан-Марк Пивето, Маркус Штадлер, "Слепые подписи, основанные на задаче дискретного логарифмирования", журнал "Eurocrypt", страницы 428-432, издательство "Springer-Verlag", 1995г.
  3. Калиан Чакраборту, Жан Мехта, "A stamped blind signature scheme based on elliptic curve discrete logarithm problem", журнал "International Journal of Network Security",выпуск 14, страницы 316-319, 2012г.
  4. Лун-Чанг Лин, Мин-Шианг Ханг, Чин-Чен Чанг "Повышение безопасности для анонимного электронного голосования через сеть", журнал "Computer Standards and Interfaces", выпуск 25, страницы 131-139, 2003г.
  5. Татсуаки Окамото, "Эффективная слепая и частично-слепая подписи без случайных предсказаний", сборник статей "Теория Криптографии", страницы 80-99, издательство "Springer-Verlag", 2006г.
  6. Маркус Рукерт, "Слепая подпись на основе решеток", сборник статей конференции Asiacrypt, страницы 413-430, издательство "Springer-Verlag", 2010г.
  7. Дэниэл Ортиз-Арройо, Клаудия Гарсия-Замора, "Очередное улучшение протокола электронного голосования Му-Варадараджана", журнал "Computer Standards and Interfaces", выпуск 29, страницы 471-480 , 2007г.

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

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