Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / client<->WCF: как генернуть ключи? / 12 сообщений из 12, страница 1 из 1
07.10.2010, 12:54
    #36886829
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
есть такая идея:
клиент передает сктроку идентифицирующую его в сервис, сейчас это гуид, он постоянный для типов приложений.
Сервис берет строку, проверяет ее в своей базе и просто говоря разрешает работать или не разрешает.
Для того, чтобы не передавать строку в открытом виде я кодирую ее в сервисе и в клиенте
так:

Code:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
     public string EncryptString(string _pwd, string _salt, string dataToEncrypt)
        {
            byte[] key = GetHashKey(_pwd, _salt);
            return Encrypt_(key, dataToEncrypt);
        }
        internal string Encrypt_(byte[] key, string dataToEncrypt)
        {
            AesManaged encryptor = new AesManaged();
            encryptor.Key = key;
            encryptor.IV = key;
            using (MemoryStream encryptionStream = new MemoryStream())
            {
                using (CryptoStream encrypt = new CryptoStream(encryptionStream, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    byte[] data = UTF8Encoding.UTF8.GetBytes(dataToEncrypt);
                    encrypt.Write(data,  0 , data.Length);
                    encrypt.FlushFinalBlock();
                    encrypt.Close();
                    return Convert.ToBase64String(encryptionStream.ToArray());
                }
            }
        }


Естественно используются на обоих концах одинаковые строки
string _pwd, string _salt

Вопрос: как можно генерировать на обоих концах эти строки динамически, но естественно, чтобы они совпадали?

Universal time?
...
Рейтинг: 0 / 0
08.10.2010, 16:01
    #36889798
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
а чем сертификаты не устроили для защиты канала
...
Рейтинг: 0 / 0
09.10.2010, 15:18
    #36890839
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
Не вполне понятно, как именно работает и что пытаемся сделать.

Я понял следующее:
1. Сервис реализует некий функционал, доступность которого (или доступность данных) зависит от типа клиента.
2. Тип клиента определяется по GUID, который хранится на клиенте, но при передаче серверу вы его шифруете, видимо, чтобы исключить перехват.
3. Вы хотите динамически генерировать ключи для шифрования ...

Вот собственно и вопрос - а для чего нужен п. 3?
Посколько схема мне не очень понятна, я рискну предложить свои варианты (и возможно они будут не вполне адекватны вашей ситуации) исходя из того, что вы не боитесь потери секрета на клиенте, но вас беспокоит передача части данных скрыто по сети:

1. Просто использовать авторизацию (хоть на основе сертификатов, хоть на основе пароля). Т.е. в клиенте хранятся аутентификационные данные, клиента и при обращении к сервису каждый клиент аутентифифицируется у сервиса.
Схема не работает, если нужно и аутентифицировать сервисы и делить по клиентам.
Потенциально, можно еще иметь несколько учеток для одного пользователя (на каждый клиент, который доступен пользователю) - но я бы от такого решения был бы не в восторге сам.

2. Использовать шифрование на уровне пакетов или канала (SSL). Единственное возражение здесь: будет некоторый overhead, а все за ради одного поля.

3. Шифровать поле, при этом обмениваться ключами в рамках сессии. Самый известный из подобных способов, это схема Диффи-Хеллмана . На сколько я смотрел, в стандартном .Net реализации этого алгоритма нет, но вроде бы он поддерживается CryptoAPI + есть свободные реализации в сети.

Но повторюсь еще раз: не зная до конца ваших условий трудно что-либо советовать.
...
Рейтинг: 0 / 0
11.10.2010, 15:10
    #36892793
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
2 Михаил Р
Не вполне понятно, как именно работает и что пытаемся сделать.

Я понял следующее:
1. Сервис реализует некий функционал, доступность которого (или доступность данных) зависит от типа клиента.
2. Тип клиента определяется по GUID, который хранится на клиенте, но при передаче серверу вы его шифруете, видимо, чтобы исключить перехват.
3. Вы хотите динамически генерировать ключи для шифрования ...


1. да, сервис реализует общий функционал, которым ползуются несколько разных типов клиентов
2. да, сейчас клиент передает свой гуид сервису, а он передает его дальше отдельно стоящему серверу лицензий и получает\не получает лицензию на работу именно этого приложения. Т.е.
юзер купил сервис, и 5 лицензий для приложения типа А, 3 для приложения типа Б, 20 для типа С.
3. да, ну как пример: чтобы юзер не мог склёпать свое приложение и пользоваться сервисом, используя известный гуид для существующего типа приложения, купленного честно.

Ну и чтобы минимально "завуалировать" открытый гуид хотелось бы чего-то эдакого
...
Рейтинг: 0 / 0
11.10.2010, 15:13
    #36892801
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
продолжу: хотелось бы хоть как-то минимально скрыть, и поудмалось о динамической генерации\шифровании гуидов, ежечасной смене, чтобы клиент слал, а сервер был в состоянии сшифровать...
а враг чтобы не мог легко подсунуться
...
Рейтинг: 0 / 0
11.10.2010, 18:16
    #36893268
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
Понятно...

Увы, именно на такой кейз я ничего предложить не могу. Т.к. у клиента всегда есть возможность реверсинжинеринга, т.е. не важно что у вас будет на клиенте - конкретный ключ или некоторый хитрый алгоритм ответов на вопросы сервера (т.е. динамичсеские ключи), это всегда можно повторить.

Все что вы можете сделать - максимально усложнить это повторение.
...
Рейтинг: 0 / 0
11.10.2010, 18:53
    #36893329
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
МихаилРПонятно...

Увы, именно на такой кейз я ничего предложить не могу. Т.к. у клиента всегда есть возможность реверсинжинеринга, т.е. не важно что у вас будет на клиенте - конкретный ключ или некоторый хитрый алгоритм ответов на вопросы сервера (т.е. динамичсеские ключи), это всегда можно повторить.

Все что вы можете сделать - максимально усложнить это повторение .

да, понимаю
...
Рейтинг: 0 / 0
11.10.2010, 19:04
    #36893350
stimpi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
Winnipuh,

вам уже barrabas ответил на впорос.

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

ЗЫ выше описан метод, как работают сертификаты, но если их использовать надо клиентам их делать трастед.
...
Рейтинг: 0 / 0
11.10.2010, 19:19
    #36893382
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
stimpi,

увы, это не решит описанной задачи - защиты от подлога клиентского ПО.
...
Рейтинг: 0 / 0
11.10.2010, 20:23
    #36893483
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
МихаилРstimpi,

увы, это не решит описанной задачи - защиты от подлога клиентского ПО.
почему вы не можете занести серийники сертификатов в БД?
Проводить другую проверку помимо защиты канала сертификатами?
У меня пользователи авторизаются по сертификатам, я в базе присваиваю сертификат пользователям и когда на сервис кто то ломится я знаю кто это.
для этого делается custom авторизация унаследовавшись от X509CertificateValidator
...
Рейтинг: 0 / 0
11.10.2010, 21:05
    #36893532
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
barrabas,

Во-первых, не я, а автор топика.
Во-вторых, если вы перечитаете вот это сообщение, то поймете, что суть проблемы вовсе не в защите канала.
...
Рейтинг: 0 / 0
29.11.2010, 00:54
    #36982404
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
client<->WCF: как генернуть ключи?
было бы здорово увидеть реализацию авторизации как у WebMoney для light версии, где в браузер устанавливается сертификат и дальнейшая работа проходит прозрачно для клиента.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / client<->WCF: как генернуть ключи? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]