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

Я работаю над небольшим парамедицинским приложением (главным образом, календарем и информацией о пациентах), которое будет размещаться в Интернете. Приложение позволит использовать несколько учетных записей (по 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?

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

2 ответа

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

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

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

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

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

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