0

我是相當新的,在橢圓曲線密碼領域沒有經驗。經過一些研究,我已經確定不像傳統的DHE,ECDHE參數不應該生成,而是從預定義的曲線列表中選擇(例子包括'P-521','prime192v3')。ECDHE安全與充氣城堡

雖然創建一個基於網絡的安全敏感應用程序是更好的(甚至邏輯)在運行時隨機選擇不同的曲線vs使用單一的硬編碼曲線?

另外,是否有這樣的概念更強更弱曲線之間的所有曲線可供選擇?

到目前爲止,這是我的代碼,以啓動ECDH交換:

//For readability purposes exception checking code not shown, all code is properly exception-handled 
SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG", "SUN"); 

X9ECParameters curve = ECNamedCurveTable.getByName("prime192v3"); 

ECDomainParameters domain = new ECDomainParameters(curve.getCurve(), curve.getG(), curve.getN(), curve.getH(), curve.getSeed()); 
ECKeyGenerationParameters ecgen = new ECKeyGenerationParameters(domain, rnd); 

ECKeyPairGenerator kpgen = new ECKeyPairGenerator(); 

kpgen.init(ecgen); 

AsymmetricCipherKeyPair kp = kpgen.generateKeyPair(); 

這有什麼不對的,到目前爲止這個代碼?

+0

大多數問題更適合crypto.stackexchange.com。你至少應該在問題中加入一個通用的標記,例如密碼術,這個標籤會被置於雷達之下。 –

回答

1

使用ECC加密技術,創建域參數需要很長時間。檢查域參數的安全性也很困難,例如Daniel J Bernstein和Tanja lange的研究。生成自己的曲線可以完成,但可能不是實時的。此外,安全性可能比預先定義的安全性要低,並且稍後您可能會遇到兼容性問題。

曲線的大小顯然是重要的,儘管任何256位以上的應該提供足夠的安全性。它仍然是可能的 - 儘管不是很可能 - NIST曲線是使用可能削弱安全性的方案生成的。如果您擔心這一點,請從上述網站選擇一條曲線(例如BrainpoolP384r1曲線),或者選擇其中一條「學術」曲線。 F(p)曲線應該優於其他曲線。

儘管這不是代碼評論網站,但您提供的代碼似乎沒有任何特別的錯誤。

+0

關於預先定義的命名曲線,我應該堅持一個預定義的命名曲線,還是在運行時選擇一個預定義的曲線。從本質上講,「隨機化」所用曲線有什麼好處? (特定交易所使用的曲線將在交易前以明文形式轉移給第二方,以便雙方使用相同的曲線) – initramfs

+0

@CPUTerminator不會給您帶來任何好處。事實上,如果其中任何一個被證明是軟弱的,你會遇到問題。 –

+0

好吧。感謝您的信息! – initramfs