2014-02-26 61 views
1

我試圖讓php-gpg庫工作; https://github.com/jasonhinkle/php-gpgphp-gpg(github存儲庫)使用1個子密鑰加密PGP消息,但不是2個子密鑰?

如果我嘗試使用具有2個子密鑰的PGP公鑰加密消息,我會得到以下兩個錯誤。

GPG:公鑰解密失敗:錯誤的密鑰使用GPG: 解密失敗:不可用

密鑰,但如果我刪除我的子項之一,並且只使用一個,它的工作原理。我怎樣才能使它與2個子鍵一起工作?

另外,一旦我解密使用具有1個子密鑰的PGP公鑰加密的消息,我會收到以下錯誤消息。

GPG的警告消息沒有被完整性保護

有誰有這個庫,以及如何解決這些問題的經驗? 作者不喜歡回答有關他自己的工作不幸的問題。

回答

1

我認爲Public_Key.php中存在一個錯誤,導致一些指紋以錯誤的方式計算。

您可能正在使用的文件屬於a revision from 2014-02-04的版本。該版本包含一項旨在解決使用新數據包格式(在RFC4880 section 4.2中定義)的密鑰的計算公鑰指紋問題的更改。

我調試此代碼的一個類似的問題,並發現當前的修復程序引入假設公鑰只包含一個鍵(並沒有子鍵)。使用包含一些子密鑰的公鑰文件,最後一個子密鑰將被返回,但帶有主密鑰的指紋。這會導致公鑰不正確,並且導致所有使用此損壞密鑰加密的數據都無法解密。

我相信,快速修復該版本是:

1)取消註釋線#143 - 使圖書館計算正確的指紋所有子項

2)更改行# 90來源:

if ($len > 191 && $len < 224) $len = (($len - 192) << 8) + ord($sa[$i++]); 

到:

if ($len > 191 && $len < 224) $len = (($len - 192) << 8) + ord($sa[$i++]) + 192; 

根據RFC4880 section 4.2.2.2

3)(可選)註釋掉行#134-140,因爲它們不會對結果產生任何影響。

我還沒有測試它如何影響ElGamal的按鍵,但是當我這樣做時我會嘗試將更改提交到官方存儲庫。

P.S.我不知道原作者,但維護者似乎回答了關於the php-pgp issues page的問題。