支持IDEA的GnuPG

时间:2016-02-24 18:42:08

标签: encryption command-line gnupg

我正在尝试将对IDEA密码的支持“集成”到我当前的系统中,该系统使用GnuPG命令行界面来加密/解密我公司与合作伙伴之间发送的数据文件。我已经阅读了我可以通过各种方式在线找到的所有说明,并且我仍然无法正确加载IDEA密码。

首先,我的配置:我使用的是Windows 7(64位)Professional和GnuPG 2.0.17。 --version列出如下:

gpg (GnuPG) 2.0.17 (Gpg4win 2.1.0)
libgcrypt 1.4.6
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/<username>/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
        CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

命令行可执行文件实际上位于网络共享( \\<SERVERNAME>\<ShareName>\GnuPG\gpg.exe )上,这通常适用于我必须加密/解密的所有内容 EXCEPT < / em> 当我遇到使用IDEA密码加密的文件时。尝试时收到以下消息:

gpg: cipher algorithm 1 (IDEA) is unknown or disabled
gpg: encrypted with 2048-bit ELG key, ID C4186BB7, created 2003-05-14
      "<keyname@domain.com>"
gpg: public key decryption failed: Invalid cipher algorithm
gpg: decryption failed: No secret key

所以,我开始谷歌搜索我能找到的一切。我已经下载了 idea.dll 库(在挖掘了各种垃圾后试图找到它)​​并按照说明将其放在\\<SERVERNAME>\<ShareName>\GnuPG\lib目录中。

我能找到的大多数资源都谈到将行load-extension lib\idea添加到位于 gpg.conf 中的 C:/Users/<username>/AppData/Roaming/gnupg 文件中。这不起作用,因为我仍然得到--version命令的相同结果(支持的算法中没有列出IDEA密码)。我也试过明确地使用库的完整路径而不仅仅是这样的“快捷方式”:load-extension "\\<SERVERNAME>\<ShareName>\GnuPG\lib\idea.dll",但没有运气。

另一个建议是将load-extension开关添加到实际的命令行中,如下所示:

\\<SERVERNAME>\<ShareName>\GnuPG\gpg.exe --load-extension idea

我也试过了这个选项的多种变体,包括使用完整的文件名,完整的路径和文件名等,但我仍然无法加载IDEA密码。我已尝试将 idea.dll 放入GnuPG主目录( C:/Users/<username>/AppData/Roaming/gnupg )并尝试让GnuPG从该位置加载GnuPG与上面列出的建议相同。

我所拥有的 idea.dll 文件没有在“属性”对话框中列出任何版本信息,但它的修改日期列为2002年9月20日。对我可能有的任何建议被忽视了?

编辑1:我最终希望通过命令行停止加密/解密并迁移我的应用程序以使用BouncyCastle API,因为我相信IDEA密码是“内置的” - 在那边。但不幸的是,我遇到了问题(请参阅我的SO question on the problems I'm facing with BouncyCastle)。

编辑2:另外需要注意的是,我上面所做的所有测试都来自一个基本的(提升的)命令提示符 - 完全超出了我的实际应用程序 - 所以我可以消除这是问题的潜在原因。

1 个答案:

答案 0 :(得分:1)

所以,我一直在挖掘,甚至在Spiceworks社区网站上交叉发布我的问题。我找到的一件事 - 但基本上被忽略了,因为我当时没有看到相关性 - 是thread in the GnuPG mailing list。然而,Spiceworks上的其他用户之一再次向我指出,所以我给了它另一个阅读。我基本上将我在该网站上发布的内容重新发布给任何可能遇到此问题的人参考。

Werner Koch在邮件列表的消息中说道:

  

不。 GnuPG-2不支持加载扩展。该选项是虚拟选项。原因是加密操作是由Libgcrypt完成的,而不是由gpg.exe完成的。

     

Libgcrypt的下一个版本将支持IDEA,因此GnuPG 2.1将能够直接解密旧的(即PGP 2)文件。但是,使用IDEA并不是一个好主意,我们的年龄算法要好得多。

......提问的人的回答是:

  

当我必须使用“idea.dll”以便我可以解密消息时   用它加密的,我然后使用Gpg 1.4.x,我有它   与Gpg的真实安装完全独立的文件夹   2.0.x的关于它相对较差的算法,我不能同意你的意见,但这并不排除我需要它   不时。

     

我有什么理由不把它放在与...相同的文件夹中   gpg.exe版本1.4.x然后在那里引用它?感谢。

基于这些评论,我认为,因为我正在使用GnuPG v2.0.17,所以我可能需要尝试找到我可以使用的旧版本的GnuPG(来自1.4.x系列)。我找到并下载了1.4.20的源代码,下载了MnGW / MSYS并尝试编译它。不幸的是,我在编译时遇到了问题,并且错误在这个过程中不断涌现。

然后,我恰好正在查看Windows资源管理器窗口以检查我正在使用的某些文件的路径,并且我注意到另一个包含 gpg.exe 的目录文件。我启动了一个命令提示符,并试图对它进行--version检查,我得到了这个:

gpg (GnuPG) 1.4.9
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/<username>/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
**gpg: LoadLibrary failed: The system cannot find the file specified.

gpg: invalid module `c:\\lib\\gnupg\lib/idea': The specified module could not be
 found.**

Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

HOLY CRAP! 它的版本是 1.4.9 ,而这次它实际上似乎至少是 TRYING 加载IDEA库!

所以,我再次尝试,但这次我使用了--load-extension开关:

C:\gnu\gnupg\gpg --load-extension C:\GnuPG\lib\idea.dll --version
gpg (GnuPG) 1.4.9
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/<username>/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: **IDEA**, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

再次拥抱! 这次是IDEA密码!

所以,现在来了真正的测试 - 我尝试使用这个旧的可执行文件解密文件的命令行:

C:\GNU\GnuPG\gpg.exe --load-extension C:\GnuPG\lib\idea.dll --batch --passphrase <password> --output "C:\Testing\decrypted.txt" --decrypt "C:\Testing\encrypted.pgp"

现在执行此操作会给我以下输出:

gpg: WARNING: cipher algorithm IDEA not found in recipient preferences
gpg: encrypted with 2048-bit ELG-E key, ID C4186BB7, created 2003-05-14
      "<keyname@domain.com>"

我看了,确实,解密文件 就在那里! 即使我收到有关IDEA密码算法的警告,它仍然正常解密文件,并且把它完全按照预期推出!

我想这里的答案是你不能使用GnuPG v2.0.x来解密使用IDEA密码加密的文件。您似乎必须退回到以前版本的GnuPG才能加载库。谢谢你的帮助。我想我现在终于可以组建一个有效的命令行解决方案了。也许有一天我真的会完成BouncyCastle API实现的工作,但是现在我很高兴让这件事工作。 (做我快乐的舞蹈

编辑:因此,对于我的“最终”(但绝对不是完美的)解决方案,我的应用程序试图通过2.0版本解密文件,然后,如果失败(解密文件不存在),尝试使用加载了IDEA密码的1.4版本解密。到目前为止,通过我的所有测试,似乎这完全符合预期,我的IDEA加密文件正常解密。我应该构建一些实际上从命令行读取标准输出的东西,以确定是否要再次尝试使用1.4,但这看起来它可以用于我的目的,直到我能找出BouncyCastle。