Надежно хранение учетных данных, которые нельзя шифровать

StackOverflow https://stackoverflow.com/questions/19845414

Вопрос

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

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

Есть лучшие идеи?

Это было полезно?

Решение

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

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

Более подробный поток здесь:

  1. Пользователь вводит пароль "123456" При входе в систему в вашу систему.
  2. Вы используете SHA256 пароля "123456" и получаете ключ: "8D969EEF6CAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92"
  3. Используйте этот ключ «8D969 ...», чтобы расшифровать с AES пароли сайтов в вашей базе данных.

Вы можете уточнить это несколькими способами. Например: Солирование пароля перед вычислением хеша SHA.

Как практическая выборка такого соленника, Майкл предложить использовать PBKDF2HMACSHA-256 в качестве двух параметров псевдо случайной функции).

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

Другие советы

Все, что вы можете сделать, чтобы использовать свои учетные данные, злоумышленник также может

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

В конце концов, резина должна отправиться в путь, так что иди и победить. Не совсем сбивайте запутывание. Просто сделайте, чтобы связать это с умными практиками.

Подходы и предложения

Генерировать клавиши API для приложения для каждой учетной записи, которая будет использоваться машиной

Если вы можете генерировать клавиши API со сторонних счетов, это даст вам возможность отозвать доступ к учетным записям без выключения всех потенциальных приложений. Многие услуги имеют такие типы ключей API (Google, Twitter, Stackexchange, Facebook и многие другие).

Вы просто настраиваете «приложение», затем используете ключ потребителя и секрет, а также токен доступа и секрет доступа. Машина просто должна хранить эти полномочия. Если происходит компромисс, вам просто нужно отозвать этот набор ключей. Кроме того, они позволяют вам указать разрешения на учетную запись.

Используйте пароль для пользователя для их набора учетных данных

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

Все равно шифровать его на диск

Вы всегда можете зашифровать учетные данные одним ключом. Тогда у вас есть только один ключ для защиты (который защищает все остальные секреты). Затем вам придется расшифровывать, прежде чем получить другие ваши учетные данные.

Хранить секреты в Keyring системы

На Linux используйте Гном-Кейринг. Анкет Затем вы можете сделать простые вызовы Create-update-delete, рассматривая их как базу данных паролей. Кейринг GNOME основан на стандарте PKCS#11.

А Gnome-Keyring имеет API Для сохранения на Keyring и получения предметов.

/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
  /* user_data will be the same as was passed to gnome_keyring_find_password() */
  // ... do something with the password ...
  /* Once this function returns |password| will be freed */
}

static void
find_my_password()
{
  gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,  /* The password type */
                               found_password,                  /* callback */
                               NULL, NULL,     /* User data for callback, and destroy notify */
                               "user", "me", 
                               "server", "gnome.org",
                               NULL);
}

В Windows 7+ используйте функцию «Зашифрованная файловая система» (EFS). Все файлы зашифрованы с помощью сертификата, в свою очередь, защищен вашим паролем Windows.

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

Установите удаленную машину, которая предоставляет доступ

Можете ли вы настроить машину, которая предоставит доступ к учетным данным или ключом разблокировки, используя публичные и частные пары ключей?

На хешинге

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

Ты мог кодировать Данные для запутывания, но я не рекомендую это.

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

Хэширование может предотвратить, в целом, предсказуемые манеры использование исходных данных. Тем не менее, вам нужно использовать данные. Криптографические хэши, такие как SHA-256, разработаны таким образом, чтобы вычислительно сложно (не делая таблиц по поиску необоснованного размера), чтобы найти m данный H(m) куда H Ваша любимая хэш -функция.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top