Алгоритм цифровой подписи - Digital Signature Algorithm
В Алгоритм цифровой подписи (DSA) это Федеральный стандарт обработки информации за цифровые подписи, основанный на математической концепции модульное возведение в степень и задача дискретного логарифмирования. DSA - это вариант Шнорр и Эль-Гамаль схемы подписи.[1]:486
В Национальный институт стандартов и технологий (NIST) предложили DSA для использования в своем стандарте цифровой подписи (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 покрывается Патент США 5231668 , поданной 26 июля 1991 г., срок действия которой истек, приписывается Дэвиду В. Кравицу,[8] бывший АНБ наемный рабочий. Этот патент был выдан "Соединенным Штатам Америки в лице Министр торговли, Вашингтон, округ Колумбия ", и NIST сделали этот патент доступным во всем мире без лицензионных отчислений.[9] Клаус П. Шнорр утверждает, что его Патент США 4,995,082 (срок действия также истек) покрытые суточные; это требование оспаривается.[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] Использование одного и того же значения дважды (даже при сохранении secret), используя предсказуемое значение, или даже несколько битов в каждой из нескольких подписей достаточно, чтобы раскрыть закрытый ключ .[14]
Эта проблема затрагивает как DSA, так и ECDSA - в декабре 2010 г. группа, называющая себя fail0verflow объявил о восстановлении ECDSA закрытый ключ, используемый Sony подписать программное обеспечение для PlayStation 3 игровая консоль. Атака стала возможной, потому что Sony не удалось сгенерировать новый случайный за каждую подпись.[15]
Эту проблему можно предотвратить, получив детерминированно из закрытого ключа и хэша сообщения, как описано RFC 6979. Это гарантирует, что отличается для каждого и непредсказуемо для злоумышленников, не знающих закрытый ключ .
Кроме того, вредоносные реализации DSA и ECDSA могут быть созданы там, где выбран для того, чтобы подсознательно утечка информации через подписи. Например, автономный закрытый ключ могла быть утечка с идеального автономного устройства, которое выпускало только невинно выглядящие подписи.[16]
Реализации
Ниже приведен список криптографических библиотек, обеспечивающих поддержку DSA:
Смотрите также
Рекомендации
- ^ а б Шнайер, Брюс (1996). Прикладная криптография. ISBN 0-471-11709-9.
- ^ "FIPS PUB 186: Стандарт цифровой подписи (DSS), 1994-05-19". qcsrc.nist.gov. Архивировано из оригинал 13 декабря 2013 г.
- ^ а б c d «FIPS PUB 186-4: Стандарт цифровой подписи (DSS), июль 2013 г.» (PDF). csrc.nist.gov.
- ^ "FIPS PUB 186-1: Стандарт цифровой подписи (DSS), 1998-12-15" (PDF). csrc.nist.gov. Архивировано из оригинал (PDF) на 2013-12-26.
- ^ «FIPS PUB 186-2: Стандарт цифровой подписи (DSS), 2000-01-27» (PDF). csrc.nist.gov.
- ^ «FIPS PUB 186-3: Стандарт цифровой подписи (DSS), июнь 2009 г.» (PDF). csrc.nist.gov.
- ^ «Стандарт цифровой подписи (DSS)». Министерство торговли США. 31 октября 2019 г.. Получено 21 июля 2020.
- ^ Д-р Дэвид В. Кравиц В архиве 9 января 2013 г. Wayback Machine
- ^ Вернер Кох. «DSA и патенты»
- ^ . 26 августа 2009 г. https://web.archive.org/web/20090826042831/http://csrc.nist.gov/groups/SMA/ispab/documents/94-rpt.txt. Архивировано из оригинал 26 августа 2009 г. Отсутствует или пусто
| название =
(помощь) - ^ «FIPS PUB 180-4: Стандарт безопасного хеширования (SHS), март 2012 г.» (PDF). csrc.nist.gov.
- ^ «Специальная публикация NIST 800-57» (PDF). csrc.nist.gov. Архивировано из оригинал (PDF) на 2014-06-06.
- ^ «Катастрофа Debian PGP, которая почти закончилась». root labs rdist.
- ^ DSA -value Требования
- ^ Бендель, Майк (29 декабря 2010). «Хакеры описывают безопасность PS3 как эпический провал, получают неограниченный доступ». Exophase.com. Получено 2011-01-05.
- ^ Вербюхельн, Стефан (2 января 2015 г.). «Как совершенные офлайн-кошельки все еще могут пропускать секретные ключи биткойнов». arXiv:1501.00447 [cs.CR ].
внешняя ссылка
- FIPS PUB 186-4: Стандарт цифровой подписи (DSS), четвертая (и текущая) редакция официальной спецификации DSA.
- Рекомендации по управлению ключами - Часть 1: общие, Специальная публикация NIST 800-57, стр. 62–63