مدیریت کلید – چگونه برای ذخیره کلید RSA در نرم افزار؟

من در یک نرم افزار غیر حرفه ای کار می کنم که نیاز به تولید و ذخیره کلید های RSA (عمومی و خصوصی) دارد.

من دو تا از اینها را دارم:

  1. من فکر می کنم که دستگاه کاربر باید توسط کاربر خود من و سپس کلیدهای امن (که به نظر نمی رسد که خوب است)
  2. کلید RSA در نرم افزار من امن، اما من هیچ نظری ندارم که شیوه های خوب / خوب هستند

در البته تمایل دارند به راه حل شماره 2 بروید. با این حال، نمی دانم چگونه با خیال راحت بتوانم کلید خصوصی / عمومی را ذخیره کنم. آیا آنها برخی از شیوه های خوب هستند، اگر بله، آنها چه هستند؟
آیا آنها را در فایل ذخیره می کنم؟

ویرایش با توجه به نظرات:

کلید تولید شده برای رمزگذاری ارتباطات در سراسر اینترنت استفاده می شود. ارزش آنها این قدر بالا نیست که کاربر بتواند کلید های جدیدی را هر زمان که میخواهد تولید کند.

بررسی اولویت اعداد برای استفاده در RSA

RSA برای استفاده از اعداد اول تضمین شده است. در حقیقت، اگر اعداد اولیه نبودند، عملیات کلیدی RSA به سادگی کار نخواهد کرد (با احتمال بسیار زیاد). با این حال، ابزار خط فرمان OpenSSL توانایی بررسی اولیت یک عدد را با استفاده از تست Primality بودن میلر-رابین، الگوریتم تست استاندارد برای بررسی اولویت های بزرگ برای استفاده در رمزنگاری دارد.

 OpenSSL> first-generates-bits 256
315016830147073940139675761214468273143
OpenSSL> prime 315016830147073940139675761214468273143
ECFE08DCA281B26A5EDDE8DF7D2A33F7 نخست است
OpenSSL> 1000000000000 اول
9184E72A000 اصل نیست

مدیریت کلید – کدام فرمت یک کلید اختصاصی RSA رمزگشایی است، به ویژه در OS X Keychain؟

من سعی کردم یک کلید غیر قابل استخراج را از OS X Keychain استخراج کنم. من این ابزار را برای استخراج کلید استفاده کردم. این ابزار به من یک هشدار از کلید خصوصی را می دهد. یک کلید RSA 2048 بیت بعد از استخراج از طریق ابزار، 2441 بیت است.

مشکل این است که من نمیتوانم فرمت کلید را در آن قرار دهم تا آن را به PEM / DER یا هر فرمت استاندارد تبدیل کنم.
پس از استخراج، به نظر می رسد این است:

[+]  ضبط کلید خصوصی
 [-] نام چاپ: 
 [-]  برچسب
                                       
 [-]  کلاس کلید: CSSM_KEYCLASS_PRIVATE_KEY
 [-] خصوصی: 0
 [-] نوع کلید: CSSM_ALGID_RSA
 [-] اندازه کلید: 2048 بیت
 [-] اندازه کلی موثر: 2048 بیت
 [-] استخراج شده: 0
 [-] CSSM نوع: CSP CSP (فضای محلی)
 [-] نام کلید

 [-]  کلید خصوصی رمزگشایی شده

آیا کسی می داند که این کلید خصوصی رمزگشایی خصوصی است؟ و / یا نحوه تبدیل آن به قالب پشتیبانی شده با OpenSSL؟

رمزگذاری با استفاده از openssl با کلید rsa سفارشی

فایل زیر را ایجاد کردم

 asn1 = SEQUENCE: rsa_key

[rsa_key]
version = INTEGER: 0
modulus = INTEGER: 305512047893009
pubExp = INTEGER: 78221649299689
privExp = INTEGER: 181909
p = INTEGER: 17477423
q = INTEGER: 17480383
e1 = INTEGER: 181909
e2 = INTEGER: 181909
ضریب = INTEGER: 1611938

این فایل asn_format_mykey.txt

سپس من دستورات

 $ openssl asn1parse -genconf asn_format_mykey.txt -out key.der را اجرا میکنم
$ openssl rsa -inform در در key.der -outform pem> key.pem
$ openssl rsa -inform در در key.der -outform pem -pubout> pkey.pem

بنابراین ما key.pem (کلید خصوصی) و pkey.pem (کلید عمومی)

را دریافت کردیم، سپس، من سعی کردم یک پیام کوچک با استفاده از گزینه -raw با openssl rsautl

 $ echo 'aaaa' | openssl rsautl -encrypt -pubin -inkey pkey.pem -raw -out message.encrypted

و من

خطای خطای RSA 140063665198744: خطا: 0406B07A: rsa
  دستورات: RSA_padding_add_none: اطلاعات برای کلید بسیار کوچک است
  اندازه: rsa_none.c: 74:

هر گونه ایده چگونه به رفع این؟

حمله به RSA بدون اطلاع از هر کلید

همه حملات به RSA به نظر می رسد نیاز به دانش حداقل متن رمز و کلید عمومی

با این حال هرگز شواهدی از حمله وجود دارد که به سادگی با استفاده از تعداد زیادی از متن رمزنگاری برای محاسبه عمومی / خصوصی کلید، و اگر چنین است توصیه می شود راه حل برای کاهش این؟