Рейтинг:3

Сколько бит/байт составляет открытый ключ, учитывая его кодировку

флаг in

Я изо всех сил пытаюсь понять, что такое размер "бит/байт" открытого ключа, как вы можете его вычислить и даже что это значит.

Пример открытого ключа RSA:

AAAAB3NzaC1yc2EAAAABJQAAAQB/nAmOjTmezNUDKYvEeIRf2YnwM9/uUG1d0BYsc8/tRtx+RGi7N2lUbp728MXGwdnL9od4cItzky/zVdLZE2cycOa18xBK9cOWmcKS0A8FYBxEQWJ/q9YVUgZbFKfYGaGQxsER+A0w/fX8ALuk78ktP31K69LcQgxIsl7rNzxsoOQKJ/CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr/QbrfB1WT6s3838SEaXfgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN+ffE7iiayQf/2XR+8j4N4bW30DiPtOQLGUrH1y5X/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L

Как мне определить битовую длину этого ключа? Там 368 символов, так что это длина бита? Тогда это будет означать, что это 46-байтовая система, верно? Я едва понимаю, что это значит, и потратил неделю или две на статьи в Википедии, учебные пособия на YouTube и многое другое. Они часто говорят так, как будто вы понимаете, что они имеют в виду, так что мне не из чего исходить. Если бы кто-нибудь мог объяснить логику, которую мне здесь не хватает, это бы очень помогло.

Я понимаю, что 8-битный блок равен 1 байту, то есть у нас есть длина 8 символов, которая может быть 1 или 0. Но я понятия не имею, как это связано с вышеизложенным?

В конце концов, у меня есть другой открытый ключ, для которого я хотел определить размер. Скажем, у меня есть два набора целых чисел, $S_1$ и $S_2$. Их размеры 100 и 150 соответственно. Эти два составляют мой открытый ключ. Это сильно отличается от приведенного выше примера, так как же мне определить размер в битах? Или я неправильно спрашиваю здесь? На самом деле я хочу знать, сколько памяти на компьютере займет такой ключ. Скажем, у меня было 100 наборов по 1000 терминов в каждом. Насколько большим будет «файл» этого открытого ключа? Но я хочу попытаться «понять», что вообще означают биты/байты.

Любые разъяснения будут очень признательны.

Рейтинг:6
флаг gb

Тут много вопросов. Я пытаюсь разбить его довольно просто и ответить на ваш первоначальный вопрос.

То, что вы опубликовали, является base64 кодировка открытого ключа ssh-rsa. Так что это в основном не читается людьми. Если вы декодируете эту строку, вы можете посмотреть на нее побайтно. Я покажу вам первые несколько байтов вашего примера, пытаясь объяснить, что они означают:

00000000 00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 25 |....ssh-rsa....%|
00000010 00 00 01 00 7f 9c 09 8e 8d 39 9e cc d5 03 29 8b |........9....).|
00000020 c4 78 84 5f d9 89 f0 33 df ee 50 6d 5d d0 16 2c |.x._...3..Pm]..,|
  • Первые четыре байта 0x00 0x00 0x00 0x07 указывают, что следующий поле, которое вы должны прочитать, имеет длину семь байтов
  • тогда у вас есть следующие семь байтов: 0x73, 0x73, .... 0x61, которые переводятся как «ssh-rsa».
  • следующие четыре байта — 0x00 0x00 0x00 0x01, что указывает на то, что следующий байт описывает ваш общедоступный показатель
  • тогда у вас есть 0x25, который является вашим общедоступным показателем
  • следующие четыре байта — 0x00 0x00 0x01 0x00, что указывает на то, что ваш общедоступный модуль имеет длину 0x0100 байт (что соответствует 256 байтам, что соответствует 2048 битам)
  • и тогда у вас есть свой публичный модуль

Таким образом, вы знаете, что в этом случае ваш модуль открытого ключа составляет 2048 бит. Обратите внимание, что ключи RSA могут различаться по размеру. Для получения дополнительной информации вы, вероятно, можете взглянуть на это страница, которая описывает структуру ключей RSA и, возможно, википедия страница RSA в целом.

MeBadMaths avatar
флаг in
Я думал, что открытый ключ RSA выглядит совершенно чуждым мне. Спасибо за прояснение этого и за две ссылки. Первую я не читал, сейчас посмотрю. Вы ответили на несколько моих первоначальных вопросов, которые я очень ценю. Вы сказали, что это 256 байт — значит ли это, что если бы я сохранил этот открытый ключ, скажем, в текстовом документе, размер файла был бы 256 байт?
Maarten Bodewes avatar
флаг in
Нет, «размер» ключа RSA определяется только модулем битового размера. Открытый ключ может быть закодирован множеством различных способов, но, как правило, открытый показатель также сохраняется, поэтому в этом случае размер будет больше 256 байт. Другими словами: размер **закодированного** ключа зависит от размера ключа, метаданных, хранящихся в этом ключе, и типа используемой кодировки.
MeBadMaths avatar
флаг in
Итак, пример, который я привел, был закодированным ключом? Следовательно, он будет больше, потому что кодировка добавляет дополнительную информацию, которую необходимо хранить? Я думаю, это имеет смысл, спасибо!
MeBadMaths avatar
флаг in
Таким образом, для определения размера байтов открытого ключа RSA, который я предоставил, требуются детали, которые закодированы, а также детали самого процесса кодирования. Следовательно, его нельзя перенести на другие открытые ключи для других систем. Я предполагаю, что выработка размера открытых ключей не одинакова для всех открытых ключей? Поэтому у меня большой вопрос: каков размер открытого ключа, соответствующего наборам в моем посте? Это моя главная цель, и я, вероятно, был немного наивен в отношении того, насколько это будет легко, ха-ха. Спасибо за ответы!
BlueRaja - Danny Pflughoeft avatar
флаг cn
@MeBadMaths: кодировка base64 также немного увеличивает размер. Каждый символ в вставленной строке занимает 8 бит для хранения _(возможно больше, в зависимости от кодировки символов!)_, но он представляет только одно из значений 64 = 2^6 = "6 бит". Так зачем использовать base64, если это так расточительно? Это сделано потому, что необработанный ключ будет выглядеть как набор тарабарских символов в текстовом редакторе и не будет корректно копироваться и вставляться, в то время как его представление base64 может.
MeBadMaths avatar
флаг in
@BlueRaja-DannyPflughoeft Это проясняет ситуацию. Таким образом, каждый символ соответствует 6-битной памяти, начиная с base64. Он хранится как 8 бит, теряя 2 бита. Итак, скажем, мой открытый ключ состоял из двух групп чисел; $\{0,1,6,7\}$ и $\{0,2,4\}$. Превращая их в двоичные файлы, а затем в base64, я думаю, что наборы превращаются в AAEGBw= (Может быть, неправильно с заполнением) и AAIE. Каждый символ 8-бит = 1 байт (2 бита тратится впустую), поэтому общий размер составляет 7 байт и 4 байта соответственно. Это правильно? Возможно, я не учитывал символ { }, поэтому просто числовые значения

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.