Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как лучше хранить "секретную" инфу в базе

2585  1 2 3 4 все
AlexNek патриот18.05.23 22:58
AlexNek
18.05.23 22:58 

Допустим, пользователь имеет набор некой информации которая должна быть видима только ему.

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

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

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

Вроде телеграмм, что то подобное имеет. В какую сторону рыть? Пока еще вообще ничего не искал, только идея появилась о подобной проге.

#1 
Murr патриот19.05.23 06:07
Murr
NEW 19.05.23 06:07 
в ответ AlexNek 18.05.23 22:58

1. Включить шифрацию полей в базе.

2. Шифровать самостоятельно.

#2 
AlexNek патриот19.05.23 09:50
AlexNek
NEW 19.05.23 09:50 
в ответ Murr 19.05.23 06:07

Вариант с базой даже не рассматривается - никакой привязки к конкретной базе.


2. Шифровать самостоятельно.

ну так об этом то и вопрос.

Насколько я пока знаю для дешифрования нужен ключ.

Но в данном случае, ключей должно быть много, минимум два.

Потому как пользователь может всегда читать свою информацию, но может поделится ею с другим пользователем или с группой пользователей.

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

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

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


#3 
gendy Dinosaur19.05.23 10:28
gendy
NEW 19.05.23 10:28 
в ответ AlexNek 19.05.23 09:50

А почему бы не разделить информацию по группам, шифровать каждую группу своим ключём, и раздавать ключи от совместных папок. Обьединить папки зашифрованные разными ключами в одно дерево проблем не должно составить, в крайнем случае обьеденить их в одну категорию, как это сделано например в виндовсексплорер ну или использовать линкс, Более интересный вариант конечно управление пользователями, обращение при логине на центральный сервер за временными ключами к ресурсам. Тогда достаточно логина и пароля, а сервер уже решает какие ключи выдать

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#4 
AlexNek патриот19.05.23 12:44
AlexNek
NEW 19.05.23 12:44 
в ответ gendy 19.05.23 10:28
шифровать каждую группу своим ключём, и раздавать ключи от совместных папок.

вопрос остается тем же - где хранить ключи?

И как быть если одна и та же инфа должна быть расшарена разным группам?


а сервер уже решает какие ключи выдать

С этим пока еще не сталкивался и смутно представляю как это должно работать. По каким ключевым словам искать?

#5 
Murr патриот19.05.23 16:30
Murr
NEW 19.05.23 16:30 
в ответ AlexNek 19.05.23 09:50

Насколько я пока знаю для дешифрования нужен ключ.

-----

Там по-разному - в зависимости от метода.

Можно для шифрования пользовать один, а для дешифровки - другой. Как работает - не спрашивай - так глубоко не копал.


И вот где нам хранить ключи?

-----

Посмотри как делается расширение для SQL-сервера.


Обязательно то есть какой то админ

------

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


#6 
Grossmutters_G прохожий19.05.23 18:18
NEW 19.05.23 18:18 
в ответ AlexNek 19.05.23 09:50, Последний раз изменено 19.05.23 18:19 (Grossmutters_G)

А приложение предполагается настольное или мобильное?

Смотреть Вам, видимо, надо в сторону PKI (Public Key Infrastructure) и Secure Key Exchange (Диффи-Хелман или, например, эллиптический Диффи-Хеллман и т.п.)

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

А далее, идея:

- Вы обмениваетесь ключами с доверенными пользователями

- А также вы обмениваетесь "групповыми" ключами с пользователями из доверенных групп (можно их автоматически считать доверенными, тут надо смотреть на логику обмена сообщениями, которую нужно реализовать)


Готовые реализации не подскажу, но думаю DHKE и всякая генерация RSA ключей есть для большинства известных языков (C#, Java, etc)


#7 
AlexNek патриот19.05.23 19:03
AlexNek
NEW 19.05.23 19:03 
в ответ Murr 19.05.23 16:30
Можно для шифрования пользовать один, а для дешифровки - другой

Насколько я помню это немного для других целей.

Вот еще нашел, что не знал, только пока непонятно как это в "базу засунуть"

https://ru.wikipedia.org/wiki/Гибр�%...


сидят двое в разных местах

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

А для отладки можно использовать тестовую систему где разработчикам всё известно.

#8 
AlexNek патриот19.05.23 19:24
AlexNek
NEW 19.05.23 19:24 
в ответ Grossmutters_G 19.05.23 18:18
приложение предполагается настольное или мобильное?

Исключительно веб сервер.


надо в сторону PKI

Спасибо, глянул, но выглядит слишком сложно в реализации. Да и непонятно пока, как это всё применить.


Вот у нас пользователь - владелец инфы. Зашифровали мы инфу в базу. Теперь эту инфу нужно выдать нескольким группам в которых разные пользователи и пользователи могут менять группы.


и всякая генерация RSA ключей

Это всё есть и реализация - это следующий этап.

https://learn.microsoft.com/en-us/dotnet/standard/security...


Пока я просто не знаю очень многого из теории криптографии. Просто что-то где то слышал и кое-что применял.

#9 
gendy Dinosaur19.05.23 19:36
gendy
NEW 19.05.23 19:36 
в ответ AlexNek 19.05.23 12:44
вопрос остается тем же - где хранить ключи?

По ситуации. Если есть админ, то на центральном сервере, если нет, то у каждого набор ключей к разделам куда у них есть доступ

И как быть если одна и та же инфа должна быть расшарена разным группам?


Шифруем инфу другим ключем, раздаём ключ участникам всех групп имеющим доступ к новому разделу.

С этим пока еще не сталкивался и смутно представляю как это должно работать. По каким ключевым словам искать?


А может не изобретать велосипед? Любая современная файловая система имеет подходящую систему прав и разрешений. Может даже шифроваться, чтобы посторонние даже физический доступ не получили. Базы данных тоже самое. И системы NAS тоже

Да нужен админ, который будет управлять правами, но при сложной архитектуре без админа всё равно никуда.

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#10 
AlexNek патриот19.05.23 20:19
AlexNek
NEW 19.05.23 20:19 
в ответ gendy 19.05.23 19:36
А может не изобретать велосипед? Любая современная файловая система имеет подходящую систему прав и разрешений.

перепробовали уже несколько прог, ни одна не подходит.

Каким образом это совместить с вебом?

Да и даже локально. Сделал я себе файл в папочке как его разшарить некоторым группам пользователей? Скопировать в нужные папочки? А при редактировании не забыть всем всё обновить.

#11 
gendy Dinosaur19.05.23 21:57
gendy
NEW 19.05.23 21:57 
в ответ AlexNek 19.05.23 20:19
Каким образом это совместить с вебом?

Использовать любой NAS поддерживающий группы. Я немного имел с ними дел, но например freenas отвечает всем требованиям. Да и netzcloud тоже,


Да и даже локально. Сделал я себе файл в папочке как его разшарить некоторым группам пользователей? Скопировать в нужные папочки? А при редактировании не забыть всем всё обновить.


Создать локальную группу , дать ей нужные права на папку. Создать пользователей включить их в эту группу. При необходимости создать вторую, третью группу. Распихать пользователей.

Оптимально всё это творить на линуксе, но и виндовс про всё это поддерживает, но более ограниченно

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#12 
alex445 коренной житель20.05.23 10:24
NEW 20.05.23 10:24 
в ответ AlexNek 18.05.23 22:58

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

#13 
AlexNek патриот20.05.23 11:40
AlexNek
NEW 20.05.23 11:40 
в ответ alex445 20.05.23 10:24
Что вы паритесь?

Да уж, месье, нифига не понимает толк в извращениях бебе

На 4 дня выходных обязательно нужна была задачка.

#14 
AlexNek патриот20.05.23 11:48
AlexNek
NEW 20.05.23 11:48 
в ответ gendy 19.05.23 21:57
но например freenas отвечает всем требованиям.

нифига не понял, это же прога которую надо установить на сервер.

Как ее установить на azure или на что то подобное и как ее скрестить с моим сайтом?


Создать локальную группу , дать ей нужные права на папку

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

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

#15 
MrSanders коренной житель20.05.23 12:39
NEW 20.05.23 12:39 
в ответ AlexNek 19.05.23 09:50
Другой пользователь может читать или расшаренную с ним информацию или свою. И хотелось бы иметь только одну копию шифрованной информации. Но похоже так не получится.
...
Если стащили один ключ, то тогда разрешено прочитать только ту информацию которая связана с именно с этим ключом/пользователем.

Есть ресурсы и есть пользователи. У пользователя есть ключ для шифрования (КП - ключ пользователя). Пользователь хочет сохранить где-то у нас данные (ресурс). В зашифрованном виде. Чо делать?

Создаём для пользователя новый ключ шифрования - ключ ресурса (КР). Шифруем данные КР и храним их (ЗР зашифрованный ресурс). Шифруем КР с помощью КП = ЗКР. Храним ЗКР.

Мысль понятна? У каждого ресурса свой КР. Если пользователь А (с ключом КПа), владеющий ресурсом Р1 (с ключом КР1) хочет поделиться им с пользователем Б (КПб), а копировать; содержимое мы не хотим, создаём ЗКР1б из КР1 (КР1 зашифрованный КПб) и делимся им с Б. Б хочет прочитать Р1? Да пожалста. Ввёл свой ключ, прочитал ЗКР1, расшифровал, получил КР1, расшифровал им ресурс.


Используем мы симметричные или асимметричные ключи - не принципиально.


Итого. Мы, не зная ключей пользователей, ничего прочитать не можем, хоть всё и храним. Ресурсы не копируются. Настройка доступа пользователя (или групп) происходит через управление ЗКР. Если пользователь про...теряет свой ключ, он потеряет доступ к данным. Совсем.


Домашнее задание: что делать, если надо отозвать право доступа к ресурсу Р2 у пользователя В? Пользователи А и Б тоже имеют доступ к ресурсу.


П.С. Да, при доступе к системе пользователя мы, конечно, сможем выловить расшифрованные ключи из памяти. Ну так он и так свой ключ знает...

#16 
AlexNek патриот20.05.23 14:45
AlexNek
NEW 20.05.23 14:45 
в ответ MrSanders 20.05.23 12:39
Мысль понятна?

наполовину


#17 
gendy Dinosaur20.05.23 16:01
gendy
NEW 20.05.23 16:01 
в ответ MrSanders 20.05.23 12:39
Домашнее задание: что делать, если надо отозвать право доступа к ресурсу Р2 у пользователя В? Пользователи А и Б тоже имеют доступ к ресурсу.

создаём третий ключ, админский и шифруем все ЗКР. Дальше два варианта Децентрализованный : при блокировке одного пользователя придется менять все ЗКР. Центральный : для каждого ЗКР создаём свой админский ключ и сохраняем в базе. при необходимости генерим новый админский ключ для этого ЗКР , старый обьявляем недействительным, это нужно не только в для отзыва прав но и в случае кражи ключа

Если пользователь А (с ключом КПа), владеющий ресурсом Р1 (с ключом КР1) хочет поделиться им с пользователем Б (КПб), а копировать; содержимое мы не хотим, создаём ЗКР1б из КР1 (КР1 зашифрованный КПб) и делимся им с Б. Б хочет прочитать Р1? Да пожалста.


где шифровать будем? если на клиенте пользователя А, то он должен получить ключ пользователя Б, Если на на клиенте Б то наоборот Б получит ключ ресурса А, оба варианта исключително ненадёжны.

Ну а если на сервере , то все ключи будут в распоряжении админа


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

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#18 
gendy Dinosaur20.05.23 16:12
gendy
NEW 20.05.23 16:12 
в ответ AlexNek 20.05.23 11:48
нифига не понял, это же прога которую надо установить на сервер.

более того, это уже и есть НАС сервер

Как ее установить на azure или на что то подобное и как ее скрестить с моим сайтом?

сделать отдельный файлосервер

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

скорее всего никак. вначале решить где хоститсая будет

Тогда любой кто имеет доступ к диску может всё прочитать и удобно скопировать.

не давать любому доступ к рут и он сможет прочитать только свои данные

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#19 
AlexNek патриот20.05.23 18:12
AlexNek
NEW 20.05.23 18:12 
в ответ gendy 20.05.23 16:12
сделать отдельный файлосервер

Спасибо, но не нужно. Уже есть и для данного случая совершенно не подходит.


вначале решить где хоститсая будет

тогда данный вариант не годится по определению.


не давать любому доступ к рут

неважно кому. И базы вытягивают и файлы.

#20 
1 2 3 4 все