Ключи SSH: почему id_rsa больше, чем id_rsa.pub?

8

Мой закрытый ключ ( ~/.ssh/id_rsa) - это файл длиной 1766 байт, но мой открытый ключ ( ~/.ssh/id_rsa.pub) имеет длину всего 396 байт. Почему огромная разница? Это потому, что закрытый ключ зашифрован с использованием AES? Разве зашифрованный текст AES обычно не имеет ту же длину, что и открытый текст?

склеечный пресс
источник

Ответы:

17

Ваш закрытый ключ содержит больше информации, чем ваш открытый ключ. Принимая во внимание, что открытый ключ передает только показатель степени шифрования (e) и модуль (n), закрытый ключ дополнительно включает показатель степени дешифрования (d) и два простых фактора (p и q) модуля. Закрытый ключ по существу имеет открытый ключ внутри.

[Шифрование: зашифрованный текст = сообщение ^ e (мод n); Расшифровка: сообщение = зашифрованный текст ^ d (мод n)]

Чтобы увидеть все данные в вашем файле закрытого ключа:

$ openssl rsa -in id_rsa -text -noout

Редактировать: файл закрытого ключа, очевидно, не имеет показателя шифрования, но имеет показатели d_1 и d_2, где d_1 = d (mod p-1) и d_2 = d (mod q-1). Они используются для ускорения дешифрования - вы можете разбить свое возведение в степень расшифровки на меньшие параллельные вызовы возведения в степень, что в итоге оказывается быстрее, чем один большой m = c ^ d (mod n) для больших d и больших n.

user75636
источник
2

К сожалению, вы не указали, в каком формате хранятся ключи. Я полагаю, вы имеете в виду кодировку ключей OpenSSH. В этом формате ключи хранятся в блоках данных, закодированных в base64. В зависимости от кодировки при шифровании, как правило, при шифровании данных используются некоторые дополнения. Таким образом, полученные данные кратны размеру блока шифрования.

Ключи OpenSSH могут также включать в себя какие - то комментарии и дополнительные свойства , вставленный между ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----и -----END RSA [PUBLIC|PRIVATE] KEY-----маркерами. См. RFC4716 .

Более того, для открытого ключа сохраняются модуль и открытый показатель степени, в то время как для частного ключа сохраняется частный показатель. Посмотрите генерацию ключа RSA в Википедии для деталей о математической основе. В Интернете есть много мест, которые описывают математическую связь между этими ключами. Не уверен, если вам нужна копия этого объяснения здесь.

Теоретически возможно вычислить закрытый ключ из информации открытого ключа, но сделать это математически гораздо сложнее, чем наоборот. Просто рассматривайте закрытый ключ как «источник», который включает в себя все переменные и открытый ключ как результат вычисления. Это легко выполнить вычисление снова и снова, если вы знаете все переменные, но зная только результат, трудно получить все исходные переменные. Это также причина, по которой вам достаточно сохранить закрытый ключ в надежном месте. Вы всегда можете использовать закрытый ключ для пересчета открытого ключа. Но не наоборот - ну, теоретически вы можете сделать это, но в зависимости от длины ключа это может занять много лет;).

SkyBeam
источник
Вычисление закрытого ключа из открытого ключа требует быстрой эффективной факторизации, недостаток которой лежит в основе безопасности шифрования с открытым ключом (по крайней мере, RSA).
Андрей
Это правильно. Найдите быстрый алгоритм факторизации, и в основном вы нарушите безопасность шифрования RSA. В качестве альтернативы можно использовать ECC (криптографию с эллиптическими кривыми), основанную на концепции трудностей с ходом дискретных логарифмов. Однако, если кто-то найдет эффективное решение этой проблемы ...
SkyBeam