RSA действительно был бы наилучшим путем, но на самом деле нет никакой реализации ни в Silverlight 2, ни в 3 библиотеках. Это то, что действительно должно было быть добавлено на мой взгляд, хотя вряд ли это произойдет до Silverlight 4 сейчас. К сожалению, пользовательская реализация RSA, вероятно, будет по-настоящему болезненной, поэтому я не вполне осуществима.
Вот мое предлагаемое решение ... Это, конечно, не так просто, как простая отправка открытого ключа с сервера, но оно должно по-прежнему выполнять работу безопасно.
- Используйте алгоритм обмена ключами Диффи-Хеллмана для согласования ключа, который будет использоваться для последующего шифрования. Это было разработано для работы по небезопасному каналу, поэтому здесь нет проблем. См. здесь для реализации C #.
- Используйте какое-то симметричное шифрование с ключом, установленным обменом Диффи-Хеллмана, для отправки имени пользователя / пароля по соединению. Сервер может затем расшифровать, используя один и тот же ключ, который, хотя и известен как клиенту, так и серверу, тем не менее unknown любой третьей стороне. Сила вашего алгоритма симметричного шифрования на самом деле не имеет значения в этом случае. (Кто-то исправит меня, если я ошибаюсь.) На самом деле простой шифр XOR должен делать эту работу. Кажется, вы также можете использовать стандарт AES , который включен в пространство имен
System.Security.Cryptography
Silverlight BCL.
Надеюсь, это поможет. Дайте мне знать, если вам что-то не понятно.