2015-06-01 3 views
0

Я думаю, что я знаю основы:Как реализовать PGP Encryption/Decrypttion учитывая государственные/частные ключи

  • на основе криптографии с открытым ключом, каждый имеет публичный & закрытый ключ
  • Отправитель шифрует с получателя открытый ключ.
  • Получатель расшифровывает свой личный ключ.

Но этого недостаточно для реализации этого. Например, какой алгоритм шифрования используется и как это реализовано?

Насколько сложно написать пропущенную библиотеку шифрования/дешифрования pgp в .NET с учетом сообщения и связанных с ним ключей?

Где я могу найти стандартный алгоритм для этого?

ответ

1

OpenPGP определен в RFC 4880.

Это протокол высокого уровня, который использует broad variety of cryptographic algorithms, некоторые из них являются обязательными (3DES, DSA, Elgamal, SHA-1), другие также должны быть реализованы (RSA, AES, SHA-2, сжатие, .. .). Особенно рекомендуется использовать , а не, чтобы реализовать эти основные алгоритмы самостоятельно, чтобы предотвратить широкое количество побочных каналов и временных атак, вместо этого полагаться на легко существующие библиотеки криптографии (GnuTLS, OpenSSL).

Если вы хотите реализовать формат сообщений OpenPGP на основе существующих алгоритмов, обязательно прочитайте главы Security Considerations и Implementation Nits , в которых содержится важная информация о возможных атаках для рассмотрения и проблем совместимости.

Если ваша главная цель изучения OpenPGP и криптографии в целом, я бы рекомендовал смотреть в BouncyCastle (который уже есть C# и реализацию Java), GnuPG (который, вероятно, является реализация OpenPGP с самой большой базой пользователей, и корабли с почти каждым дистрибутивом Linux, но также доступны для Windows) или OpenPGP.go library (написано хорошо, идите). Все они с открытым исходным кодом и, вероятно, имеют интересные проблемы для решения в своих трекерах ошибок (BouncyCastle, GnuPG).

2

Bouncy Castle имеет .NET API, который может использоваться для шифрования/дешифрования файлов/данных. (Исходный код включен на их сайт)

Существует пример кода here, который демонстрирует, как шифровать данные.

Я использовал его, и он хорошо работает.