Как защитить медицинские данные в веб-приложении / базе данных?

Я работаю над небольшим парамедицинским приложением (в основном календарь и информация о пациентах), которое будет размещено в Интернете. Приложение позволит использовать несколько учетных записей (по 1 на каждого специалиста), которые не будут обмениваться данными.
Я хочу максимально защитить свои личные данные, особенно, чтобы избежать 2 возможных проблем:

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

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

  • Приложение основано на PHP и Mysql
  • Приложение ДОЛЖНО иметь возможность дешифровать личные данные самостоятельно, потому что, например, оно отправляет фоновые электронные письма и SMS-сообщения пациентам, чтобы напомнить им о своих назначениях.
  • у практикующего часто есть секретарь, который должен иметь возможность доступа к приложению со своим собственным логином / паролем и видеть данные практикующего (но не все, только те, которые связаны с контактной информацией, датой / временем встречи …)
  • Конечно, практикующий врач или секретарь должен иметь возможность выполнить поиск в базе данных, чтобы найти, например, пациента по имени, номеру телефона … даже если он зашифрован в базе данных.

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

На данный момент вот самая простая идея, которую я имею:
1 / когда новый практикующий создает учетную запись, я генерирую уникальный ключ, связанный с учетной записью, который никогда не изменится, и сохраню его в базе данных … это будет своего рода «соль» 2 / для каждых личных данных, Я шифрую его (например, имя пациента, номер телефона) ключом, состоящим из двух частей: одна, которая одинакова для всего приложения (например, хранится в файле конфигурации php) + «соль», взятая у практикующего врача учетная запись.

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

Вопросы :

A / Как вы думаете, он достаточно сильный или я что-то упустил?
Я знаю, что если весь сервер скомпрометирован, данные потенциально небезопасны (если хакер достаточно умен, чтобы найти ключ, напишите код для расшифровки всех данных) … но это не совсем то, чего я боюсь. И я не могу найти лучшего решения, которое позволяет заданию по расписанию дешифровать данные.
У вас есть лучшие предложения?

B / как бы вы зашифровали / расшифровали текстовые данные? (алгоритм, ключ, база данных …) Я действительно новичок в PHP и боюсь ошибиться. Я прочитал документацию, но в ней отсутствует полный реальный пример (от генерации ключа до шифрования / дешифрования текста).
Я боюсь проблем с utf8, проблем с длиной ключа (каковы хорошие практики для создания составного ключа из фиксированной части (файл конфигурации php) и переменной части, хранящейся в базе данных?) …

C / для поисковой системы, как бы вы сделали? например, я хочу найти человека с именем, начинающимся с «ABCD», у меня есть лучший способ сделать это, чем получить весь список зашифрованных имен, расшифровать (php) каждое имя, поместить его в список, а затем ( все еще php) сделать функцию поиска внутри этого списка? Как вы думаете, я должен зашифровать / расшифровать все данные, используя вместо этого функции AES_ENCRYPT / AES_DECRYPT MySQL?

заранее спасибо

-1

Решение

Если ваша база данных — MySQL для шифрования / дешифрования MySQL функции, по моему мнению, написание собственных функций добавляет ноль преимуществ.
Программная ошибка — может быть, пользователь / пароль для приложения такой же, как для базы данных? (это означает, что приложение подключается к базе данных с помощью имени пользователя и пароля, предоставленных практикующим врачом / секретарем), может даже у каждого практикующего есть свой собственный БД с собственными наборами разрешений.

Ad.C
Используйте базу данных двигателя, когда это возможно.
Собственный криптоалгоритм может быть более безопасным, но как обеспечить безопасность с другой стороны — резервное копирование / восстановление, изменение чего-либо с помощью среды — хостинг, дБ?
Безопасность это не только хакер-проф. Используйте это с вниманием 🙂

И самое главное — проверить нормы законодательства о безопасности медицинских данных.

1

Другие решения

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

Вам нужен крипто-эксперт, чтобы посмотреть на это.

0