У меня есть база данных с компаниями и их клиентами. База данных должна быть в состоянии ответить на вопрос «у каких компаний есть клиент, живущий по адресу X?», Который, как правило, очень просто реализовать, конечно.
Чего я хочу избежать, так это того, что злоумышленник может как-то найти все отношения между компанией и клиентом. Эта база данных будет размещена на веб-сервере, и запросы к ней будут ограничены, чтобы избежать перебора всех данных.
Но что, если сервер взломан и злоумышленник имеет доступ ко всей базе данных и, возможно, даже к любым закрытым ключам, хранящимся на сервере? Это нормально, если злоумышленник может найти список компаний или список клиентов, но он не должен быть в состоянии выяснить, какие компании связаны с каким клиентом, и желательно, чтобы он не мог получить адрес каждого клиента.
Клиенты идентифицируются по их адресу, а не по уникальному идентификатору. В моей стране всего около 5 миллионов разных адресов. Я хотя и использую безопасный хеш для защиты адреса, но очень легко вычислить 5 миллионов хешей и построить отображение из хеша в адрес. Даже если хеш солен.
Единственное, о чем я могу думать, это безопасность через неизвестность: я проверяю, что функция хеширования не может быть четко распознана и находится в скомпилированном коде, и надеюсь, что злоумышленник не достаточно умен, чтобы все это понять.
Есть ли вообще способ сделать это действительно безопасным?
РЕДАКТИРОВАТЬ : комментарии a3_nm и Ника Джонсона, конечно, верны: если злоумышленник имеет доступ ко всем данным, он не может быть защищен. Спасибо за указание на этот (очевидный) недостаток.
Так что мне нужно что-то, что не хранится в базе данных. Чтобы убедиться, что только компании и клиенты могут получить доступ к своим собственным данным, я могу зашифровать их с помощью собственного пароля. Таким образом, список клиентов компании будет зашифрован паролем этой компании, который никогда не будет храниться на сервере и должен будет отправляться вместе с каждым запросом. Я думаю, что я могу предположить, что злоумышленник не может перехватить запросы, содержащие пароли.
Или есть и другой (очевидный?) Недостаток в этом мышлении?