Нет. Открытый ключ в паре ключей всегда соответствует размеру закрытого ключа, фактически он является производным от закрытого ключа.
Однако с некоторыми криптографическими реализациями с открытым ключом, такими как OpenPGP, ключи создаются с подключами, назначенными различным задачам. Эти подключи могут отличаться по размеру друг от друга и от главного ключа, используемого для их создания. В этих случаях данные открытого ключа будут указывать размеры ключа для главного ключа и подключей, которые будут соответствовать соответствующим данным частного ключа.
В то время как многие другие реализации открытого ключа не используют подключи (например, TLS), вы всегда будете видеть только единый размер ключа. Опять же, этот размер ключа будет указан как в данных открытого, так и в закрытом ключе.
Единственное изменение размеров ключей, которое вы увидите, - это когда асимметричное шифрование используется в сочетании с симметричным шифрованием. Симметричное шифрование (сеансовый ключ) будет меньше, но оно использует совершенно другие алгоритмы (например, AES, TWOFISH и т. Д.) И не является частью открытого ключа (за исключением OpenPGP, где параметры симметричного шифрования могут быть сохранены, потому что это не так. использовать активное соединение для установления симметрично зашифрованной связи и обмена данными сеансового ключа).
РЕДАКТИРОВАТЬ: Более подробная информация о взаимосвязи между данными открытого и закрытого ключей (также известная как доказательство того, что Дэвид ошибается)
Указание на RSA - это все очень хорошо, но это зависит от протокола обмена ключами, и для этого мы переходим на обмен ключами Диффи-Хеллмана и оригинальный патент, который срок действия истек. В обоих есть примеры и объяснения методов обмена ключами и взаимосвязи между открытым и закрытым ключами.
Алгоритмы, реализующие эту связь, включая RSA и El-Gamal, все они создают как открытый, так и закрытый ключи одновременно. В частности, путем создания закрытого ключа, который затем генерирует открытый ключ. Открытый ключ наследует все особенности закрытого ключа, из которого он был создан. Единственный способ получить несовпадающие данные между двумя компонентами - это каким-то образом сгенерировать открытый ключ независимо от закрытого ключа. Проблема, конечно же, в том, что они больше не будут ключевой парой.
Описания генерации ключей для RSA и Эль-Гамаля объясняют общие данные между открытым и закрытым ключами и, в частности, то, что все компоненты открытого ключа являются частью закрытого ключа, но закрытый ключ содержит дополнительные данные, необходимые для дешифрования данных. и / или подписать данные. В Эль-Гамале общедоступными компонентами являются G, q, g и h, а частными компонентами - G, q, g, h и x.
Теперь, что касается отсутствия упоминания о размере битов пар ключей в алгоритмах, да, это правда, но каждая их практическая реализация включает выбранный размер ключа в качестве одной из констант при генерации закрытого ключа. Вот соответствующий код (после выбора всех параметров, включая выбор размера ключа и указание ключевой фразы) для генерации ключей в GnuPG:
static int
do_create( int algo, unsigned int nbits, KBNODE pub_root, KBNODE sec_root,
DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 timestamp,
u32 expiredate, int is_subkey )
{
int rc=0;
if( !opt.batch )
tty_printf(_(
"We need to generate a lot of random bytes. It is a good idea to perform\n"
"some other action (type on the keyboard, move the mouse, utilize the\n"
"disks) during the prime generation; this gives the random number\n"
"generator a better chance to gain enough entropy.\n") );
if( algo == PUBKEY_ALGO_ELGAMAL_E )
rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else if( algo == PUBKEY_ALGO_DSA )
rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else if( algo == PUBKEY_ALGO_RSA )
rc = gen_rsa(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp,
expiredate, is_subkey);
else
BUG();
return rc;
}
Небольшие различия между этими тремя алгоритмами относятся к значениям для элементов, упомянутых в опубликованных алгоритмах, но в каждом случае «nbits» является константой.
Вы найдете такую же согласованность в отношении размера ключа в коде для генерации ключей в OpenSSL, OpenSSH и любой другой системе, использующей криптографию с открытым ключом. В каждой реализации, чтобы иметь согласованную пару открытого и закрытого ключей, открытый ключ должен быть получен из закрытого ключа. Поскольку закрытый ключ создается с размером ключа в качестве константы, этот размер ключа должен быть унаследован открытым ключом. Если открытый ключ не содержит всей правильной совместно используемой информации с закрытым ключом, то он по определению не будет соответствовать этому ключу, и, следовательно, процессы шифрования / дешифрования и процессы подписи / проверки завершатся ошибкой.
person
Ben
schedule
13.10.2013