2016-08-12 35 views
3

我正在創建安全隨機生成256位密鑰的Android應用程序。我還希望用戶可以選擇在屏幕上點擊/拖動隨機數字生成器(類似於TrueCrypt如何生成密鑰)來生成隨機字節。它看起來像SecureRandom是我最好的選擇,但我無法理解setSeed(byte[])方法。從Android中的用戶觸摸事件播種SecureRandom

下面是文檔:

重新提供此隨機對象。給定的種子補充而不是替代現有的種子。因此,保證重複呼叫絕不會降低隨機性。

我打算對用戶的觸摸事件的X和Y座標進行散列,然後將散列中的字節反覆送入setSeed

我的問題是,隨後對setSeed的調用是否會加強現有的「隨機性」,還是會或多或少無用?還是有更好的方法來實現這一點,我完全失蹤了?

回答

1

是的,「或多或少無用」。

docs

「傳遞給SecureRandom對象的任何種子材料必須是不可預知的」,鼠標移動很可能不符合該標準。

一般CPRNGs不斷添加從設備上的事件播種,你不會做得更好。

同樣來自docs

void setSeed (long seed)
重新種植該隨機對象,使用包含在給定長的種子八個字節。給定的種子補充而不是替代現有的種子。因此,保證重複呼叫絕不會降低隨機性。

因此,繼續前進,您不會有任何傷害,但是您是否會改善任何內容仍然值得懷疑。

+0

安全漏洞涉及SecureRandom(4.2之前)。在這樣的設備上添加額外的種子可能會有幫助,但通常使用'PRNGFixes'就足夠了。 – Robert

+0

@Robert請提供漏洞信息的鏈接。 – zaph

+0

我明白了,非常感謝 –