Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Алгоритм цифровой подписи ( DSA ) является Federal Information Processing Standard для цифровых подписей , основанный на математической концепции модульного возведения в степень и задачи дискретного логарифмирования . DSA - это вариант схем подписи Шнорра и Эль-Гамаля . [1] : 486

Национальный институт стандартов и технологий (NIST) предложил DSA для использования в их цифровой подписи Standard (DSS) в 1991 году, и приняла его в качестве FIPS 186 в 1994 году [2] Четыре изменения к первоначальной спецификации были освобождены. Самая последняя спецификация - FIPS 186-4 от июля 2013 года. [3] DSA запатентован, но NIST сделал этот патент доступным во всем мире без лицензионных отчислений . Черновая версия спецификации FIPS 186-5 указывает, что DSA больше не будет утверждаться для генерации цифровой подписи, но может использоваться для проверки подписей, сгенерированных до даты реализации этого стандарта.

Обзор [ править ]

Алгоритм DSA работает в рамках криптосистем с открытым ключом и основан на алгебраических свойствах модульного возведения в степень , а также на проблеме дискретного логарифмирования , которая считается трудноразрешимой в вычислительном отношении. Алгоритм использует пару ключей, состоящую из открытого и закрытого ключей. Закрытый ключ используется для создания цифровой подписи сообщения, и такая подпись может быть проверена с помощью соответствующего открытого ключа подписывающей стороны. Цифровая подпись обеспечивает аутентификацию сообщения (получатель может проверить источник сообщения), целостность (получатель может убедиться, что сообщение не было изменено с момента его подписания) и невозможность отказа от авторства. (отправитель не может ложно утверждать, что он не подписывал сообщение).

История [ править ]

В 1982 году правительство США запросило предложения по стандарту подписи с открытым ключом. В августе 1991 года Национальный институт стандартов и технологий (NIST) предложил использовать DSA в своем стандарте цифровой подписи (DSS). Первоначально была серьезная критика, особенно со стороны компаний- разработчиков программного обеспечения , которые уже вложили усилия в разработку программного обеспечения для цифровой подписи на основе криптосистемы RSA . [1] : 484 Тем не менее, NIST принял DSA в качестве федерального стандарта (FIPS 186) в 1994 году. Были выпущены четыре версии исходной спецификации: FIPS 186–1 в 1998 году, [4] FIPS 186–2 в 2000 году [5 ] FIPS 186–3 в 2009 г. [6]и FIPS 186–4 в 2013 году. [3] Черновая версия стандарта FIPS 186-5 запрещает подписание с помощью DSA, но разрешает проверку подписей, сгенерированных до даты внедрения стандарта в качестве документа. Он должен быть заменен более новыми схемами подписи, такими как EdDSA . [7]

DSA защищена патентом США 5 231 668 , поданным 26 июля 1991 г., срок действия которого истек и приписывается Дэвиду В. Кравитцу [8], бывшему сотруднику NSA . Этот патент был выдан «Соединенным Штатам Америки в лице министра торговли Вашингтона, округ Колумбия», и NIST сделал этот патент доступным во всем мире без лицензионных отчислений. [9] Клаус П. Шнорр утверждает, что его патент США 4 995 082 (также истекший) распространяется на DSA; это требование оспаривается. [10]

Операция [ править ]

Алгоритм DSA включает четыре операции: генерацию ключа (которая создает пару ключей), распределение ключей, подпись и проверку подписи.

Генерация ключей [ править ]

Генерация ключа состоит из двух этапов. Первый этап - это выбор параметров алгоритма, которые могут использоваться разными пользователями системы, а на втором этапе вычисляется одна пара ключей для одного пользователя.

Генерация параметров [ править ]

  • Выберите утвержденную криптографическую хеш-функцию с битами выходной длины . В исходном DSS всегда был SHA-1 , но более сильные хэш-функции SHA-2 одобрены для использования в текущем DSS. [3] [11] Если больше, чем длина модуля , используются только крайние левые биты хеш-вывода.
  • Выберите длину ключа . Исходный DSS должен быть кратным 64 от 512 до 1024 включительно. NIST 800-57 рекомендует длину 2048 (или 3072) для ключей со сроком службы безопасности, превышающим 2010 (или 2030). [12]
  • Выберите длину модуля так , чтобы и . FIPS 186-4 определяет и имеет одно из значений: (1024, 160), (2048, 224), (2048, 256) или (3072, 256). [3]
  • Выберите -битовое простое число .
  • Выберите -битовое простое число так , чтобы - 1 было кратно .
  • Случайным образом выбрать целое число из .
  • Вычислить . В редких случаях попробуйте еще раз с другим . Обычно используется. Это модульное возведение в степень можно эффективно вычислить, даже если значения большие.

Параметры алгоритма ( , , ). Они могут использоваться разными пользователями системы.

Ключи для каждого пользователя [ править ]

Учитывая набор параметров, на втором этапе вычисляется пара ключей для одного пользователя:

  • Случайным образом выбрать целое число из .
  • Вычислить .

- это закрытый ключ и открытый ключ.

Распределение ключей [ править ]

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

Подписание [ править ]

