Как анонимизировать учетные данные в базе данных с помощью CakePHP

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

Я использую адрес электронной почты и пароль для идентификации своих пользователей. Но адрес электронной почты - это не анонимные данные, например: [email protected]. Поэтому мне нужно анонимизировать эти данные.

Для других моих данных, таких как lastname или firstname, я использую Security::encrypt($firstname,$privatekey) в CakePHP. (Мой закрытый ключ уникален для каждого пользователя)

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

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

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

Мои вопросы:

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

Заранее спасибо !

2-стороннее шифрование? openssl_encrypt и openssl_decrypt

danny3b 02.05.2018 10:54

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

GordonM 02.05.2018 10:58

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

Thomas Rollet 02.05.2018 11:04

@ThomasRollet Тогда у вас есть 2 противоречивых вопроса. Если данные анонимны, они не могут быть отображены, потому что в этом весь смысл их анонимности. Если он может быть отображен, он не может быть анонимным, потому что его можно использовать для идентификации конкретного пользователя по фрагменту данных в виде открытого текста (который может даже содержать его имя). Вы путаете анонимность с безопасностью?

GordonM 02.05.2018 11:11

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

502_Geek 02.05.2018 11:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
140
1

Ответы 1

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

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

Итак, как пользователь войдет в систему?

Решение состоит в том, чтобы сгенерировать случайные имена пользователей, которые может использовать каждый пользователь. Таким образом, вы не сможете сделать много выводов, скажем, "user19281a18a7as", поскольку все остальные поля будут зашифрованы.

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

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

Предложение два

Используйте КЛЮЧ API, чтобы позволить своим пользователям войти. Поэтому вместо уродливого имени пользователя и пароля просто имейте ОДИН уродливый длинный КЛЮЧ API, который пользователь должен вставить в поле входа.

Это не изящно, но если они хотят быть анонимными, это цена, которую они должны заплатить :)

Вы даже можете использовать частные / открытые ключи, если хотите, так как ваши пользователи знакомы с ними.

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