2016-02-24 2 views
0

Я пытаюсь «интегрировать» поддержку кода IDEA в свою текущую систему, которая использует интерфейс командной строки 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), который обычно работает отлично за все, что есть для шифрования/дешифрования КРОМЕ, когда я запускать файлы, зашифрованные с использованием кода IDEA. При попытке получить следующее сообщение:

gpg: cipher algorithm 1 (IDEA) is unknown or disabled 
gpg: encrypted with 2048-bit ELG key, ID C4186BB7, created 2003-05-14 
     "<[email protected]>" 
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 Home (C:/Users/<username>/AppData/Roaming/gnupg) и попытаться загрузить GnuPG из этого места со всеми теми же предложениями, как указано выше.

idea.dll файл У меня нет никакой информации о версии, перечисленные в диалоговом окне Свойства, но это дата модификации указана как 20 сентября 2002 года Любые предложения о чем-то я, возможно, упускать из виду здесь?

EDIT 1: я в конце концов хотел бы отойти от этого моего шифрования/дешифрования с помощью командной строки и перенести мое приложение для использования API BouncyCastle, как я считаю, что шифр IDEA является «встроенным» над там. Однако, к сожалению, у меня проблемы с работой (см. Мой SO question on the problems I'm facing with BouncyCastle).

EDIT 2: Еще одна вещь, которую следует отметить, состоит в том, что все те тесты, которые я сделал выше, были выполнены из основной (повышенной) командной строки - полностью вне моего фактического приложения - так что я могу устранить это как потенциальная причина проблемы.

+0

Я не уверен в деталях, но возникла проблема с загрузкой файлов .dll из сетевого ресурса, который иногда можно предотвратить из соображений безопасности. [Я нашел сообщение в форуме с некоторым обсуждением] (http://communities.bentley.com/products/programming/microstation_programming/f/343173/t/91973) в кратком обзоре, но не уверен, действительно ли это проблема вы наблюдаете. Попытайтесь загрузить его из локальной папки, чтобы проверить проблему. –

+0

** @ JensErat - ** Спасибо за ссылку и за понимание. Как я уже говорил выше, я попытался переместить ** 'idea.dll' ** в каталог GnuPG Home на моем локальном компьютере и попытаться загрузить его оттуда без успеха. Основываясь на вашем комментарии, я даже попытался скопировать всю структуру каталога приложения в локальную папку (** 'C: \ GnuPG' **) и запустить все оттуда, но он по-прежнему не загрузит шифр IDEA. Я думал, что файл ** 'idea.dll' ** был« разблокирован »в диалоговом окне« Свойства », но это тоже не помогло. Это действительно расстраивает. –

+0

Из того, что я читал, вам, возможно, придется скомпилировать DLL-файл самостоятельно. Вы уверены, что это библиотека, скомпилированная для GnuPG, и для той же архитектуры, которую вы используете? Просто использование какого-либо произвольного скомпилированного кода, который вы нашли где-то для _trusted operations_, кажется очень плохой задачей. –

ответ

0

Итак, я продолжал копаться и даже перекрещивался с моим вопросом на сайте сообщества Spiceworks. Одна из вещей, которые я нашел - но в основном проигнорировал, поскольку я не видел актуальности в то время - был thread in the GnuPG mailing list. Тем не менее, один из других пользователей на Spiceworks снова указал мне на это, поэтому я прочитал еще раз. Я в основном пересказываю то, что я разместил на этом сайте, в качестве ссылки для всех, кто может столкнуться с этой проблемой.

Вот что сказал Вернер Кох в своем сообщении в этом списке рассылки:

Nope. 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 

СВЯТОГО дерьмо! Это версия 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 
     "<[email protected]>" 

Я посмотрел, и, конечно же, расшифрованный файл ЭТО ТАКОЕ! Несмотря на то, что я получил предупреждение об алгоритме шифрования IDEA, он по-прежнему расшифровывал файл в обычном режиме и выставлял его точно так, как ожидалось!

Я предполагаю, что ответ здесь заключается в том, что вы не можете использовать GnuPG v2.0.x для дешифрования файлов, зашифрованных с использованием кода IDEA вообще. Казалось бы, вам нужно вернуться к предыдущей версии GnuPG, чтобы даже загрузить библиотеку. Спасибо за вашу помощь. Думаю, я смогу, наконец, собрать совместное решение для командной строки. Возможно, однажды я закончу работу над реализацией BouncyCastle API, но пока я просто рад, что эта работа работает. (делает мой счастливого танец)

EDIT: Так, для моих «окончательных» (но, безусловно, не идеальных) решений, я получил мое приложение пытается расшифровать файл с помощью версии 2.0, а затем, если (файл дешифрован не существует), попробуйте расшифровать с использованием версии 1.4 с загруженным шифром IDEA. На протяжении всего моего тестирования, похоже, это работает точно так, как ожидалось, и мои файлы с зашифрованным IDEA дешифруются в обычном режиме. Я должен, вероятно, создать что-то, что на самом деле читает стандартный вывод из командной строки, чтобы определить, следует ли повторять попытку с помощью 1.4, но похоже, что это будет работать для моих целей, пока я не смогу найти BouncyCastle.

Смежные вопросы