الحاويات الرئيسية، آمنة بما فيه الكفاية لتخزين المفاتيح الخاصة؟

StackOverflow https://stackoverflow.com/questions/1243259

  •  12-09-2019
  •  | 
  •  

سؤال

كنت أقرأ عن الحاويات الرئيسية في .NET كمكان آمن لتخزين مفتاح خاص للتشفير غير المتماثل والتوقيع الرقمي.

سؤالي هو كم هو آمن الحاوية الرئيسية؟ لأنني اكتشفت إذا كنت أعرف اسم الحاوية الرئيسية، فسأتمكن من استرداد المفتاح الخاص باستخدام ما يلي:

// Create the CspParameters object and set the key container 
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;

// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

// Display the key information to the console.
Console.WriteLine("Key retrieved from container : \n {0}", rsa.ToXmlString(true));

هي حاويات رئيسية مكان آمن لتخزين المفاتيح الخاصة؟

هل كانت مفيدة؟

المحلول

هذا يعتمد حقا على الاحتياجات الخاصة بك.

يعد KeyStore وراء rsacryptoserviceProvider هو حقا متجر المفتاح Cryptoapi. يتم تخزين المفاتيح هنا على نظام الملفات المحمي بموجب بيانات اعتماد المستخدم (إذا كنت تستخدم مخزن المستخدم) أو بيانات اعتماد الجهاز (إذا كنت تستخدم متجر الجهاز). هذا يعني أن المهاجم الذي يمكن الوصول إليه إلى بيانات الاعتماد المناسبة سيكون قادرا على استخراج المفتاح الخاص.

سيكون هذا صحيحا بالنسبة لجميع تطبيقات التشفير التي لا تخزن المفتاح في وحدة ذكية وأمن الأجهزة، رقاقة TPM إلخ.

للحماية من مهاجم أقل قدرة، يمنحك Cryptoapi، وبالتالي RSICryptoserviceProvider إمكانية تحديد المفتاح غير قابل للتصدير. هذا يعني أن Cryptoapi / .NET سترفض إجراء تصدير المفاتيح الخاص لك (ولكن المهاجم ذو المعرفة ستظل قادرا على العمل حول هذا). للقيام بذلك، توليد المفتاح مع CspProviderFlags.UseNonExportableKey.

تستطيع ايضا استخذام CspProviderFlags.UseUserProtectedKey والتي ستطلب من المستخدم عن تأكيد كلمة مرور إضافية وكلمة مرور إضافية عند استخدام المفتاح الخاص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top