.net: Какова наилучшая практика шифрования строки в одном приложении, чтобы она могла быть прочитана только другим?

#.net #security #encryption

#.net #Безопасность #шифрование

Вопрос:

У меня есть приложение (App1), и ему нужно записать зашифрованную строку. Другое приложение (App2) должно иметь возможность расшифровать и прочитать эту строку, и, расшифровав, убедиться, что она была зашифрована App1. Приложение 2 не должно иметь возможности записывать новую зашифрованную строку.

Я знаю, что это касается пар открытого / закрытого ключей, но я не знаю, какова текущая технология наилучшей практики в этой области, и я не знаю, какие классы .net ее реализуют? Я могу использовать сертификат по мере необходимости.

Приветствуется любой ввод.

Спасибо.

Комментарии:

1. Должны ли зашифрованные данные быть доступны для чтения только App2? Кроме того, насколько ценна информация? В криптографии очень легко ошибиться , поэтому, если здесь задействована значительная ценность, привлеките к вашему проекту кого-нибудь, кто это хорошо понимает.

2. Данные для передачи большие или маленькие?

3. Зашифрованные данные должны быть доступны для чтения только App2, а объем данных невелик.

Ответ №1:

App1 и App2 генерируют свои собственные пары закрытого / открытого ключей и обмениваются парами открытых ключей. Затем рабочий процесс выглядит следующим образом:

 App1 -> Data   App2-PublicKey = Encrypted Data
App2 -> Encrypted Data   App2-PrivateKey = Data
  

Итак, App1 или App2 шифруют данные только с помощью открытого ключа другого, поэтому только это приложение может расшифровать их, используя свой закрытый ключ. Таким образом, обмен данными безопасен. Если шифрование похоже:

 App1 -> Data   App1-PrivateKey   App2-PublicKey = Encrypted Data
App2 -> Encrypted Data   App1-PublicKey   App2-PrivateKey = Data
  

теперь обмен данными является одновременно безопасным и аутентичным (т. Е. два приложения будут уверены, что это другое приложение связывается с ним). Ссылка:http://en.wikipedia.org/wiki/Transport_Layer_Security

Напоминание: Открытый ключ предназначен для шифрования, а закрытый — для проверки. Кроме того, этап подписи всегда является последним, поскольку он выполняется для окончательных обработанных данных.

Комментарии:

1. Но вы пропустили необходимые шаги аутентификации (и противоположное использование открытых / закрытых ключей), чтобы гарантировать, что данные получены из App1 — тогда вы попадаете в классические перебранки между шифрованием с последующей аутентификацией, аутентификацией с последующим шифрованием или шифрованием и аутентификацией, что не очевидно.

2. Вам также необходимо подписать и подтвердить с помощью ключа App-1, чтобы убедиться, что файл был зашифрован App-1.

3. И, поскольку вы не можете просто подписать данные напрямую ключами, я бы порекомендовал вам обратиться к контейнерному формату. PGP или CMS были бы наиболее очевидными вариантами. Используйте PGP, если вы не хотите настраивать весь PKI.