2010-05-13 102 views
2

概述: 我試圖設計一個應用程序,將加密文件安全發送通過蝸牛郵件(大型數據集)。我打算使用.Net的AES/RijndaelManaged加密來初始化文件,使用RNGCryptoServiceProvider隨機生成的密鑰進行加密。然後我用RSA公鑰對這個隨機AES密鑰進行加密。數據的接收者是唯一具有RSA私鑰解密的數據。使用AES加密文件,使用RSA加密密鑰 - 我在正確的軌道上嗎?

我的問題:這是做這種事情的正確方法嗎?如果是這樣,發送這個RSA加密密鑰與數據是否安全,因爲它需要私鑰解密?

編輯 - 根據答案,這確實是正確的路要走。

編輯 - 謝謝你的回覆。現在我真正想知道的是:
當最終用戶生成他們的公鑰/私鑰對時,保存私鑰的最佳方式是什麼?我不希望它只能從一臺機器訪問,所以我試圖避免使用用戶的密鑰存儲。但MSDN表示將密鑰保存到文件並不安全,那麼您還能如何實現這一目標?

+0

聽起來不錯。增加大文件的速度,並且您還可以支持多個收件人,方法是多次包含您的AES密鑰,並使用不同的RSA密鑰加密。 – Thorarin 2010-05-13 18:48:49

+0

你對RSA公鑰使用什麼來加密你提到的RSA密鑰?我假設你正在使用RSA CBC模式? – JM4 2010-12-09 15:46:44

回答

3

使用PGP除非有充分的理由不這樣做。 PGP是電子郵件中常用的混合加密標準的開放和無處不在的標準。 PGP有許多實現。我知道的唯一一個.NET是BouncyCastle crypto project's C# library。 PGP實際上提供了您描述的功能的超集;例如,PGP也可以對消息進行數字簽名。

關於私鑰存儲。典型的解決方案是在將密鑰寫入磁盤之前對稱地加密私鑰。只有私鑰的真正所有者知道密碼的祕密,並且他們不會告訴任何人。這樣,即使攻擊者獲得私鑰文件,他們仍然不得不妥協祕密或強制對稱密碼。我所知道的所有PGP實現都是這樣做的。

請不要重新實現PGP,如果它做你想做的。 PGP得到了廣泛的支持。此外,像我這樣的凡人(大概是你自己)幾乎沒有機會讓一切正常。

+0

+1,用於推薦PGP而不是重新開始。 – 2010-05-13 19:08:55

+0

謝謝,我會看看我是否能夠使用PGP。當我想在這裏使用預先存在的工具時,我通常遇到了障礙,他們喜歡在家中做所有事情。 :( – 2010-05-13 19:17:13

+0

密碼學應該永遠不會在室內完成,除非你的房子充滿了世界級的密碼學家和數學家 – 2010-05-24 20:09:44

3

至於你的第一部分,這絕對是它的方式。它被稱爲hybrid cryptosystem

+0

謝謝,知道它的名字將肯定有助於我的研究! – 2010-05-13 18:48:41

2

這實質上是SSL所做的。 RSA用於對稱會話密鑰(如AES)的認證和密鑰交換,然後用於通信主體。

0

保存私鑰的傳統方法(在GPG/PGP/PKCS#1/PKCS#8中使用)是使用強密碼短密碼保護並將其保存在文件中。大多數密鑰庫管理工具都可以使用PKCS#1/PKCS#8格式導出密鑰 - 您可以在一臺機器上生成密鑰,使用密碼導出密鑰並將其導入另一臺機器;密鑰僅在密鑰庫之外以便在機器之間傳輸。