Защита данных в хранилище данных Google App Engine

Наше приложение Google App Engine хранит достаточное количество личной информации (электронная почта, ssn и т. д.) для идентификации пользователей. Я ищу совета о том, как защитить эти данные.

Моя текущая стратегия

Хранение конфиденциальных данных в двух формах:

  • Хеширование — с использованием SHA-2 и соли
  • Зашифрование — с использованием открытого/закрытого ключа RSA

Когда нам нужно выполнять поиск :

  • Выполните поиск по хэшированным данным (хэшируйте PII в запросе, сравнивайте ее с хешированной PII в хранилище данных).

Если нам когда-нибудь понадобится повторно хешировать данные или иным образом обрабатывать их в необработанном виде:

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

Мои опасения

Сохранение в секрете нашей хеш-соли

Если злоумышленник завладеет данными в хранилище данных, а также нашей хеш-солью, я боюсь, что он может взломать конфиденциальные данные методом грубой силы. Некоторые из них (например, SSN, 9-значный номер) не имеют большого пространства для ключей, поэтому я считаю, что даже с современным алгоритмом хеширования это можно было бы сделать, если бы злоумышленник знал соль.

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

В промежутках между развертываниями файл соли хранится на USB-ключе, защищенном разъяренным медведем (или сейфом).

Поскольку соль находится только в двух местах

  1. USB-ключ
  2. Развернут в приложениях Google

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

Сохранение секретного ключа RSA.

Меньше беспокойства по этому поводу. Нам редко потребуется расшифровывать зашифрованную версию (только если мы изменим алгоритм хеширования или формат данных).

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

Мы можем хранить закрытый ключ RSA на USB-накопителе под охраной медведя и тигра и извлекать его только тогда, когда он нам нужен.


Я понимаю, что этот вопрос не совсем относится к приложениям Google, но я думаю, что GAE делает ситуацию несколько уникальной.

Если бы у меня был полный контроль, я бы заблокировал доступ к развертыванию и доступ к средству просмотра хранилища данных с помощью двухфакторной аутентификации, но в настоящее время эти параметры недоступны (иметь специальный пароль GAE — это хорошо, но мне нравится использовать токены RSA).

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

17
задан Rob Boyle 10 April 2012 в 20:50
поделиться