Безопасное хеширование всего нескольких миллионов элементов

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

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

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

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

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

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

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

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

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

4 голоса | спросил Peter 23 AMpSat, 23 Apr 2011 11:27:46 +040027Saturday 2011, 11:27:46

2 ответа


0

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

ответил a3nm 23 PMpSat, 23 Apr 2011 12:06:23 +040006Saturday 2011, 12:06:23
0

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

ответил sra 23 PMpSat, 23 Apr 2011 12:05:12 +040005Saturday 2011, 12:05:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132