Безопасное хеширование всего нескольких миллионов элементов - PullRequest
4 голосов
/ 23 апреля 2011

У меня есть база данных с компаниями и их клиентами. База данных должна быть в состоянии ответить на вопрос «у каких компаний есть клиент, живущий по адресу X?», Который, как правило, очень просто реализовать, конечно.

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

Но что, если сервер взломан и злоумышленник имеет доступ ко всей базе данных и, возможно, даже к любым закрытым ключам, хранящимся на сервере? Это нормально, если злоумышленник может найти список компаний или список клиентов, но он не должен быть в состоянии выяснить, какие компании связаны с каким клиентом, и желательно, чтобы он не мог получить адрес каждого клиента.

Клиенты идентифицируются по их адресу, а не по уникальному идентификатору. В моей стране всего около 5 миллионов разных адресов. Я хотя и использую безопасный хеш для защиты адреса, но очень легко вычислить 5 миллионов хешей и построить отображение из хеша в адрес. Даже если хеш солен.

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

Есть ли вообще способ сделать это действительно безопасным?

РЕДАКТИРОВАТЬ : комментарии a3_nm и Ника Джонсона, конечно, верны: если злоумышленник имеет доступ ко всем данным, он не может быть защищен. Спасибо за указание на этот (очевидный) недостаток.

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

Или есть и другой (очевидный?) Недостаток в этом мышлении?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

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

1 голос
/ 23 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...