2015-12-11 2 views
3

Мне было поручено добавить систему, которая позволяет моей компании шифровать файлы, чтобы мы могли отправить их третьей стороне, и они могут выполнять некоторые операции над нашими данными. Третья сторона дала мне открытый ключ в этом формате,Как шифровать ключи OpenPGP с помощью C#?

-----BEGIN PGP PUBLIC KEY BLOCK----- 
Version: GnuPG v2.0.18 (Darwin) 

mQGiBFU1gfQRBACekfIt7mSynzBi0C2hIbvWM6mMh80ypw8NNvdCpOIfSwLVavej 
YIESXe5yLGzWUoTnHALa5JHLJ2C3faeDHRBikXRESycRHz0itz3L/mlyIPLo7T1n 
4zr2wUL+h0ZEmuhLeVBD+yLKzy68suEWXCcTkeh71vYG1r77RFJLtQHIfwCgu9DW 
uJC8IHzXMrspotFIb0XF/VsD/iqdfRgdu7CkvUflwQsT66CmZcyfkkZkWpHXZoov 
GP3ZCVKPfGEZqlThwuqgBCBbtsyZFSSmF8m5qjL/Dtz+t3/fxxTo1lXRr9P4f4Pl 
n3OYQh+iOs1Z+7nnAZ4mulU1eRPYUY21e+UwKi+hd1Qe1ADOaH/9JVS8nrodePCO 
qBFvBACXKEWpP937fZv1hGdqZ2OUM44RIf0PGbQwyG8a+DsksJgd0oY+sb5nTaB/ 
CgsEFgIDAQIeAQIXgAAKCRDEcHC8uF0CrVnTAJwLdvuBjv/Z8lySVZS7jInljU9y 
sACdEtxmspV/GH7EDY0KtIydy3Vn8/eIXgQQEQgABgUCVTWCPAAKCRArjD/JWo9s 
KvwNAP9CkZgMGn98wwMAixW5tIVA+J5kvdxnleg/wrR9xHsFYQD+KMraOkHSk10p 
1EckgFK6LTuVqMvUoK9Gvr8v0rrHucW5Ag0EVTWB9BAIAP12dtlu0EuQ4s78ZWhM 
cDJmpqot5FbMecPF20V5LsDFYbLGylEPPFFxNhwsc/l0Rlvg7auH2fcLSZf5hEp9 
NsBhgWD532CAim9bFYF1s2bbjlZ7jUQD/Dt+9j1d9YrgCkF2/9er7RyfYwsRlVDQ 
1nRCFLoQWLqisoILG65oloVtjNg6xftyLaLb6UuluW8dRM7q/9EvE0xPAX1ukc33 
iGDWeMUR0JHyuM1QiN4IhOHKjP6Oqy+lJWtgoCQmxPJ2+Qj6b34wtsfD9vh3xLef 
68ReXEOlfQ01tv6hQCrK/ZdvPLk38kVnwPOEJl/Hgj5eiVM3ioOlmBQoXKSpXyXI 
wMKnovOEqJ2btp39XNpjjcV80RZiAJyAhNz2EynZk15QhOnabo9gdsiaMpBZdSdc 
gDHowOXsWxzaVESs+SwJf/N2fa3j1UTDxCKkq5TOofvOfyPAYYASstmPw1v7xIcV 
zn2nkKfBk1EnFM5PfwQAfXKUTx6BrZmITwQYEQgADwUCVTWB9AIbDAUJAsfqAAAK 
CRDEcHC8uF0CrTI6AJ4oAZ2y4Pcahp+SRSNSW7Nijqdv2QCgnJ2EauQgU+rSyHyy 
lkp3zJGdJTU= 
=k/9l 

-----END PGP PUBLIC KEY BLOCK----- 

Могу ли я придерживаться этой строки текста непосредственно в сказать RSACryptoServiceProvider класс в C# как открытый ключ? Или это еще не так? Я раньше не работал с PGP, и я пытаюсь понять, что мне нужно сделать, чтобы получить данные, зашифрованные с помощью этого ключа.

+0

Нет. Вы не можете. это ключ ключа RSA? даже если это так, вам нужно преобразовать его в формат, который может импортировать RSACryptoServiceProvider. –

+0

Возможно, вам понадобится Bouncy Castle или другая библиотека, которая реализует PGP – Plutonix

ответ

2

Хотя OpenPGP использует преимущества RSA и других стандартных алгоритмов, вы не можете использовать стандартный C# RSACryptoServiceProvider. RSA - это только один возможный алгоритм OpenPGP, и, кроме того, вам нужен симметричный алгоритм шифрования, такой как AES (который также будет доступен). Но есть и другие проблемы: вам понадобится реализовать генератор для OpenPGP message format и OpenPGP defined its own cipher mode. Реализация все это самостоятельно будет не только хлопот с участием несовместимостей (an incomplete list exists in the RFC, но и имеет множество способов включения security issues (и кучу других интересных атак, были предложены и смягчены с существующими реализациями, как GnuPG).

Если вы хотите использовать OpenPGP из C#, в конце концов, сводится к следующей альтернативе:

  • use GnuPG through GPGME (но оболочка все еще, кажется, в состоянии альфа),
  • использование BouncyCastle, который имеет собственную реализацию несколько криптографические протоколы, включая OpenPGP для C# d Java, но C# -внедрение кажется менее широко распространены и не столь способны,
  • SharpPrivacy еще одна реализация, но, кажется, мертвую интерфейсу
  • командной строки GnuPG непосредственно

Все те имеют преимущества и недостатки. Вероятно, BouncyCastle будет лучшим способом, если он не поддерживает требуемые функции, вам, вероятно, придется отказаться от вызова команды GnuPG в командной строке.

+0

@Brandon должен знать, что BouncyCastle имеет проблемы совместимости в своей реализации OpenPGP. Мы сталкивались с этими проблемами несколько раз, когда их файлы не могли обрабатываться сторонним программным обеспечением и нашей библиотекой SecureBlackbox. –

1

На GitHub, похоже, есть библиотека C#, но ей несколько лет. Я уверен, что он может указать вам в правильном направлении, если вы хотите реализовать собственное шифрование PGP. https://github.com/da2ce7/SharpPrivacy

Существует также статья о кодебете, но она довольно старая и ссылается на сайт, который, кажется, больше не работает. Вот ссылка на эту ссылку для справки http://www.codeproject.com/Articles/4284/SharpPrivacy-OpenPGP-for-C .

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