[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Интересная задача по безопасности
Страницы: 1, 2
vagrand
Получил я заказ на разработку веб-системы по продаже сериек. Что за серийки неважно, но храниться они должны в зашифрованном виде. Шифровать собираюсь при помощи mcrypt и алгоритма бловфиш с ключом.
Вопрос в следующем, как максимально обезопасить базу сериек даже при ее сливе с сервера? Все, что пока смог придумать это составной ключ для шифрования:
1. Первая часть глобальная и хранится в php конфиге;
2. Вторая часть глобальная для конкретного реселлера и применяется ко всем его серийкам и хранится в таблице юзеров;
3. Третья часть уникальна для каждой серийки и хранится в таблице сериек.
Но хотелось бы еще как-то усилить защиту, чтобы даже при получении доступа к базе и коду не удалось злоумышленнику расшифровать серийки. Я понимаю, что вероятность такая довольно мала, особенно при грамотном подходе к программированию, но все мы люди и баги бывают у всех. Возможно кто-то сталкивался с подобной задачей, буду рад любым дельным советам по усилению защиты.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
redreem
шифровать на стороне клиента ключем, который знает только клиент. не?
vagrand
redreem
Цитата
шифровать на стороне клиента ключем, который знает только клиент. не?


Хех, какой клиент? Продаются серийки, а клиент это покупатель. На момент покупки, серийка уже должна быть в базе в зашифрованном виде.
Странно вобще-то, я думал задача вызовет больше интереса.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
redreem
так не понятен жизненный цикл серийника. кто его генерит, когда, кто проверяет и каким образом.
Игорь_Vasinsky
как бы если тока бд сольют - то алгоритм + ключ на сервере приложений - должен защитить
но если всё сольют ? - тогда шифрование коту под хвост.

я бы использовал алгоритм шифрования на стороне сервера приложений (php), а ключ для шифрования - вводил бы только при добавлении данных в БД, осталось придумать - где брать ключ чтобы дешифровать при продаже их? пока не придумал))

как вариант запрашивать ключ с другого сервера (ответ получать только при конкретных условиях).

шизофрения - шизофренией - но если бы я болел - сделал бы так.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
vagrand
Серийники загружает в базу владелец сайта. Это как коды пополнения мобильных счетов. Когда юзер покупает серийник его ему надо вывести на экран.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Игорь_Vasinsky
т.е. покупатель может выбирать сам серийник из многих возможных вариантов?
т.е. он их все видит или может увидеть?

не понял - для чего криптовать тогда?

или как ты выше написал - это как карты оплаты - стёр защитный слой - а там код - да? т.е. клиент оплатил на 50 руб и получил серийник на 50 руб - так?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
AllesKlar
Если все сольют, то уже ничего не поможет.
Разворачиваем у себя на сервере базу, заливаем скрипт, запускаем.
Скрипт же серийку отправляет клиенту в открытом виде.
Вот и отправляем все себе на почту. Ну, либо вывод в браузер, не важно.

Цитата
как вариант запрашивать ключ с другого сервера (ответ получать только при конкретных условиях).

Это уже мысль. Назовем его "сервер ответного ключа"
Сервер ответного ключа принимает запросы только со одного разрешенного IP.
Сервер ответного ключа имеет алгоритм перманентного самоуничтожения ключа.
Вряд ли будут покупаться серийки с частотой 5 шт. в секунду. Вот этот сервер ответного ключа и смотрит, что если лимит превышен, то все, вообще, никогда, ничего, никому. До тех пор, пока руками у него флаг блокировки не сбросить.


_____________
[продано копирайтерам]
Invis1ble
Я может глупость сморожу сейчас, но как насчет запрашивать с другого сервера, а там тупая проверка по IP ?

ЗЫ. Выше предложили уже smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
Цитата
Я может глупость сморожу сейчас, но как насчет запрашивать с другого сервера, а там тупая проверка по IP ?

ну ты уже 3й с этим вариантом)

можно же для отвода глаз - в ключ криптора добавлять время добавления серийника (unix или ещё как) - и хранить это время к привязке к серийнику - в какой либо таблице - опять же для отвода глаз

вот и получается - динамический ключ криптора.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
кстати - эту связку можно так же хранить на удалённом сервере

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
vagrand,а почему не подходит вариант генерировать серийник непосредственно при его покупке (ну или что там за схема), а в базу писать хеш. т.е. сверять потом хэши серийника и того, что в базе?
AllesKlar
В продолжение к моему
Цитата
Сервер ответного ключа имеет алгоритм перманентного самоуничтожения ключа.

Нужно не стремиться сохранить данные, а стремиться максимально мало потерять, в случае кражи.

На сервере, который запрашивает ключ у Сервера ответного ключа позапутывать логику.
Вынести какие-то скрипты за пределы www, вынести какие-то части на другой DB-сервер.
Если что-то украдут, то все равно, с первого раза не получится составить правльный запрос к Серверу ответного ключа.

Вот и следить, что если вылетело какое-либо исключение (недоступен скрипт, который был выше www, не ответил другой DB-сервер и т.д.), то все равно отправляется запрос к Серверу ответного ключа, но запрос ошибочный, или запрос на блокировку. А тот, в свою очередь, сразу все навсегда блокирует.

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

_____________
[продано копирайтерам]
redreem
зачем вообще хранить готовые серийники? я бы придумал динамический алгоритм создания серийника при его запросе, зависящий от кучи параметров.
vagrand
Ну в общем все предложения согласовываются с тем, что я сам придумал. Под серийниками я имею ввиду именно что-то вроде пинкодов с ваучеров для пополнения мобильников. Т.е. генерировать серийник не выйдет.
По поводу отельного сервера, я думал хранить на нем не ключ, а сами серийники в зашифрованном виде. Даже пошел немного дальше. Собираюсь делить серийники на несколько частей и раскидывать эти части в закодированном виде о нескольким сервакам. На серверах хранилищах будет специальное API с рестрикшеном по IP и запросами по ключам.
В общем всем сасибо, кто отписался. Думал что может есть какие-то ругие схемы, но видимо это будет самый надежынй способ.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.