استفاده از کلید خصوصی RSA به عنوان کلید AES برای رمزگذاری

برنامه کاربردی مورد نیاز:
یک برنامه اطلاعات را از سرویس وب پایین می آورد و نیاز به رمزگذاری و حفظ این داده ها به صورت محلی به دیسک است. فقط این برنامه باید قادر به رمزگشایی اطلاعات ذخیره شده در محلی باشد. این برنامه به عنوان یک سرویس ویندوز نصب شده است و هیچ ارتباط مستقیمی با کاربران ندارد.

فرآیند رمزگذاری:

  1. برنامه نصب شده است و کلید های RSA را با استفاده از System.Security.Cryptography.RSACryptoServiceProvider
  2. کلید RSA به یک کانتینر اصلی با نام ظرف مشخص شده توسط برنامه ادامه می یابد
  3. در زمان بعد، برنامه کلید های RSA را با استفاده از RSACryptoServiceProvider بازیابی می کند و از 32 بایت اول پارامتر D استفاده می کند کلید AesCryptoServiceProvider برای رمزگذاری اطلاعات روی دیسک استفاده می شود. AES IV به طور تصادفی توسط AesCryptoServiceProvider برای هر رویداد رمزگذاری تولید شده است.
  4. AES IV که در مرحله 3 استفاده شده است به عنوان متن ciphertext اضافه شده است، همانطور که در اینجا ذکر شده است و چند مکان دیگر که این عمل عادی است.

فرآیند رمزگشایی:

  1. AES IV از 16 بایت اولیه متن ciphertext بدست می آید. باقی مانده از متن cipher به مرحله 2 ارسال می شود.

  2. این برنامه کلید های RSA را با استفاده از RSACryptoServiceProvider بازیابی می کند و از 32 بایت اول پارامتر D به عنوان کلید AesCryptoServiceProvider برای رمزگشایی داده ها از دیسک استفاده می شود.

کانت اصلی به این صورت استفاده می شود، عمدتا به این دلیل که روش ها برای ذخیره کلید های نامتقارن به راحتی همانطور که در صفحه کانتینر اصلی مشخص شده است ارائه می شوند. هدف این است که به صورت دوره ای برنامه را تولید کلید های RSA جدید و جایگزینی آنچه که در کانتینر کلیدی ذخیره شده است؛ در نتیجه چرخاندن کلید AES مورد استفاده برای رمزگذاری / رمزگشایی. من می توانم برخی از نمونه های کد را ارائه دهم اما در حال حاضر می خواهم پرسش های اساسی را از اینجا دریافت کنم. [1965،9002] سوالات:

  1. روش فوق بهتر یا بدتر از برنامه با استفاده از کلاس ProtectedData موجود در دات نت است که ساده می شود مدیریت کلید؟
  2. آیا برای استفاده از RSA برای رمزگذاری یک کلید متقارن رمزنگاری / رمزگشایی وجود دارد؟ کجا کلید های متقارن کد گذاری شده را ذخیره کنید؟ این لایه اضافه شده غیر ضروری است اگر کلید خصوصی RSA در ابتدای کابین کلیدی نا امن باشد.
  3. چگونه System.Security.Cryptography.CspParameters را هنگام انتقال به تنظیم کنید. RSACryptoServiceProvider به منظور محدود کردن دسترسی خصوصی به کلید خصوصی RSA فقط به این برنامه؟
  4. تمام ایده را از بین ببرید و با جایگزین کردن راه حل XYZ بروید؟

رمزنگاری – آیا AES آسان تر برای شکستن زمانی که ورودی کوچک است؟

می گویند شما فقط می خواهید یک شماره را رمزگذاری کنید. برای مثال، می گویند که تعداد می تواند هر دو برابر باشد . دوبرابر در C # و جاوا 8 بایت است.

اگر شما یک DNS را با استفاده از AES رمزگذاری کردید:

 var cypherText = AES.Encrypt (123d)؛ // 8 بایت

این را به اندازه کافی بی اهمیت می کند؟ اگر نه، حداقل به طور قابل توجهی سادهتر از crack cyphertext از ورودی بزرگتر است:

 var largeText = GetDeclarationOfIndependence ()؛ // 6760 کاراکتر ascii، بنابراین 6760 بایت
var cypherText = AES.Encrypt (largeText)؛

آیا هنگام استفاده از یک فضای کلیدی یکسان نیاز به PBKDF2 با AES دارید؟

