Здравствуйте ув. участники форума. Подскажите пожалуйста, как лучше всего шифровать данные отсылаемые на сервер ?!
Вернее вопрос даже не в том как лучше, а какой способ подходит в данном случае для php обработчика ?!
Есть программа, есть сервер, с которого подгружаются в программу данные (из бд сервера).
Нужно реализовать защиту этих данных, чтобы нельзя было отловить сниффером и изменить их.
Этот топик читают: Гость
Ответов: 321
Рейтинг: 10
|
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Настроить HTTPS на сервере, всё остальное заработает само без изменений.
|
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Netspirit писал(а): Настроить HTTPS на сервере, всё остальное заработает само без изменений.А если http только ?! Вот простой вариант из примеров...
________________________________________________________ Задачи: -Защита содержимого от чтения передаваемых данных (используем xor шифрование). -Защита содержимого от редактирования данных из вне (используем sha1). Защита не очень, сам понимаю, но пока хотя-бы так реализовать. ________________________________________________________ Извините за тему, тут наверное больше по php вопрос, нежели чем по hiasm, это себе, чтобы двигаться вперед) Может кому-нибудь пригодится потом. ________________________________________________________ Теперь пишем скрипт php для приема данных от программы: -проверяем sha1... это наброски, еще не проверял на работоспособность
Редактировалось 1 раз(а), последний 2018-11-09 16:03:03 |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Ну, если ключ хранится в программе - то его легко узнать. Лучший вариант - случайный ключ при каждой сессии, с передачей при помощи асимметричного шифрования (закрытый ключ - на сервере, в программе - только открытый ключ).
|
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Netspirit писал(а): Ну, если ключ хранится в программе - то его легко узнать.Каким образом ?! Отладчиками типа OllyDbg ?! Netspirit писал(а): Лучший вариант - случайный ключ при каждой сессии, с передачей при помощи асимметричного шифрования (закрытый ключ - на сервере, в программе - только открытый ключ).Извиняюсь, у меня два ключа, для шифрования xor и для создания sha1 хэша, а Вы про какой ?! Ну по логике для xor ?! Можно чуть подробнее пожалуйста, мне главное, чтобы потом хватило ума написать это все на php. Получается: Пользователь запускает приложение. Приложение отправляет POST-запрос и получает ключ (отличный от ключа на сервере). Полученный ключ сохраняем в память. Или сохраняем в cookie ?! Дальше я не знаю как и что =( Это все компонентами от nesco ExportSessionKey и т.д, в эту сторону копать, или это другое ?! Редактировалось 1 раз(а), последний 2018-11-09 18:27:18 |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Master4eG писал(а): Каким образом ?! Отладчиками типа OllyDbg ?!Master4eG писал(а): Ну по логике для xor ?!- асимметричное RSA (для сервера генерируется ключевая пара - приватный и публичный ключ. Публичный ключ зашивается в программу - его знание никак не помогает расшифровке, поскольку им данные можно только зашифровать) - блочное шифрование (для каждого сеанса связи или запроса генерируется случайный сессионный ключ, которым шифруются данные. Этот ключ в программе шифруется публичным ключом сервера и отправляется серверу перед отправкой зашифрованных данных. Сервер расшифровывает своим приватным ключом полученный сессионный ключ, а уже им - полученные данные). Master4eG писал(а): Это все компонентами от nesco ExportSessionKey и т.д, в эту сторону копатьРедактировалось 4 раз(а), последний 2018-11-09 18:39:25 |
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Скачал ваши компоненты (Crypt components mod 2018-05-04), установил, понял, что они уже есть, потом обновил через встроенный svn обратно (правой кнопкой мыши по компоненту), и все накрылось медным тазом. Помогите разобраться, почему ругаться начал ?!
|
|||
карма: 1 |
|
Ответов: 321
Рейтинг: 10
|
|||
Починил через HiSvn.
Netspirit, помогите пожалуйста разобраться, смотрел и видео истории развития криптографии, и прочел статьи в hiasm wiki. Но остались вопросы... Как я понял в PHP встроен некий OPENSSL_PKCS1_PADDING (могу ошибаться). Опираясь на примеры с habr сделал 2 файла. Сгенерировал пару ключей на каком-то сайте (нашел в Яндексе) http://travistidwell.com/jsencrypt/demo/ Это ключи как я понял RSA, они бывают 512, 1024 или 2048 бит. Чем длиннее, тем надежнее, тем медлительнее расшифровка. На сайте генерации ключей есть галочка async. Зачем она нужна ?! Собственно вопрос по теме - есть ли у нас поддержка этих самых RSA ?! Ткните пожалуйста носом, если есть. encode.php
decode.php
Редактировалось 1 раз(а), последний 2018-11-11 21:53:46 |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Для генерации пары приватного и публичного ключа используется компонент GenKeyPairs. Представленные тобой PHP ключи по формату не совсем те, которые используются компонентами HiAsm.
На данный момент у нас также не реализовано прямое шифрование/дешифрование публичным/приватным ключом. Последовательность у нас такая: - генерируется пара ключей, либо используется ранее сгенерированная - у клиента с помощью компонента ExportSessionKey и публичного ключа из пары генерируется случайный SessionKey и его зашифрованный вариант ExchangeKey. - ExchangeKey передаётся серверу - он не может быть расшифрован при перехвате - сервер расшифровывает полученный ExchangeKey с помощью приватного ключа из пары компонентом ImportSessionKey и получает тот же SessionKey - теперь у сервера и клиента есть одинаковые SessionKey, переданные безопасным способом. Ими следует в дальнейшем шифровать/расшифровывать данные, например компонентами EnCrypt/DeCrypt, или моими компонентами. Редактировалось 4 раз(а), последний 2018-11-12 14:39:56 |
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Под сервер вы подразумеваете другое приложение или скрипт php ?! Как я смогу на сервере (хостине) расшифровывать ExchangeKey ?!
В чем сложность реализации RSA в Hiasm?! сложность задачи, ненадобность или отсутствие свободного времени ?! Вот есть информация, библиотека libeay32.dll, готовый юнит libeay32.pas, функции, процедуры. https://habr.com/post/280302/ https://github.com/ddlencemc/RSA-via-OpenSSL-libeay32/blob/master/libeay32.pas Я далек от понимания как это реализовать в hiasm, так-что сразу извините, если это совсем не то. Но я могу выступить в качестве спонсора этого компонента, думаю многим бы пригодился такой компонент. |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Master4eG писал(а): В чем сложность реализации RSA в Hiasm?!Master4eG писал(а): Как я смогу на сервере (хостине) расшифровывать ExchangeKey ?!Другая проблема возникнет с использованием компонентов EnCrypt\DeCrypt - они выполняют хеширование поданного на них ключа - для расшифровки в PHP нужно будет выяснить эту процедуру и повторить. Решение - использовать мои компоненты для шифрования - /topic/64832. Но надо проверить совпадают ли результаты шифрования компонентами и PHP для одинаковых параметров алгоритма. Я, вроде, проверял, но лучше перепроверить. Редактировалось 3 раз(а), последний 2018-11-13 12:00:13 |
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Не знаю насколько правильно я делал, но вот MCRYPT_3DES с режимом MCRYPT_MODE_CFB. И в приложении не могу раскодировать результат.
https://webformyself.com/shifrovanie-dannyx-na-php/ Возможно нужно вручную указывать длину вектора инициализации или еще что-то. Короче, я сдаюсь, видимо мой уровень это xor. Netspirit, спасибо за потраченное время, извините На пенсии разберусь Это нужно время, чтобы вникнуть с головой во все, а так... с этой работой... по пару часов в день не хватает для познания сей темы)
Тема закрыта) Теперь xor мой друг) |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Master4eG писал(а): но в хиасме не декодируетNetspirit писал(а): проблема возникнет с использованием компонентов EnCrypt\DeCrypt - они выполняют хеширование поданного на них ключа - для расшифровки в PHP нужно будет выяснить эту процедуру и повторить.Master4eG писал(а): Теперь xor мой друг)Редактировалось 4 раз(а), последний 2018-11-13 14:38:24 |
|||
карма: 26 |
|
Ответов: 321
Рейтинг: 10
|
|||
Netspirit, нет, по моему xor не мой друг)
Вроде получается с вашим AES=MCRYPT_RIJNDAEL_128 подружиться. Decode on Hiasm (aes / ecb)
Encrypt / Decrypt PHP... Судя по документации PHP, MCRYPT считается устаревшим и не рекомендована к использованию. Большинство функций в новых версиях PHP удалены. Есть альтернатива openSSL. Самое странное, что как я понял MCRYPT и openSSL ведут себя странно с aes, и у многих они шифруют по разному, то есть первый не понимает второго, и аналогично наоборот. Вот пример с рабочим и тем и тем:
Пока-что удалось закодированный текст в PHP раскодировать в Hiasm, и это прогресс. Спасибо Netspirit. Правда работает только если убрать галочку checkSum в компоненте, но наверное так надо) Все, теперь хоть свою криптовалюту создавай или свой WannaCry Редактировалось 1 раз(а), последний 2018-11-13 20:27:57 |
|||
карма: 1 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Master4eG писал(а): работает только если убрать галочку checkSum в компоненте, но наверное так надоЕсли нужны режимы отличные от ECB - выясни какой InitVector по-умолчанию использует MCrypt, задай его в компоненте и проверь. "OPENSSL_NO_PADDING" - не знаю что за флаг и почему ты его указывал, но мои компоненты используют Padding, если не отключен. Нужно проверить, совпадают ли мои режимы дополнения с OpenSSL-евскими. Теоретически, у меня могут быть некорректно реализованы. Редактировалось 3 раз(а), последний 2018-11-14 12:01:25 |
|||
карма: 26 |
|
15