Открытый ключ DSA больше закрытого ключа

Если я сгенерирую закрытый и открытый ключ для DSA, используя Crypto ++:

CryptoPP::AutoSeededRandomPool rng;

CryptoPP::DSA::PrivateKey privateKey;

privateKey.GenerateRandomWithKeySize(rng, 2048);

CryptoPP::DSA::PublicKey publicKey;

privateKey.MakePublicKey(publicKey);

Когда я кодирую закрытый ключ примерно так:

CryptoPP::ByteQueue privateKeyQueue;
key.DEREncodePrivateKey(privateKeyQueue);

Тогда информация, передаваемая в очередь для закрытого ключа, меньше, чем закодированные данные для открытого ключа:

CryptoPP::ByteQueue publicKeyQueue;
key.DEREncodePublicKey(publicKeyQueue);

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

Раньше я работал только с RSA, и открытый ключ намного меньше закрытого.

0

Решение

Итак … легкомысленно, потому что арифметика по модулю не моя сильная сторона …

Источник моей информации здесь:

https://en.wikipedia.org/wiki/Digital_Signature_Algorithm

Выберите утвержденную криптографическую хеш-функцию H. В исходном DSS H всегда был SHA-1, но более сильные хеш-функции SHA-2 одобрены для использования в текущем DSS. [5] [9] Вывод хеша может быть усечен до размера пары ключей.

Определите длину ключа L и N. Это основная мера криптографической стойкости ключа. Исходный DSS ограничил L кратным 64 между 512 и 1024 (включительно). NIST 800-57 рекомендует длины 2048 (или 3072) для ключей с продолжительностью жизни безопасности, превышающей 2010 (или 2030), используя соответственно более длинную N. [10] FIPS 186-3 определяет пары длины L и N (1024,160), (2048,224), (2048,256) и (3072,256).

Выберите N-битное простое число q. N должно быть меньше или равно длине вывода хеша.

(поэтому длина q равна N битам — скажем, 256 для 3072-битного ключа)

Выберите L-разрядный простой модуль p такой, что p – 1 кратно q.
Выберите g — число, порядок умножения которого по модулю p равен q. Это может быть сделано путем установки g = h (p – 1) / q mod p для некоторого произвольного h (1 < час < p − 1) и повторная попытка с другим h, если результат получится равным 1. Большинство вариантов выбора h приведут к пригодному g; обычно h = 2 используется.

(поэтому p будет иметь длину 3072 бита)

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

Пользовательские ключи

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

Выберите x некоторым случайным методом, где 0 < Икс < кв.
Рассчитайте y = gx mod p.

Открытый ключ (p, q, g, y).

открытый ключ содержит p, поэтому он должен быть длиной не менее 3072 бит

Закрытый ключ — это х.

поскольку x зависит от q, он будет иметь (в нашем случае) 256 битов — это длина закрытого ключа.

Это кажется разумным?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector