Тут понадобилась придумать хитрую систему генерации но моих мозгов не хватает =( Есть сервер и клиент, дальше скажем так при вводе в клиенте и сервере одинакового пасса через соккет каждый раз должен уходить своеобразный пакет. То есть клиент каждый раз должен кодировать пасс по разному а сервер понимать его. (Так сказать динамический код) У кого какие предложения?
сервер шлет ключ шифрования. клиент им шифрует свой пас и отправляет серверу. Сервер расшифровывает пас и потом проверяет его. Если это организовать на основе шифрования с открытым ключем то довольно надежно. тем более что не обязательно делать всё на RSA, потому что есть и более простые в реализации алгоритмы асиметричного шифрования.
Сервер рандомно генерит что то ,отсылает клиенту,тот склеивает его с паролем хеширует,шлет хеш серверу.При условии что серверу известен пароль он клеит его с тем же самым рандомным значением хеширует,и сравнивает с тем что прислал клиент.
генерируешь ключ, шифруешь им строку (любым алгоритмом), склеиваешь ключ с зашифрованной и отправляешь на сервер, на сервере расшифровываешь и сравниваешь с требуемым
Согласен,не обязательно сразу RSA алгоритмом пользоваться,главное чтобы был понятен смысла самого алгоритма.
Можно по подробней что значит:"Склеиваешь ключ с зашифрованной" xismyname Я писал выше что сервер только принимает данные.
хм. Способ есть, к примеру автомобильные сигнализации используют динамический код без обратной связи (в нашем случае сервер ничего не шлет клиенту)
Ппц, самое элементарное - какой-нибудь рандомный ключ, по умолчанию в первом пакете он допустим между 17 и 25 символом. кодируешь пакет свой в base64, генерируешь ключ, вставляешь его в стартовую точку, в самом же пакете указываешь либо следующий ключ, либо его расположение. Единственное слабое место - это если выкупят алгоритм нахождения ключа сервером... точнее не так, сначал генерируешь ключ, потом пакет, потом вставляешь в него ключ ) На крайняк можно установить что размер ключа - всегда 13 символов а сервер же пускай подбирает его из пакета, но тогда придется придумывать какой-либо опознавательный знак для начала и конца пакета... Да и ежели пакет/нагрузка будет нормальные то сервант надолго задумается....
Программа не автомобиль. Если хочешь чтобы сервер смог дешифровать твой текст то тебе придеться выслать на сервер и ключ шифрования,это означает что любой кто перехватит ключ сможет так же дешифровать тескт.
тоже интересовал когда то такой вопрос, нагуглил следующее: Пусть диалог программ будет примерно следующий: Клиент (К): Я хочу залогиниться. Я Василиса Пупкина. Сервер (С): Хоти. Вот тебе число (генерирует и отсылает случайное число). Сложи его по маске XOR со своим паролем, посчитай MD5 хеш и пришли результат мне. К: Сейчас... (складывает пароль с присланным числом по маске XOR, считает MD5 хеш, отправляет результат). Вот! С: Ага, счас (смотрит в таблицу, где лежат пароли в открытом виде, сам проводит все нужные действия, сравнивает присланное число и то, что получилось) Да ты, никак действительно Василиса! Вот тебе уникальное число (генерирует и отправляет нечто вроде SessionID), запомни! (заводит запись, соответствующую заданному номеру, в которой будет хранить все, что относится к указанному клиенту). К: (запоминает число, отправляет его серверу при каждом обращении).
вообще можно слегка скрывать инфу о ключе. К примеру. Клиент коннектится к серваку, получает порт который выдала ему винда для коннекта. Далее рандомным ключем криптит пароль, затем сцепляет этот рандомный ключ с шифрованным паролем и это шифруется номером этого порта. Сервер в свою очередь получает номер порта с которого коннектится клиент и в обратной последовательности всё делает. А если пароль разбавить мусором и потом шифровать то довольно хорошо будет получаться ) Хотя можно замутить и по другому. Генерить ключ в определенном диапазоне чисел. к примеру от 0x00000000 до 0xFFFFFFFF это будет ключ шифрования. Ты береш пароль, вычисляеш его crc затем шифруеш. и передаеш серваку шифрованный пароль и crc а сервак когда получит начинает брутить ключ )) 4 милиадра операций на нормальном компа выполнятся за 1-2 секунуды.
А ты думаешь сигнализации это набор транзисторов и резисторов? Нет, сигналки уже давно микро контроллер в котором прошивка написана на С или ассемблере. Всем спасибо, я выбрал немного другой способ. Ничего кодировать не буду а просто сделаю рандом список и буду проверять есть ли пасс в списке (после использования в черный список). Ну или способ предложенный человеком долеким от программирования: "Кодировать абракадабру временем которое установлено в системе =) и если время одинаковое расшифровка будет одинаковая =)))
В каждом TCP пакете указан порт отправителя и порт получателя,первые два поля TCP пакете,сам знаешь Опять же есть риск что пакет могу перехватить и узнать порт.
О. придумал еще один метод. Короче береш придумываеш любой генератор псевдослучайных чисел основанный на математических операциях(т.е. не юзаюзий таймер, часы, случайные велечины и rdtsc) И вот ты рандомом выбираеш начальное значение этого генератора. Затем рандомно генериш число повтороней. И далее начиная с этого начального значения впустую прогоняеш это кол-во повторений и последнее число будет считаться ключем шифрования пароля. Серваку ты шлеш начальное значение и кол-во повторов и шифрованный пароль. Он инициализирует этот же генератор и также прогоняет нужное кол-во повторов.И тем самым получает ключ для расшифровки пароля. В этоге для того чтобы расшифровать нужно знать алгоритм работы данного генератора псевдослучайных чисел. А для этого придется или декомпильнуть серверную часть или клиентскую. Также можно сделать несколько разных генераторов и потом передавать номер используемого. или последовательность их использования. Защитить ГСЧ намного проще чем чтото другое, потому что его можно сделать очень сложным с точки зрения математических вычислений и размера.
надо придумать что-нибудь типа генератор ключей, удовлетворяющих какой-нить функции. Например, что-нибудь вроде запрос состоит из как-то закодированных двух чисел A и B, и сервер проверяет, если B делится на 12634284628, A делится на 8330620174, и A делится на B, то принять ключ. slesh, а тебе не кажется, что генератор без случайной инициализации временем - чем угодно не является вообще случайным генератором, а просто выдаёт последовательность чисел?)
2 desTiny ну так почти все генераторы основаны на математической генерации последовательности и вся фишка именно в инициализации. Даже стандартный генератор в делфи и си - они математические. По этому их и назвали псевдослучайные. Другое дело генераторы основанные на более случайных числах или промежутках чисел. К примеру основанный на rdtsc потому как случайности вносит частота процессора, его производительность и загруженность системы и ты можеш сказать примерно какие значения он нагенерит но не сможеш сказать их точного значения. Вот тебе простой пример: Code: rdtsc // 0000098C D88D99BD mov ecx, eax mov ebx, edx rdtsc // 0000098C D88D99E2 Как видиш за время выполнение нескольких машинных инструкций проц выполнил 37(0x25) тактов и такое примерно всё время было. При большей нагрузке на систему число начало меняться в диапазоне он 0x18 до 0x26 и это на моём проце. на твоем проце будут другие значения скорее всего. Вот тебе и генератор небольших случайных чисел. не требующий инициализации и не выдающий последовательность чисел. очень хорош генератор для небольших чисел с не очень частым использованием. Но необходимо учитывать тот факт что rdtsc часто выдает числа только четные ) Кстати rdtsc очень удобно юзать для улучшения качества обычных ГСЧ потому что значения можно подмешивать в результаты обычного ГСЧ и таким образов давая большую случайность, а главное - типа небольшая и не напряжная дополнительная инициализация при каждой генерации
ай прости, я неправильно понял, то что ты написал. мне показалось, что ты каким-то образом хочешь инициализировать генератор без всего этого.