Зашифровать данные в базе данных
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Зашифровать данные в базе данных
Уважаемые,
Имеем колонку в SLQ Server типа varbinary. В ней хранится конфигурация "сервера" в двоичном виде. То есть это просто объект какого то класса в C# serialized into binary form. Это представление довольно легко перевести в удобочитаемый вид и увидеть что из себя представляет этот объект и какие данные он содержит. Длина данные примерно 4К.
Стоит теперь задача, прежде чем сохранять данные в этой колонке их необходимо зашифровать (ну и потом дешифровать при чтении). По сети никакие данные передавать не надо, приложение (написано на C#), которое читает и записывает данные в базу находится на той же машине что и база данных.
Первое, что приходит на ум это использовать симметричный алгоритм, типа AES. Использует один ключ, быстрый, можно использоват для работы с большими объемами данных..
Начальство зарекнулось про ассиметриченый алгоритм, типа RSA. Но тут у меня сомнения, зачем его использовать. Он обычно используется для шифрации/дешифрации небольших объемов данных, гораздо медленнее, чем симметричный алгоритм, использует два ключа вместо одного.. и т.п.
Вообщем посоветуйте что лучше подойдет
Имеем колонку в SLQ Server типа varbinary. В ней хранится конфигурация "сервера" в двоичном виде. То есть это просто объект какого то класса в C# serialized into binary form. Это представление довольно легко перевести в удобочитаемый вид и увидеть что из себя представляет этот объект и какие данные он содержит. Длина данные примерно 4К.
Стоит теперь задача, прежде чем сохранять данные в этой колонке их необходимо зашифровать (ну и потом дешифровать при чтении). По сети никакие данные передавать не надо, приложение (написано на C#), которое читает и записывает данные в базу находится на той же машине что и база данных.
Первое, что приходит на ум это использовать симметричный алгоритм, типа AES. Использует один ключ, быстрый, можно использоват для работы с большими объемами данных..
Начальство зарекнулось про ассиметриченый алгоритм, типа RSA. Но тут у меня сомнения, зачем его использовать. Он обычно используется для шифрации/дешифрации небольших объемов данных, гораздо медленнее, чем симметричный алгоритм, использует два ключа вместо одного.. и т.п.
Вообщем посоветуйте что лучше подойдет
-
- Уже с Приветом
- Posts: 1830
- Joined: 04 Mar 2002 10:01
- Location: Tampa
Re: Зашифровать данные в базе данных
Поле с guid в таблице есть? Шифруй через него. И никто не догадается
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
-
- Уже с Приветом
- Posts: 2175
- Joined: 29 Jul 2019 17:34
- Location: Нуёкщина -> Притампье
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
Во первых все уважающие RDBMS имеют встроенную поддержку шифрования и во вторых, систему управления ключами (что кстати ещё важнее чем само шифрование). Поэтому не надо изобретать велосипед, а читать документацию.
Например: https://docs.microsoft.com/en-us/sql/re ... rver-ver15
Например: https://docs.microsoft.com/en-us/sql/re ... rver-ver15
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
а потом его на Гитхаб в лучших традициях
Если ваша компания ходит под какими-нибудь регулейшанами типа HIPAA, то готовтесь к увольнению после первого же аудита.
Если ваша компания ходит под какими-нибудь регулейшанами типа HIPAA, то готовтесь к увольнению после первого же аудита.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Зашифровать данные в базе данных
это потребует работы от клиента и его DBA, что очень трудно. Немного истории. Клиент - банк Barclay's - самый еба...ый из всех клиентов, которые у нас есть.Flash-04 wrote: ↑20 Dec 2020 16:33 Во первых все уважающие RDBMS имеют встроенную поддержку шифрования и во вторых, систему управления ключами (что кстати ещё важнее чем само шифрование). Поэтому не надо изобретать велосипед, а читать документацию.
Например: https://docs.microsoft.com/en-us/sql/re ... rver-ver15
Как только у них возникает какая то "проблема" они пишут нам и требуют решить ее немедленно, как будто у нас этот банк единственный клиент и у нас нет текущих проектов, мы должны все бросить и решать их проблему. Помимо этого они начинают писать писульки своему высшему начальству и угрожают что будут писать нашему СЕО, что мы не выполняем их требования. Вообщем гавнюки еще те.
У них DBA сидят в Индии, они ничего не знают и делать не хотят, кроме того, как создавать проблемы нам на ровном месте. Вот и сейчас говорят своему начальству, что типа наши sensitive данные хранятся в базе данных в незащищенном виде. Мы говорим так вы можете вообще использовать Transparent Data Encryption (TDE) в вашей базе и защищить все данные какие вам надо. Им лень изучать это и они просто пишут отмазку - it would not be enough in terms of security и типа вы должны сами шифровать ваши данные когда вы их записываете в нашу базу. Поэтому приходится изобретать велосипед.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
сырцы с ключами. знаете сколько их каждый день на Гитхабе находят?
а надо бы знать, чтобы потом не оказаться крайним.уж не знаю под чем ходит компания наша
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
пусть у вашего менеджера голова болит. Вам надо знать плюсы и минусы всей этой кухни с шифрованием. Для ключей кстати придётся организовывать какой-нибудь Vault, продуктов много для этого.shadow7256 wrote: ↑20 Dec 2020 16:49 это потребует работы от клиента и его DBA, что очень трудно. Немного истории. Клиент - банк Barclay's - самый еба...ый из всех клиентов, которые у нас есть.
Вообще всё это тянет на хороший project. По крайней мере в моей конторе так бы оно и было. Все что связано с безопасностью должно хорошо документироваться и иметь "хвост" документов для аудита.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
хороший совет! чтобы гарантированно стать всеобщим посмешищем после data breach который неизбежно произойдет рано или поздно
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 7723
- Joined: 29 Mar 2000 10:01
- Location: Kirkland,WA
Re: Зашифровать данные в базе данных
там есть и такие приблуды -
https://docs.microsoft.com/en-us/sql/re ... rver-ver15
https://docs.microsoft.com/en-us/sql/re ... rver-ver15
-
- Уже с Приветом
- Posts: 17542
- Joined: 15 Aug 2002 00:39
- Location: Maryland
Re: Зашифровать данные в базе данных
Я бы вообще через environment variables выставлял все это, и нигде никакие пароли не валяются...
Не задираться, а то съем!..
-
- Уже с Приветом
- Posts: 1830
- Joined: 04 Mar 2002 10:01
- Location: Tampa
Re: Зашифровать данные в базе данных
Хороший совет, практичный. И алгоритм быстрый, и ключ динамический, и в исходнике хранить его не надо.
На самом деле, необязательно брать guid целиком, можно часть, можно каждый 2-й символ, можно производную.
Можно вообще из другой таблицы брать.
Если кто украдёт базу - флаг ему в руки, пусть разгадывает, как на самом деле ключ генерировался.
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зашифровать данные в базе данных
Это называется security via obscurity и много раз было, что создатели именно так надеялись, что "никто не догадается" и таки догадывались.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Зашифровать данные в базе данных
а у него особо не болит, менеджер слышал, что можно использовать RSA для шифрования и брякнул об этом клиенту, ну а клиент это Barclay банк тупорылый говорит ну зашибись пользуйте RSA. А какие у него ограничения, для чего он вообще нужен они и знать не знают. И менеджер щас говорит типа, ну вот клиент сказал чтобы мы пользовали RSA и точка. Пи...ц.
ну я сделал более менее research, просто я до этого уже имел дело и с RSA и с AES в моем коде, но там мы шифровали именно данные которые передавались между клиентом и сервером без всякой базы данных. Вот и спросил нормально ни будет пользовать AES для шифровки данных при вставке в базу данных.Вам надо знать плюсы и минусы всей этой кухни с шифрованием.
я согласен, так дело еще в том, что этот придурошный Barclay хочет, чтобы мы это все бесплатно сделали для них. И походу менеджеры согласны наши.Вообще всё это тянет на хороший project.
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Зашифровать данные в базе данных
4к можно просто шифровать используя 8к (или больше) public + private key. Public key можно в репозитории/configuration management в открытом виде хранить, Private key попадает на сервер во время либо провиженинга либо с использований всяких vault с single use tokens. В облаках типа azure&aws все есть уже. Если это свой DC то можно замутить на основе hashicorp vault.shadow7256 wrote: ↑20 Dec 2020 18:54а у него особо не болит, менеджер слышал, что можно использовать RSA для шифрования и брякнул об этом клиенту, ну а клиент это Barclay банк тупорылый говорит ну зашибись пользуйте RSA. А какие у него ограничения, для чего он вообще нужен они и знать не знают. И менеджер щас говорит типа, ну вот клиент сказал чтобы мы пользовали RSA и точка. Пи...ц.
ну я сделал более менее research, просто я до этого уже имел дело и с RSA и с AES в моем коде, но там мы шифровали именно данные которые передавались между клиентом и сервером без всякой базы данных. Вот и спросил нормально ни будет пользовать AES для шифровки данных при вставке в базу данных.Вам надо знать плюсы и минусы всей этой кухни с шифрованием.
я согласен, так дело еще в том, что этот придурошный Barclay хочет, чтобы мы это все бесплатно сделали для них. И походу менеджеры согласны наши.Вообще всё это тянет на хороший project.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Зашифровать данные в базе данных
Объясните чем такие сложности будут лучше, чем просто использовать AES? Вот хоть один плюс назовите 4К это примерная цифра.. может быть и 3К.. а может быть и 6К, заранее неизвестноkostik78 wrote: ↑20 Dec 2020 19:31 4к можно просто шифровать используя 8к (или больше) public + private key. Public key можно в репозитории/configuration management в открытом виде хранить, Private key попадает на сервер во время либо провиженинга либо с использований всяких vault с single use tokens. В облаках типа azure&aws все есть уже. Если это свой DC то можно замутить на основе hashicorp vault.
-
- Уже с Приветом
- Posts: 13709
- Joined: 16 Jan 2001 10:01
Re: Зашифровать данные в базе данных
Допустим кто-то прочитает эти данные из базы.shadow7256 wrote: ↑20 Dec 2020 15:42 Имеем колонку в SLQ Server типа varbinary. В ней хранится конфигурация "сервера" в двоичном виде. То есть это просто объект какого то класса в C# serialized into binary form. Это представление довольно легко перевести в удобочитаемый вид и увидеть что из себя представляет этот объект и какие данные он содержит. Длина данные примерно 4К.
Их можно как-то использовать вне приложения?
Точнее - "снаружи" приложения.
-
- Уже с Приветом
- Posts: 13709
- Joined: 16 Jan 2001 10:01
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Зашифровать данные в базе данных
ну типа да. они этого и боятся, там находятся данные SMTP/POP3 серверов, к которым может обращатся наша программа. Этот сраный барклай же уже один раз взломали и украли кучу информации у них. Так вот теперь они говорят так "если кто то получит доступ к базе данных, то он сможет прочитать ваши данные и получить еще больше информации о других серверах". Как по мне так это такая чушь.. так сделайте так, чтобы доступ к базе не получил "кто то". Защитите базу данных и доступ к базе данных.Palych wrote: ↑20 Dec 2020 19:55Допустим кто-то прочитает эти данные из базы.shadow7256 wrote: ↑20 Dec 2020 15:42 Имеем колонку в SLQ Server типа varbinary. В ней хранится конфигурация "сервера" в двоичном виде. То есть это просто объект какого то класса в C# serialized into binary form. Это представление довольно легко перевести в удобочитаемый вид и увидеть что из себя представляет этот объект и какие данные он содержит. Длина данные примерно 4К.
Их можно как-то использовать вне приложения?
Точнее - "снаружи" приложения.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Зашифровать данные в базе данных
Вы же конфигурацию вроде криптуете ? Кто конфигурацию криптует - человек или программа? Если программа тогда да просто симитричный алгоритм с паролем через vault. Если человек тогда обычно задача не допустить утечки пароля для большого количества людей тогда public key для шифрования и private для дешифровки. Понятно о чем я говорю ?shadow7256 wrote: ↑20 Dec 2020 19:47Объясните чем такие сложности будут лучше, чем просто использовать AES? Вот хоть один плюс назовите 4К это примерная цифра.. может быть и 3К.. а может быть и 6К, заранее неизвестноkostik78 wrote: ↑20 Dec 2020 19:31 4к можно просто шифровать используя 8к (или больше) public + private key. Public key можно в репозитории/configuration management в открытом виде хранить, Private key попадает на сервер во время либо провиженинга либо с использований всяких vault с single use tokens. В облаках типа azure&aws все есть уже. Если это свой DC то можно замутить на основе hashicorp vault.
Если длинна данных которые нужно криптовать не известна то public + private key в чистом виде не подойдёт ибо длинна ключа должна быть больше длинны криптованных данных.
-
- Уже с Приветом
- Posts: 9393
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
Re: Зашифровать данные в базе данных
в данный момент не совсем криптуем, а просто сохраняем конфигурацию сервера в двоичном формате, перевести его обратно в читаемый это как два пальца, даже на уровне SQL Это можно сделать.. как то типа SELECT CAST(varchar....) ну вообще преобразоваться двоичное значение в строку это легко в SQL делается и в итоге можно увидеть полную конфигурацию поэтому сказали криптовать прежде чем в базу вносить
наше приложение должно это делатьКто конфигурацию криптует - человек или программа?
вроде при симметричном шифровании нужено иметь ключ + IV (вектор инициализации). Придется оба значения хранить в vault, я с этими vault ни разу дела не имел. Это какие то платные программы специальные для хранения ключей? C# программа сможет легко читать оттуда эти данные?Если программа тогда да просто симитричный алгоритм с паролем через vault.
длина заранее неизвестна, если конфигурация сервера простая, то может и 1К быть.. а если сервер содержит много параметров, то может и больше чем 4К быть.Если длинна данных которые нужно криптовать не известна то public + private key в чистом виде не подойдёт ибо длинна ключа должна быть больше длинны криптованных данных.