Как мне объединить n и e для создания открытого ключа в RSA? - PullRequest
3 голосов
/ 29 августа 2009

У меня 128-байтовый (1024-битный) модуль (в формате байтового массива) и мой показатель степени (также в формате байтового массива). Мне нужно создать 128-байтовый массив, представляющий открытый ключ.

Согласно Википедии, «открытый ключ состоит из модуля n и открытого (или шифрующего) показателя e». Но это не говорит мне, как смешать оба.

Какую операцию нужно сделать?
- n ^ e (это останется длиной 128 байт?)
- просто n?
- n, за которым следует e?
- n добавлено к e?
- что-то другое?

Ответы [ 3 ]

3 голосов
/ 29 августа 2009

Существует много различных форматов для представления открытых ключей RSA. Одним из наиболее распространенных является PKCS # 1. В RFC 3447 определение формата открытого ключа задается как

  RSAPublicKey ::= SEQUENCE {
      modulus           INTEGER,  -- n
      publicExponent    INTEGER   -- e
  }

Чтобы представить ключ в этом формате, необходимо применить кодировку DER ASN.1 к этой структуре данных.

Другой выбор - SubjectPublicKeyInfo, из RFC 3280:

  SubjectPublicKeyInfo  ::=  SEQUENCE  {
     algorithm            AlgorithmIdentifier,
     subjectPublicKey     BIT STRING  
  }

Для RSA алгоритм должен быть 1.2.840.113549.1.1.1 .

Существует несколько других форматов, например те, которые используются для SSL.

2 голосов
/ 29 августа 2009

«N с последующим e», вероятно, наиболее близко к тому, что вы хотите Но если вы намереваетесь взаимодействовать с какой-либо другой системой на основе RSA, вам следует обратиться к документации этой системы, чтобы узнать, как они ожидают, что открытые ключи будут отформатированы.

2 голосов
/ 29 августа 2009

Вы не сможете создать такой массив. «Открытый ключ» состоит из двух частей: экспоненты и модуля. Это отдельные номера, которые должны храниться отдельно, так как оба они необходимы для последующего шифрования и дешифрования. Хотя ваш n равен 1024 битам, открытый ключ в целом обязательно длиннее.

...