Алгоритм цифровой подписи ( DSA ) — это криптосистема с открытым ключом и Федеральный стандарт обработки информации для цифровых подписей , основанный на математической концепции модульного возведения в степень и задаче дискретного логарифма . В криптосистеме с открытым ключом генерируются два ключа: данные могут быть зашифрованы только с помощью открытого ключа, а зашифрованные данные могут быть расшифрованы только с помощью закрытого ключа. DSA — это вариант схем подписи Шнорра и Эль-Гамаля . [1] : 486
Национальный институт стандартов и технологий (NIST) предложил DSA для использования в своем Стандарте цифровой подписи (DSS) в 1991 году и принял его как FIPS 186 в 1994 году. [2] Было выпущено пять редакций первоначальной спецификации. Последняя спецификация: FIPS 186-5 от февраля 2023 года. [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 в 2023 году. [7] Стандарт FIPS 186-5 запрещает подпись с помощью DSA, но позволяет проверку подписей, созданных до даты внедрения стандарта в качестве документа. Он должен быть заменен более новыми схемами подписи, такими как EdDSA . [8]
DSA защищен патентом США 5,231,668 , поданным 26 июля 1991 года и в настоящее время истекшим, и приписанным Дэвиду В. Кравицу, [9] бывшему сотруднику АНБ . Этот патент был выдан «Соединенным Штатам Америки в лице министра торговли , Вашингтон, округ Колумбия», и NIST сделал этот патент доступным по всему миру без уплаты роялти. [10] Клаус П. Шнорр утверждает, что его патент США 4,995,082 (также в настоящее время истекший) охватывает DSA; это утверждение оспаривается. [11]
В 1993 году Дэйву Банисару удалось получить подтверждение через запрос FOIA , что алгоритм DSA был разработан не NIST, а NSA. [12]
OpenSSH объявила, что DSA планируется удалить в 2025 году. [13]
Алгоритм DSA включает четыре операции: генерацию ключей (создание пары ключей), распространение ключей, подписание и проверку подписи.
Генерация ключей происходит в два этапа. Первый этап — это выбор параметров алгоритма , которые могут совместно использоваться разными пользователями системы, а второй этап вычисляет одну пару ключей для одного пользователя.
Параметры алгоритма ( , , ). Они могут быть общими для разных пользователей системы.
На втором этапе с учетом набора параметров вычисляется пара ключей для одного пользователя:
— это закрытый ключ, а — это открытый ключ.
Подписавший должен опубликовать открытый ключ . То есть, он должен отправить ключ получателю через надежный, но не обязательно секретный механизм. Подписавший должен хранить закрытый ключ в секрете.
Сообщение подписывается следующим образом:
Подпись есть
Вычисление и равносильно созданию нового ключа для каждого сообщения. Модульное возведение в степень в вычислениях является наиболее затратной с точки зрения вычислений частью операции подписания, но оно может быть вычислено до того, как сообщение станет известно. Вычисление модульного обратного числа является второй по затратам частью, и оно также может быть вычислено до того, как сообщение станет известно. Его можно вычислить с помощью расширенного алгоритма Евклида или с помощью малой теоремы Ферма как .
Проверить, является ли подпись действительной подписью для сообщения, можно следующим образом:
Схема подписи верна в том смысле, что верификатор всегда будет принимать подлинные подписи. Это можно показать следующим образом:
Во-первых, поскольку , то по малой теореме Ферма следует . Поскольку и является простым числом, должно иметь порядок .
Подписывающий вычисляет
Таким образом
Так как есть порядок, мы имеем
Наконец, правильность DSA следует из
В DSA энтропия, секретность и уникальность случайного значения подписи имеют решающее значение. Это настолько важно, что нарушение любого из этих трех требований может раскрыть весь закрытый ключ злоумышленнику. [16] Использование одного и того же значения дважды (даже при сохранении секретности), использование предсказуемого значения или утечка даже нескольких бит в каждой из нескольких подписей достаточно, чтобы раскрыть закрытый ключ . [17]
Эта проблема затрагивает как DSA, так и алгоритм цифровой подписи на эллиптических кривых ( ECDSA ) — в декабре 2010 года группа fail0verflow объявила о восстановлении закрытого ключа ECDSA, используемого Sony для подписи программного обеспечения для игровой консоли PlayStation 3. Атака стала возможной, поскольку Sony не смогла сгенерировать новый случайный ключ для каждой подписи. [18]
Эту проблему можно предотвратить, детерминированно выведя данные из закрытого ключа и хэша сообщения, как описано в RFC 6979. Это гарантирует, что они будут разными для каждого и непредсказуемыми для злоумышленников, которые не знают закрытый ключ .
Кроме того, вредоносные реализации DSA и ECDSA могут быть созданы, где выбрано, чтобы подсознательно утечь информацию через подписи. Например, автономный закрытый ключ может быть украден из идеального офлайн-устройства, которое выпускает только невинно выглядящие подписи. [19]
Ниже приведен список криптографических библиотек, обеспечивающих поддержку DSA:
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)