2012-07-23 118 views
2

我正在爲windows phone開發一個應用程序,需要一個1MB的字節隨機池來用作一次性pad加密的密鑰。 我打算先製作一個字節數組,然後用內置的RNGCryptoServiceProvider(應用程序由c#生成)生成的字節填充它。並使用加速計,相機,麥克風和觸摸等來源的信息。然後,我將這些信息與每個池中的位進行逐位比較。加密安全隨機數生成器

這是一種安全的方法還是有更好/更安全的方法?

+6

如果它是僞隨機的,它不是一次性的。你只是在構造一個惱人的使用流密碼。 – CodesInChaos 2012-07-23 20:51:00

+0

@CodesInChaos:**加速度計,相機,麥克風和觸摸**!=僞隨機。 – SLaks 2012-07-23 20:51:23

+3

你會用加密的字節做什麼?有人需要解密他們,而且有人需要你的一次性平板電腦。那麼你打算如何將它發送給接收器?也許你需要對它進行修改。嚴重的是:這個解決方案與關鍵一樣安全。 – 2012-07-23 20:52:22

回答

2

好吧,所以我們似乎有幾條評論,第1部分,這是安全的。現在問題2,是否有更安全的方法?

這個難題有三個部分:密鑰生成,密鑰分配和加密。

我強烈建議堅持嘗試真正的密鑰分配和加密方法,但是從採樣輸入設備向密鑰生成中添加熵只能提供幫助。

這裏的訣竅就是要使用哈希函數累積和「美白」該熵到密鑰中。例如,您可以從您提到的所有熵源中收集數據,使用SHA-256對其進行散列以將所有熵值打包到可管理的空間並隨機化,然後按照您以前的建議與RNGCryptoServiceProvider數據異或。

現在,您添加的野生熵已經使您的PRNG成爲真正的RNG。

隨着您收集更多熵,將原始散列與新數據進行散列,以便舊熵與新散列一起變得清晰。這樣,你最終會累積一個完整的哈希值的熵值。

雖然,搞清楚達到這個狀態需要多長時間是很困難的。

+0

感謝你的回答,你們中的一些人可能會發現這種冒犯,並認爲不聽取給我的建議,但那不是真的,我嘗試儘可能多地學習,但我只想更好地解釋上述評論中的一些陳述,所以就來了。你難過這個難題的三個重要組成部分。密鑰生成,密鑰分配和加密。如果我使用像您建議的密鑰生成和密鑰分發不在我的應用程序中沒有問題,爲什麼我可以使用aes作爲上面的註釋建議,而不是一個otp。 – 2012-07-24 17:59:16

+1

對於OTP,您必須以某種方式安全地獲取與接收者相比明文長或更長的墊。這並不比安全傳送明文更簡單,它只是讓您安排祕密部分何時發生。此外,整個鍵盤需要是隨機的 - 純熵,這對您的RNG非常苛刻。 AES,RC4等允許您傳輸一個可以用於大量數據的小密鑰。公鑰技術允許您公開交換或創建這些密鑰。 ...所有這些都取決於將受益於更多熵的RNG。 – tbroberg 2012-07-25 03:37:11