Во-первых, вы сами не назначаете фактическое значение bn-> d; BN_*
подпрограммы делают это и переделывают / изменяют это по мере необходимости для вас. Для не устаревших версий OpenSSL эти структуры (и почти все остальные) непрозрачны, и вы не можете получить к ним прямой доступ вообще, хотя я могу понять, что хочу знать о них.
Для криптографических c алгоритмов, которые используют числа (а не просто битовые узоры) числа, которые вы используете, зависят от алгоритма. Для RSA см. статью в Википедии , и если ссылка PKCS1 на RSA Labs больше не работает (после EM C и Dell), используйте вместо этого стабильные дубликаты IETF RFC 2313, 2437, 4347, 8047. Существуют другие стандарты для RSA от ANSI / X9 и ISO, но они используются реже и существенно не отличаются. Для DSA см. снова Википедия и (бесплатно) FIPS. Для ECDSA вы можете увидеть платный X9.62 или бесплатный SEC1 от SECG , но на самом деле это просто простая адаптация DSA к (большому) классу эллиптических кривых Вейерштрасса c. Как для DSA, так и для ECDSA значения, которые появляются в сигнатурах, вычисляются, а не выбираются, хотя на них влияет одноразовый номер k для операции, который может быть и обычно выбирается случайным образом, равномерно в [1, n-1] где n - порядок подгрупп (размер). Обратите внимание, что для «простых» кривых, наиболее часто используемых с ECDSA, таких как P-256 и P-384, кривая была разработана таким образом, чтобы порядок подгруппы был равен порядку кривой, который, в свою очередь, близок, но не совпадает с модулем основное простое поле. Однако это свойство этих конкретных кривых, а не ECDSA или E CC в целом.
На практике ключи для всех алгоритмов следует генерировать (в OpenSSL), вызывая соответствующие функции генерации ключей. либо напрямую, либо с помощью EVP_PKEY_*
API, либо импортированные из какого-либо другого программного обеспечения или системы, которые сгенерировали их с помощью правильно реализованного процесса. Аналогичным образом подписи следует создавать, вызывая функции для подписи напрямую или через EVP
, или получать от чего-то другого, что создавало их правильно. Весь код OpenSSL бесплатен (и речь, и пиво), так что вы можете посмотреть на него и посмотреть, что он делает; некоторые люди (включая меня) считают полезным хотя бы иногда скомпилировать такой код в системе с хорошим отладчиком на уровне исходного кода и просмотреть его, чтобы посмотреть, что он делает.
Стандартное предупреждение: если вы просто хотите поиграйтесь с крипто, или с конкретной реализацией, такой как OpenSSL, вырубитесь. Если вы собираетесь писать программное обеспечение, предназначенное для обеспечения безопасности, НЕ делайте это путем догадок или проб и ошибок; либо использовать (существующее) программное обеспечение, написанное людьми, которые знают, что они делают, либо нанимать или консультировать таких людей. Это очень простое в написании «защитное» программное обеспечение, которое, кажется, работает и проходит тестирование, но на самом деле небезопасно, и люди, которые (в отличие от вас) действительно понимают предмет и знают, как найти эти fl aws будут врагами ваших или ваших пользователей.