Введение

Стандарт цифровой верификации
Алгоритм цифровой подписи (DSA) — это криптосистема с открытым ключом и Федеральный стандарт обработки информации для цифровых подписей, основанный на математической концепции модульной экспоненциации и дискретной логарифмической задаче. DSA является вариантом схем подписей Шнорра и Эль-Гамаля. Национальный институт стандартов и технологий (NIST) предложил DSA для использования в своем Стандарте цифровой подписи (DSS) в 1991 году и принял его как FIPS 186 в 1994 году. Было выпущено пять редакций первоначальной спецификации. Новейшая спецификация: FIPS 186-5 от февраля 2023 года. FIPS 186–2 в 2000 году, FIPS 186–3 в 2009 году, FIPS 186–4 в 2013 году и FIPS 186–5 в 2023 году. Стандарт FIPS 186-5 запрещает подписывать данные с использованием DSA, но разрешает проверять подписи, созданные до даты вступления стандарта в силу. Он должен быть заменен более новыми схемами подписи, такими как EdDSA. DSA защищен патентом, поданным 26 июля 1991 года и ныне истекшим, и автором которого является Дэвид В. Кравиц, бывший сотрудник АНБ. Этот патент был выдан "Соединенным Штатам Америки в лице секретаря торговли, Вашингтон, округ Колумбия", и NIST сделал этот патент доступным во всем мире без уплаты роялти. Клаус П. Шнорр утверждает, что его (также истекший) патент покрывал DSA; это утверждение оспаривается. В 1993 году Дэйву Банисару удалось получить подтверждение через запрос в соответствии с Законом о свободе информации, что алгоритм DSA был разработан не NIST, а АНБ. OpenSSH объявил, что DSA планируется удалить в 2025 году.

Операция

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

1. генерация ключей

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

Создание параметров

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