К сожалению, вы не указали, в каком формате хранятся ключи. Я полагаю, вы имеете в виду кодировку ключей OpenSSH. В этом формате ключи хранятся в блоках данных, закодированных в base64. В зависимости от кодировки при шифровании, как правило, при шифровании данных используются некоторые дополнения. Таким образом, полученные данные кратны размеру блока шифрования.
Ключи OpenSSH могут также включать в себя какие - то комментарии и дополнительные свойства , вставленный между ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----
и -----END RSA [PUBLIC|PRIVATE] KEY-----
маркерами. См. RFC4716 .
Более того, для открытого ключа сохраняются модуль и открытый показатель степени, в то время как для частного ключа сохраняется частный показатель. Посмотрите генерацию ключа RSA в Википедии для деталей о математической основе. В Интернете есть много мест, которые описывают математическую связь между этими ключами. Не уверен, если вам нужна копия этого объяснения здесь.
Теоретически возможно вычислить закрытый ключ из информации открытого ключа, но сделать это математически гораздо сложнее, чем наоборот. Просто рассматривайте закрытый ключ как «источник», который включает в себя все переменные и открытый ключ как результат вычисления. Это легко выполнить вычисление снова и снова, если вы знаете все переменные, но зная только результат, трудно получить все исходные переменные. Это также причина, по которой вам достаточно сохранить закрытый ключ в надежном месте. Вы всегда можете использовать закрытый ключ для пересчета открытого ключа. Но не наоборот - ну, теоретически вы можете сделать это, но в зависимости от длины ключа это может занять много лет;).