Сообщение подписано следующим образом:

  • Случайным образом выбрать целое число из
  • Вычислить . В маловероятном случае начните снова с другого случайного числа .
  • Вычислить . В маловероятном случае начните снова с другого случайного числа .

Подпись

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

Проверка подписи [ править ]

Проверить, является ли подпись действительной подписью сообщения, можно следующим образом:

  • Убедитесь, что и .
  • Вычислить .
  • Вычислить .
  • Вычислить .
  • Вычислить .
  • Подпись действительна тогда и только тогда, когда .

Правильность алгоритма [ править ]

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

Во-первых, так как, по малой теореме Ферма . Поскольку и простое, должен иметь порядок  .

Подписывающая сторона вычисляет

Таким образом

Поскольку есть порядок, у нас есть

Наконец, корректность DSA следует из

Чувствительность [ править ]

При использовании DSA критически важны энтропия, секретность и уникальность значения случайной подписи . Это настолько важно, что нарушение любого из этих трех требований может раскрыть злоумышленнику весь закрытый ключ. [13] Использование одного и того же значения дважды (даже при сохранении секрета), использование предсказуемого значения или утечка даже нескольких битов в каждой из нескольких подписей достаточно, чтобы раскрыть закрытый ключ . [14]

Эта проблема затрагивает как DSA, так и ECDSA - в декабре 2010 года группа, называющая себя fail0verflow, объявила о восстановлении закрытого ключа ECDSA, используемого Sony для подписи программного обеспечения для игровой консоли PlayStation 3 . Атака стала возможной, потому что Sony не удалось сгенерировать новый случайный знак для каждой подписи. [15]

Эту проблему можно предотвратить путем детерминированного получения из закрытого ключа и хэша сообщения, как описано в RFC 6979 . Это гарантирует, что каждый из них будет индивидуальным и непредсказуемым для злоумышленников, которые не знают закрытый ключ . 

Кроме того, вредоносные реализации DSA и ECDSA могут быть созданы там, где это выбрано, для подсознательной утечки информации через сигнатуры. Например, офлайн-закрытый ключ может быть получен с идеального офлайн-устройства, которое выпускает только невинно выглядящие подписи. [16]

Реализации [ править ]

Ниже приведен список криптографических библиотек, обеспечивающих поддержку DSA:

  • Ботан
  • Надувной Замок
  • cryptlib
  • Крипто ++
  • libgcrypt
  • Крапива
  • OpenSSL
  • волк
  • GnuTLS

См. Также [ править ]

  • Модульная арифметика
  • RSA (криптосистема)
  • ECDSA

Ссылки [ править ]

  1. ^ a b Шнайер, Брюс (1996). Прикладная криптография . ISBN 0-471-11709-9.
  2. ^ "FIPS PUB 186: Стандарт цифровой подписи (DSS), 1994-05-19" . qcsrc.nist.gov . Архивировано из оригинала на 2013-12-13.
  3. ^ a b c d «FIPS PUB 186-4: Стандарт цифровой подписи (DSS), июль 2013 г.» (PDF) . csrc.nist.gov .
  4. ^ "FIPS PUB 186-1: Стандарт цифровой подписи (DSS), 1998-12-15" (PDF) . csrc.nist.gov . Архивировано из оригинального (PDF) 26 декабря 2013 года.
  5. ^ «FIPS PUB 186-2: Стандарт цифровой подписи (DSS), 2000-01-27» (PDF) . csrc.nist.gov .
  6. ^ «FIPS PUB 186-3: Стандарт цифровой подписи (DSS), июнь 2009 г.» (PDF) . csrc.nist.gov .
  7. ^ "Стандарт цифровой подписи (DSS)" . Министерство торговли США. 31 октября 2019 . Проверено 21 июля 2020 года .
  8. Доктор Дэвид В. Кравиц. Архивировано 9 января 2013 года в Wayback Machine.
  9. ^ Вернер Кох. «DSA и патенты»
  10. ^ . 26 августа 2009 г. https://web.archive.org/web/20090826042831/http://csrc.nist.gov/groups/SMA/ispab/documents/94-rpt.txt . Архивировано из оригинального 26 августа 2009 года. Отсутствует или пусто |title=( справка )
  11. ^ «FIPS PUB 180-4: Secure Hash Standard (SHS), март 2012» (PDF) . csrc.nist.gov .
  12. ^ "Специальная публикация NIST 800-57" (PDF) . csrc.nist.gov . Архивировано из оригинального (PDF) 06.06.2014.
  13. ^ «Катастрофа Debian PGP, которая почти закончилась» . root labs rdist .
  14. ^ Требования к значению DSA k {\displaystyle k}
  15. ^ Bendel, Mike (2010-12-29). «Хакеры описывают безопасность PS3 как эпический провал, получают неограниченный доступ» . Exophase.com . Проверено 5 января 2011 .
  16. ^ Verbücheln, Stephan (2 января 2015). «Как совершенные офлайн-кошельки все еще могут пропускать закрытые биткойн-ключи». arXiv : 1501.00447 [ cs.CR ].

Внешние ссылки [ править ]

  • FIPS PUB 186-4: Стандарт цифровой подписи (DSS) , четвертая (и текущая) редакция официальной спецификации DSA.
  • Рекомендации по управлению ключами - Часть 1: общие , Специальная публикация NIST 800-57, стр. 62–63