Сліпий підпис

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Сліпий підпис (англ. blind signature) — різновид електронного цифрового підпису, особливістю якого є те, що сторона, яка підписує, не може точно знати вміст підписаного документа. Поняття «сліпий підпис» придумано Девідом Чаумом[en][1] в 1982 році, ним же запропонована перша реалізація через алгоритм RSA. Безпека схеми сліпого підпису ґрунтувалася на складності факторизації великих складених чисел. З тих пір було запропоновано велику кількість інших схем[2][3].

Опис[ред. | ред. код]

Основна ідея сліпих підписів полягає в наступному:

  • Відправник А шифрує документ і надсилає його стороні В.
  • Сторона, не бачачи вміст документа, підписує його і повертає назад стороні А.
  • Сторона А знімає свій шифр, залишаючи на документі тільки підпис сторони В.

По завершенні цього протоколу сторона нічого не знає ні про повідомлення t, ні про підписи під цим повідомленням.

Цю схему можна порівняти з конвертом, в якому розміщений документ і копіювальний лист. Якщо підписати конверт, то підпис віддрукується на документі, і при розтині конверта документ вже буде підписаний.

Мета сліпого підпису полягає в тому, щоб перешкодити підписувачу В ознайомитися з повідомленням сторони А, яку він підписує, і з відповідним підписом під цим повідомленням. Тому надалі підписане повідомлення неможливо пов'язати зі стороною А.

Схема безпечного сліпого підпису повинна задовольняти 3 властивостям, а саме:

  1. Нульове розголошування. Ця властивість допомагає користувачеві отримати підпис на даному повідомленні, не розкриваючи самого повідомлення підписуючій стороні.
  2. Невідстежуваність. Підписуюча сторона не може відстежити пару підпис-повідомлення після того, як користувач оприлюднив підпис на повідомленні.
  3. Непідкладність. Тільки підписуча сторона може сгенерувати дійсний підпис. Ця властивість найважливіша і повинна задовольнятися для всіх схем підписів.

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

Алгоритми сліпого підпису[ред. | ред. код]

Повністю сліпий підпис[ред. | ред. код]

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

BlindSignature.jpg

У цій схемі Аліса хоче, щоб Боб наосліп підписав повідомлення . Для цього:

  1. Аліса зашифровує повідомлення функцією ., отримуючи зашифроване повідомлення .
  2. Аліса відсилає зашифроване повідомлення Бобу.
  3. Боб наосліп (так як не знає, що знаходиться всередині) підписує повідомлення функцією , отримуючи .
  4. Боб посилає назад Алісі.
  5. Аліса отримує і прибирає своє шифрування, отримуючи: .

Цей протокол працює, тільки якщо функції підпису та шифрування комутативні.

Сліпий підпис[ред. | ред. код]

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

Протокол RSA[ред. | ред. код]

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

Припустимо, що спочатку у Боба є відкритий ключ , де — це модуль, а — публічна експонента ключа.

  1. Аліса вибирає випадковий маскуючий множник  , взаємно простий з , і обчислює .
  2. Аліса відсилає  по відкритому каналу Бобу.
  3. Боб обчислює , використовуючи свій закритий ключ.
  4. Боб відсилає назад Алісі.
  5. Аліса прибирає своє початкове маскування і отримує підписане Бобом вихідне повідомлення наступним чином: .

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

Сліпа підпис на основі ЕЦП Шнорра[ред. | ред. код]

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

  1. Аліса ініціює взаємодію з Бобом.
  2. Боб відправляє Алісі значення .
  3. Аліса обчислює значення (w і t — випадкові числа, що не перевищують ), і , після чого відправляє Бобу значення  .
  4. Боб обчислює значення , таке що , і відправляє Алісі.
  5. Аліса обчислює підпис , де і , яка є справжньою по відношенню до повідомлення [8].

Сліпий підпис на основі ГОСТ Р 34.10-94[ред. | ред. код]

Параметри[ред. | ред. код]

pпросте число, 510 ≤ |p| ≤ 512 (або 1022 ≤ |p| ≤ 1024), де |p| — розрядність двійкового подання числа p.

q — великий простий дільник числа p-1, 255 ≤ |q| ≤ 256 (або 511 ≤ |q| ≤ 512)

α ≠ 1, α < p, mod p = 1.

Обчислення[ред. | ред. код]
  1. Необхідно згенерувати випадкове k, 1 < k < q;
  2. R = ( mod p) mod q — перша частина підпису;
  3. H = Hash(m), де Hash — хеш-функція, описана в стандарті ГОСТ Р 34.11-94, m — повідомлення, яке підписується ;
  4. S = kH + zR mod q, де z — закритий ключ.
  5. Якщо S=0, то повторити операції 1-4.
Перевірка[ред. | ред. код]
  1. Якщо R < q або S < q, то підпис недійсний. Інакше:
  2. R' = ( mod p) mod q, де yвідкритий ключ;
  3. Якщо R = R', то підпис дійсний.

Сліпа підпис на основі стандарту СТБ 1176.2-99[ред. | ред. код]

Стандарт Білорусії передбачає наступний протокол генерації сліпого підпису до документа M:

  1. Необхідно згенерувати випадкове k таке, що 1 < k < q і обчислити . Ці дії виконує підписувач. Далі він передає число R користувачеві;
  2. Користувач генерує випадкові числа ε і τ такі, що 1 < ε, τ < q і потім обчислює , і E = E'τ mod q; E — перший елемент підпису — направляється підписувачу;
  3. Підписує обчислює другий елемент підпису S = (k — xE) mod q і передає S користувачеві;
  4. Користувач обчислює S' = S + ε mod q.

В даному описі використані наступні параметри: q — модуль, за яким ведуться обчислення, просте; a — породжує елемент; x — закритий ключ; y — відкритий ключ[9]..

Колективний сліпий підпис[ред. | ред. код]

Нехай — відкриті ключі, якими володіють s користувачів. Нехай є повідомлення M, яке хочуть підписати m з них. У такому разі всі підписи можна об'єднати в один, довжина якої дорівнює довжині підпису одного користувача і не залежить від m. Це реалізується за правилами наступного протокола:

  1. Кожний з m користувачів генерує випадкове число < p, де j = , p — велике просте число. Далі кожний з m користувачів обчислює mod p (k — велика проста ступінь) і розсилає це число всім іншим користувачам даної групи.
  2. Кожен користувач обчислює mod p. Далі обчислюється e = f(R,M) = RH mod q, де q — велике просте число, відмінне від p, H = Hash(M) — хеш-функція. Число e буде першим елементом колективного підпису.
  3. mod p — частка користувача. Цю частку кожен користувач обчислює і надає іншим.
  4. Кожен з користувачів далі обчислює mod p. Це другий елемент колективного підпису.

Перевірка колективного сліпого підпису[ред. | ред. код]

mod p — колективний відкритий ключ. На його основі відбувається перевірка колективного сліпого підпису за наступним алгоритмом:

  1. Обчислюється mod p.
  2. Обчислюється e' = f(R,M) = RH mod q
  3. Якщо e' = e, то підпис дійсний[9].

Застосування[ред. | ред. код]

Банківські системи[ред. | ред. код]

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

Може бути передбачений більш простий варіант: за кожним номіналом купюр у банку закріплена своя пара відкритих ключів. Тоді під підпис надсилається тільки номер купюри, і необхідність перевірки номіналу перед підписом відпадає[1].

Таємне голосування[ред. | ред. код]

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

Якщо виборчий бюлетень дійсний, валідатор підписує виборчий бюлетень і повертає його виборцю. Виборець видаляє маскування, розкриваючи таким чином зашифрований виборчий бюлетень, підписаний валідатором. Далі виборець посилає в результаті отриманий підписаний, зашифрований виборчий бюлетень лічильнику, який перевіряє підпис на зашифрованому виборчому бюлетені.

Якщо виборчий бюлетень дійсний, лічильник розміщує його в списку, який буде виданий після всього голосування. Після того, як список виданий, виборці перевіряють, що їх виборчі бюлетені знаходяться в списку і посилають лічильнику ключі розшифрування, необхідні, щоб відкрити їх виборчі бюлетені. Лічильник використовує ці ключі для розшифрування виборчих бюлетенів і додає голос до загального числа. Після виборів лічильник видає ключі розшифрування поряд з зашифрованими виборчими бюлетенями, щоб виборці могли незалежно перевірити вибір[10].

Уразливості підпису наосліп[ред. | ред. код]

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

де — це зашифрована версія повідомлення. Коли повідомлення підписане, відкритий текст легко отримуємо:


де — це Функція Ейлера. Тепер повідомлення легко отримати.

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

Дивись також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. а б Брюс Шнайер, «Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С», издательство «Триумф», 2002 г.
  2. Жан Каменич, Жан-Марк Пивето, Маркус Штадлер, «Слепые подписи, основанные на задаче дискретного логарифмирования», журнал «Eurocrypt», страницы 428—432, издательство «Springer-Verlag», 1995 г.
  3. Чакраборту, Каліан; Мехта, Жан (2012). A stamped blind signature scheme based on elliptic curve discrete logarithm problem. International Journal of Network Security (en) (14): 316—319. 
  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 г.
  8. Молдовян Н.А. {{{Заголовок}}}. — ISBN 5-9775-0024-6.
  9. а б Н.А. Молдовян. {{{Заголовок}}}. — ISBN 978-5-9775-0585-7.
  10. Анисимов В.В. Протоколы двух агентств Фудзиока-Окамото-Охта и Sensus. Криптографические методы защиты информации. 

Література[ред. | ред. код]

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