2011-11-04 104 views
2

我們已經有了一個使用Crypto ++庫的ECC部分的C++解決方案,但不得不轉向.NET解決方案。由於微軟ECC代碼的最小文檔數量很少,我目前正在嘗試使用稍微少一些的Bouncy Castle庫(至少有源代碼可用)。我有BC加密和解密工作正常;對已經用Crypto ++加密的數據進行解密證明會有些問題。Bouncy Castle,Crypto ++,橢圓曲線加密(ECC),未能解碼

我最近的問題是,當我嘗試解密一個字符串時,我得到一個「IMac代碼失敗等於」異常。 BC是否將某種類型的MAC添加到密文中?任何人都知道這可能是什麼原因造成的?

感謝, 帕特里克

+1

你怎麼能問這樣的問題,並提供絕對零代碼?你可以在IESEngine類中得到這個異常,所以顯然你使用ECIES。是的,IES確實計算了一個MAC。您的Crypto ++代碼是否使用IES? –

+0

我在問有關充氣城堡的功能,而不是我的代碼功能......感謝有關IES的提示,這就是我需要知道的:) – Patrick

+0

您是否使用它?你應該發佈工作ECIES代碼來在這個問題上完整的循環:) – DeepSpace101

回答

3

我最新的問題是,當我嘗試解密字符串,我得到一個「IMAC碼未能平等」的例外。

此消息似乎並不爲當前BC發行版的一部分:

$ cd bouncy-castle-153 
$ grep -IR "IMac codes failed to equal" * 
$ 

它似乎是一個人的GitHub上的一部分;見PassKit IesEngine.cs

它可能是過去BC發行的一部分。


不BC添加某種MAC到密文?

名稱IesEngine.cs告訴我一個Integrated Encryption Scheme。他們不是很有名,而且經常沒有使用,但他們很好的好計劃。它們將很多原始碼合併爲一個,這使得正確使用和使用不當都很困難。更技術性地說,這是一個強大的安全概念。

我知道有兩種類型的方案。第一個是整數的IES,第二個是橢圓曲線上的IES。整數之一也被稱爲Discrete Logarithm Integrated Encryption Scheme,而橢圓曲線上的那個通常被稱爲Elliptic Curve Integrated Encryption Scheme。像Crypto ++和Bouncy Castle這樣的圖書館提供了這兩種功能。

爲了回到你的問題,集成加密方案提供的一件事是密文上的MAC。


任何一個知道這可能是導致此?

不幸的是,有很多事情可能導致這種情況。由於每個委員會都在調整計劃,因此大多數IES都不兼容。更糟糕的是,我從來沒有見過發佈一套測試向量。你必須努力讓事情互操作。

在Crypto ++和Bouncy Castle的情況下,每個人都遭受了輕微的bug,因爲沒有測試向量,所以每個人都做了一些不同的事情。這意味着ECIES計劃沒有良好的互操作性(或者更準確地說,)。您可以在Crypto ++ wiki上的Bouncy Castle Patch上閱讀有關詳細信息。

向前移動,Crypto ++ 5.7 開箱即用Bouncy Castle 1.54進行互操作。未來,BC所需的課程將記錄在Crypto++ wikiCrypto++ manual

0

請注意,上述的Crypto ++ 5.6.3彈性城堡補丁只適用於1.53之前的充氣城堡版本。

對於較新的版本,您可以調整Crypto ++修補程序以允許使用8字節Mac,也可以使用Java端的OldECIES類來實現互操作性。