اگر یک مقدار تصادفی محرمانه 128 بیتی دارید (یا 192 یا 256 بیت برای AES-192 یا AES-256)، بله، می توانید آن را به عنوان کلید AES بدون اجرای آن از طریق یک تابع مشتق کلید استفاده کنید. [19659002] با این حال، مثال شما ارائه شده شامل تصادفی بایت نیست ، شامل (احتمالا) کاراکتر تصادفی از یک فضای مشخصی با حداقل 56 حرف و احتمالا خیلی بیشتر از آن. یک بایت واقعا تصادفی، یکی از 256 ارزش را با احتمال برابر دارد، در حالی که یک بایت در این راز یکی از 56 ارزش (ish) با امیدوار بودن احتمال برابر است.

همچنین 128، 192 یا 256 بیت نیست. این در واقع 128 بایت است ، که به من نشان می دهد که ممکن است کسی به اندازه اندازه کلید آنها احتیاج نداشته باشد و آن را اشتباه ساخته است.

اگر شما سعی کنید از مخفی به طور مستقیم به عنوان کلید استفاده کنید، احتمالا یکی از سه چیزها اتفاق می افتد:

  • این نرم افزار در حال حاضر خود اشتقاق کلید خود را (لزوما یک اشتباه کلید کلیدی مانند PBKDF2 نیست، اما برخی از نوع مشتق کلید). از آنجا که کلید (امیدوارم) به طور قابل توجهی بیش از 128 بیت آنتروپی باشد، این خوب است.
  • این نرم افزار به شما هشدار می دهد که کلید طول صحیح و شکست نباشد.
  • این نرم افزار کلید شما را به صحیح طول و استفاده از آن. این ممکن است بسیار بد در برخی موارد، اما متاسفانه اتفاق می افتد.

AES – چگونه می توانم اندازه کد را بدانم

بنابراین من یک کدهای AES پیدا کردم و آنها را کامپایل کردم، پس از آن از دستور ls -l برای دانستن اندازه آن استفاده کردم.
این ها اندازه های من هستند

  pi @ raspberrypi: ~ / iot_c1 / iot_c1 $ ls -l
 مجموع 1620
 -rwxr-xr-x 1 pi pi 20012 Apr 11 08:55 a.out
 -rw-r - r-- 1 pi pi 27967 Apr 11 08:11 iot_aes.c
 -rw-r - r-- 1 pi pi 4100 Apr 11 08:11 iot_aes.h
 -rw-r - r-- 1 pi pi 1540388 Apr 11 08:55 iot_aes.h.gch
 -rwxr-xr-x 1 pi pi 38560 Apr 11 08:11 test
 -rw-r - r-- 1 pi pi 6896 Apr 11 08:11 test2.c
 -rw-r - r-- 1 pi pi 6858 Apr 11 08:55 test.c

pi @ raspberrypi: ~ / iot_c3 $ ls -l
کل 124
-rw-r - r-- 1 pi pi 11283 آوریل 11 07:19 iot_aes.c
-rw-r - r-- 1 pi pi 1165 Apr 11 07:25 iot_aes.h
-rwxr-xr-x 1 pi pi 25080 آوریل 11 07:20 t128
-rwxr-xr-x 1 pi PI 25140 Apr 11 07:24 t192
-rwxr-xr-x 1 pi pi 25216 Apr 11 07:25 t256
-rw-r - r-- 1 pi pi 578 Apr 11 07:27 t256.txt
-rw-r-r-- 1 pi pi 14554 Apr 11 07:19 test3.c
  1. اندازه در بایت است؟ اگر چنین است برای دستگاه IOT بزرگ نیست؟
  2. من قرار است فقط اندازه کد را در نظر بگیرم تا کدام فایل به نظر من فایل C کد یا فایل کامپایل شده را بگیرد؟
  3. بین اندازه کد و اندازه دستگاه متفاوت است

من میخواهم دادههایم را با کلید اشتراک AES رمزگذاری کنم

فرم من می خواهم که چندین فیلد را در فرم من رمز بگذارم تا رمز کلیدی مشترک AES رمزگذاری شود، لطفا به من کمک کنید

     کد اینجا است
نام: 
شناسه فروشنده:
شماره ارجاع:
شناسایی زیر فروشنده:
تعداد:
شماره تلفن همراه:
آدرس درخواست:
آدرس بازگشت:

paymode:

این فرم اینجا است که من میخواهم رمزگذاری شود، چند زمینه که آن
شماره مرجع:
شناسه زیر فروشنده:
میزان
هیچ موبایل:
آدرس بازگشت:
مقدار اختیاری:
paymode: