Зашифровать данные в базе данных

kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Зашифровать данные в базе данных

Post by kostik78 »

shadow7256 wrote: 19 Apr 2021 22:34
Встает вопрос где хранить encryption key ? Они предлагают два решения

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

Вот интересно HSM можно использовать для хранения ключа как то?
А в чем проблема выставить file permissions? Root конечно будет иметь доступ но обычно root никому не разрешён а sudo разрешён только ограниченому списку людей

Второй вариант это классический пример как делать не надо :D
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Зашифровать данные в базе данных

Post by Palych »

Напомните, на сервере только один instance крутится?
От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: Зашифровать данные в базе данных

Post by StrangerR »

Flash-04 wrote: 20 Dec 2020 16:33 Во первых все уважающие RDBMS имеют встроенную поддержку шифрования и во вторых, систему управления ключами (что кстати ещё важнее чем само шифрование). Поэтому не надо изобретать велосипед, а читать документацию.
Например: https://docs.microsoft.com/en-us/sql/re ... rver-ver15
ТОлку с этой поддержки нуль. Аппликухи имеют доступ к уже расшифрованным данным. Вся эта прозрачная шифрация гроша ломанного не стоит и нужна лишь для самоуспокоения _мол враг украдет диски и... а ничего не прочтет_. Но кто помнит случай когда враги _крали диски_? Враги впрыскивают код в приложение уже после того как оно ввело все ключи. И select * from users и усе, приехали, грубо говоря.

А вот если шифрует сама аппликуха то впрыснутый код ничего не даст.
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: Зашифровать данные в базе данных

Post by StrangerR »

Flash-04 wrote: 28 Jan 2021 14:06 Их продукты позволяют хранить пароли в vault и много ещё чего. Модная сейчас компания.
Главное, в то что хранится в ваульте подмешать еще что то свое. Чтобы кража ваульта или там передачи из оного (что в целом не так уж и нереально) дала нечто что само по себе бесполезно.

Вообще говоря, самопырки в случае шифрации могут (в сочетании с продакшен алгоритмами) быть понадежнее, чем тупо _взять продукт и заюзать_ - продукт наверняка знаком куче народу а вот его сочетание с самопыркой - не особо. Конечно, ГРУ или там CIS разберутся, но тупо кража данных хакерами станет невозможной. ВОобще говоря, общее правило - всегда иметь больше 1 уровня защиты - так как
_ любой уровеь можно сломать, забор перелезть, стену продолбить
_ любой взлом будет обнаружен за среднее время Т1
_ на слом следующей стены или что там накручено нужно среднее время Т2
_ Т1 должно быть заметно меньше чем Т2.

А любая одноуровневая защита вроде _супер пупер шифрации с каким то супер ваультом_ может быть взломана причем за весьма конечное время (ну еще есть способ называется _пистолет - и сам сознаешься_).

А так да. Хранить любой пусть несимметричный ключ. По этому ключу - его публичной частью зашифровать симметричный пароль и куда то сунуть. А приватным ключем расшифровывать и по полученному расшифровывать данные. А по пути в ключ еще что то свое подсунуть.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Зашифровать данные в базе данных

Post by shadow7256 »

Palych wrote: 20 Apr 2021 04:55 От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
да они сами толком не знают от кого они защищаются. Поэтому и толком не могут дать конкретные требования.

Пока ясно одно - хотят защититься от всего и забесплатно.
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Зашифровать данные в базе данных

Post by Palych »

shadow7256 wrote: 21 Apr 2021 00:56
Palych wrote: 20 Apr 2021 04:55 От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
да они сами толком не знают от кого они защищаются. Поэтому и толком не могут дать конкретные требования.

Пока ясно одно - хотят защититься от всего и забесплатно.
Мы однажды подключались к веб сервису 3-й стороны.
Там задумывалась TLS mutual authentication с сертификатами и проч.
Один очень влиятельный клиент не смог заставить это работать.
И предложил: "Мы не можем справиться с client authentication. Но ведь есть server authentication, Правильно?" Провайдеры сказали: "Правильно. Любой каприз за ваши деньги."

Может и вам например переставить буквы местами и объявить что так и должно быть?
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Зашифровать данные в базе данных

Post by kostik78 »

shadow7256 wrote: 21 Apr 2021 00:56
Palych wrote: 20 Apr 2021 04:55 От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
да они сами толком не знают от кого они защищаются. Поэтому и толком не могут дать конкретные требования.

Пока ясно одно - хотят защититься от всего и забесплатно.
Вопрос Палыча про инстансы важен (dedicated or shared server or containers) и также важно под каким юзверем запущено приложение. Если приложение крутится под выделенным юзверем то достаточно на файле выставить пермишены и не кто кроме root и этого юзера прочитать файл не смогут (для *nix, с Виндой последние 15 лет не общался так что не знаю как там шас)
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Зашифровать данные в базе данных

Post by Flash-04 »

shadow7256 wrote:
Palych wrote: 20 Apr 2021 04:55 От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
да они сами толком не знают от кого они защищаются. Поэтому и толком не могут дать конкретные требования.

Пока ясно одно - хотят защититься от всего и забесплатно.
У банков есть жуткий враг - регуляторы. Вот одно из их требований иметь зашифрованные данные в случае data breach. Это если вам в сеть пробрались враги и вытащили данные просто дампом файлов.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Зашифровать данные в базе данных

Post by Flash-04 »

Palych wrote:
shadow7256 wrote: 21 Apr 2021 00:56
Palych wrote: 20 Apr 2021 04:55 От кого защищаемся - только от доступа к данным помимо приложения, или от других пользователей внутри приложения?
да они сами толком не знают от кого они защищаются. Поэтому и толком не могут дать конкретные требования.

Пока ясно одно - хотят защититься от всего и забесплатно.
Мы однажды подключались к веб сервису 3-й стороны.
Там задумывалась TLS mutual authentication с сертификатами и проч.
Один очень влиятельный клиент не смог заставить это работать.
И предложил: "Мы не можем справиться с client authentication. Но ведь есть server authentication, Правильно?" Провайдеры сказали: "Правильно. Любой каприз за ваши деньги."

Может и вам например переставить буквы местами и объявить что так и должно быть?
Не понял. Server authentication - стандартная вещь. Client authentication - вам выдали сертификат, вы его установили, сервер его проверяет. У нас есть такие сервисы. Так что не заработало?
Кстати был случай, когда используя DNS spoofing враги смогли получить некоторые сертификаты клиентов. Их потом перевыпускали.
Not everyone believes what I believe but my beliefs do not require them to.
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Зашифровать данные в базе данных

Post by Palych »

Flash-04 wrote: 21 Apr 2021 12:37Не понял. Server authentication - стандартная вещь. Client authentication - вам выдали сертификат, вы его установили, сервер его проверяет. У нас есть такие сервисы. Так что не заработало?
Честно говоря, не помню что там не заработало, но выделенное неверно.
И я, честно говоря, зарёкся объяснять почему.
Просто предлагаю всегда не использовать certificate based client authentication.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Зашифровать данные в базе данных

Post by shadow7256 »

kostik78 wrote: 21 Apr 2021 05:22 Вопрос Палыча про инстансы важен (dedicated or shared server or containers) и также важно под каким юзверем запущено приложение. Если приложение крутится под выделенным юзверем то достаточно на файле выставить пермишены и не кто кроме root и этого юзера прочитать файл не смогут (для *nix, с Виндой последние 15 лет не общался так что не знаю как там шас)
я понял теперь про какие инстансы тут говорят :) Система такая..

Есть ДВА компонента, которые будут иметь доступ к шифрованию/дешифрованию данных из базы данных. Первый модуль - Web Application (hosted in IIS). Запущено под тем юзером, под которым настроен Application Pool instance для этого приложения.

Приложение предоставляет интерфейс для настройки параметров SMTP cерверов (пользователь задает host, port, SMTP username, SMTP password, certificates, и другие параметры и сохраняет это в базе данных).

Второй модуль - Windows service, который собственно занимается отсылкой сообщений на SMTP cервер. Сервис тоже запущен под каким то аккаунтом (по дефолту под Local Account, но можно настроить под любым).

Оба модуля (и Web Application и Windows service) установлены на одном сервере.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Зашифровать данные в базе данных

Post by shadow7256 »

Palych wrote: 21 Apr 2021 14:47
Flash-04 wrote: 21 Apr 2021 12:37Не понял. Server authentication - стандартная вещь. Client authentication - вам выдали сертификат, вы его установили, сервер его проверяет. У нас есть такие сервисы. Так что не заработало?
Честно говоря, не помню что там не заработало, но выделенное неверно.
И я, честно говоря, зарёкся объяснять почему.
Просто предлагаю всегда не использовать certificate based client authentication.
а почему неверно? Мы лично так наше WEB API защищаем.

API требует наличия client certificate в каждом запросе, считывает сертификат и делает валидацию (много способов, но один из способов тупо проверить стоит ли такой сертификат на машине сервера).
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Зашифровать данные в базе данных

Post by shadow7256 »

Flash-04 wrote: 21 Apr 2021 12:31 У банков есть жуткий враг - регуляторы. Вот одно из их требований иметь зашифрованные данные в случае data breach. Это если вам в сеть пробрались враги и вытащили данные просто дампом файлов.
да разве мы ж против :)) мы им с самого начала так и предложили сделать, а именно шифровать sensitive data через AES-256. Шифровать самой базой им не подошло (я уже говорил про обезьяну из Индии). Извиняюсь, но они еб..т мозг какой месяц уже, наши менеджеры сказали что this project is set on hold for now.
kostik78
Уже с Приветом
Posts: 3175
Joined: 17 May 2007 14:07

Re: Зашифровать данные в базе данных

Post by kostik78 »

shadow7256 wrote: 21 Apr 2021 15:10
kostik78 wrote: 21 Apr 2021 05:22 Вопрос Палыча про инстансы важен (dedicated or shared server or containers) и также важно под каким юзверем запущено приложение. Если приложение крутится под выделенным юзверем то достаточно на файле выставить пермишены и не кто кроме root и этого юзера прочитать файл не смогут (для *nix, с Виндой последние 15 лет не общался так что не знаю как там шас)
я понял теперь про какие инстансы тут говорят :) Система такая..

Есть ДВА компонента, которые будут иметь доступ к шифрованию/дешифрованию данных из базы данных. Первый модуль - Web Application (hosted in IIS). Запущено под тем юзером, под которым настроен Application Pool instance для этого приложения.

Приложение предоставляет интерфейс для настройки параметров SMTP cерверов (пользователь задает host, port, SMTP username, SMTP password, certificates, и другие параметры и сохраняет это в базе данных).

Второй модуль - Windows service, который собственно занимается отсылкой сообщений на SMTP cервер. Сервис тоже запущен под каким то аккаунтом (по дефолту под Local Account, но можно настроить под любым).

Оба модуля (и Web Application и Windows service) установлены на одном сервере.
В винде есть credentials manager который по идее может сделать похожее на то что я предлагал для *nix. Вроде как можно добавит credentials для системного юзверя и пользоваться ими. Этот вариант рассматривали ?
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Зашифровать данные в базе данных

Post by shadow7256 »

kostik78 wrote: 21 Apr 2021 15:33 В винде есть credentials manager который по идее может сделать похожее на то что я предлагал для *nix. Вроде как можно добавит credentials для системного юзверя и пользоваться ими. Этот вариант рассматривали ?
Мне вот одно непонятно. Допустим я выставил permissions на этот файл (через windows credentials manager или еще как то) и допустим только юзер Вася Пупкин может этот файл открыть.

А что, если кто то утащит этот файл (тупо скопирует на другую машину), то этот файл будет невозможно открыть ?:) :D

Return to “Вопросы и новости IT”