Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Скрыть данные с помощью md5 hash  [new]
uaggster
Member

Откуда:
Сообщений: 757
Коллеги, вопрос, как я понимаю, не совсем по MSSQLSERVER, но всё же рискну задать здесь, может кто сталкивался.
В таблице имеется некое поле, содержащее 10 цифр. Предположим, это номер счета.
Хочется принципиально скрыть эти данные для просмотра, оставив возможность поиска по этому полю (по критерию равенства).
Естественный способ - это заместить сами цифры md5 хешем.
И проблема - решается. Искать в таблице по известному значению - можем легко, восстановить исходное значение из хеша - невозможно... вроде бы.

Но! В поле то всего 10 цифр. Можно тупо построить таблицу на 10млрд. хешей от '0000000000' до '9999999999' и дешифровать сразу все значения.
Ну, или вычислять порциями :)

Хотелось бы как-нибудь драматически повысить стоимость дешифровки данных.
Кто нибудь знает, как это делается в теории?
15 окт 15, 20:32    [18284878]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
https://ru.wikipedia.org/wiki/Соль_(криптография)

Но тема - явно оффтопик.

UPD: вообще, ваша тема вот: https://ru.wikipedia.org/wiki/Радужная_таблица

Сообщение было отредактировано: 15 окт 15, 20:47
15 окт 15, 20:37    [18284900]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
uaggster
Member

Откуда:
Сообщений: 757
Да, я понимаю, что тема - офтопик. :(

И соль не совсем подходит, к сожалению. Да, она препятствует расшифровке всех счетов, но конкретный счет - не защищает.
Т.е. весь миллион - не расшифруют, но конкретный счет из миллиона - легко.
Хотелось бы защитить и конкретный счет.
Видимо, вот это как раз невозможно.
15 окт 15, 21:18    [18285039]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
uaggster
Member

Откуда:
Сообщений: 757
И, кроме того, не понятно, как эту соль то припрячь?

Ну вот, например, мне нужно найти в базе обладателя счета 1230001230? И? Как я узнаю, в каком виде будет выглядеть его хеш с солью?
Я должен выбрать весь набор солей из базы, посолить ими счет и сравнить с солёным хешем из поля рядом?
Т.е. полное сканирование таблицы для поиска нужного значения, и миллион вычислений хеша.
Так?
15 окт 15, 22:32    [18285209]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
10 ярдов
Guest
uaggster,

если есть возможность брать и искать, задавая номер в открытой форме, то какая разница, зашифрован он или нет?

автор
Можно тупо построить таблицу на 10млрд. хешей от '0000000000' до '9999999999' и дешифровать сразу все значения

Можно тупо построить таблицу на 10млрд. номеров счетов от '0000000000' до '9999999999' и найти всех обладателей и всю инфу
15 окт 15, 23:06    [18285289]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Есть же встроенное криптование, зачем вам велосипеды.

В практике в серверную зайдет злавред, стукнув по голове охранника и унесет ваш сервер.

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

Поскупился Ходор на геостационарный спутник с сервером бухгалтерии - пришлось варежки шить.
15 окт 15, 23:28    [18285348]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
uaggster
Т.е. весь миллион - не расшифруют, но конкретный счет из миллиона - легко.
Ну, извиняйте. Увеличивайте размерность счета. Однозначный счет хоть чем хешируйте, все равно угадают с вероятностью 10%.

uaggster
И, кроме того, не понятно, как эту соль то припрячь?
Соль и хеш хранятся рядом. При поиске соль добавляется в запрашиваемое значение и от нее считается хеш.
16 окт 15, 01:03    [18285515]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
А, да. По ссылкам же все написано.

Защита от радужных таблиц (https://ru.wikipedia.org/wiki/Радужная_таблица#.D0.97.D0.B0.D1.89.D0.B8.D1.82.D0.B0_.D0.BE.D1.82_.D1.80.D0.B0.D0.B4.D1.83.D0.B6.D0.BD.D1.8B.D1.85_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86 )
Другим возможным способом борьбы против атак, использующих предварительные вычисления, является растяжение ключа (англ. key stretching). Например:

ключ = хеш(пароль + соль)
for 1 to 65536 do
ключ = хеш(ключ + пароль + соль)


Тогда, чтобы взломать один хеш, придется выполнить 65536 * 10 лядрдов вычислений хеша, что уже на 5 порядков больше. И если уж вам защищенность важнее производительности, то "65536" можно увеличивать до бесконечности.

Сообщение было отредактировано: 16 окт 15, 03:09
16 окт 15, 03:07    [18285551]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
aleks2
Guest
uaggster
Коллеги, вопрос, как я понимаю, не совсем по MSSQLSERVER, но всё же рискну задать здесь, может кто сталкивался.
В таблице имеется некое поле, содержащее 10 цифр. Предположим, это номер счета.
Хочется принципиально скрыть эти данные для просмотра, оставив возможность поиска по этому полю (по критерию равенства).
Естественный способ - это заместить сами цифры md5 хешем.
И проблема - решается. Искать в таблице по известному значению - можем легко, восстановить исходное значение из хеша - невозможно... вроде бы.

Но! В поле то всего 10 цифр. Можно тупо построить таблицу на 10млрд. хешей от '0000000000' до '9999999999' и дешифровать сразу все значения.
Ну, или вычислять порциями :)

Хотелось бы как-нибудь драматически повысить стоимость дешифровки данных.
Кто нибудь знает, как это делается в теории?


Хе-хе. Теоретики.

Я так понимаю задачу:
1. "Настоящий номер счета" в таблице должен отсутствовать. Вместо него хоцца "левый номер" по которому НЕЛЬЗЯ восстановить исходный "Настоящий номер счета".
2. Но нужно однозначное соответствие "Настоящий номер счета" <-> "левый номер", чтобы можно было найти, зная "Настоящий номер счета", строку в таблице.

3. Если не заморачиваться за идиотизм постановки.

То возникает вопрос: однозначное соответствие "Настоящий номер счета" -> "левый номер" должно вычисляться
a) БЕЗ ПРИВЛЕЧЕНИЯ данных вне базы
или
б) НА основе ВНЕШНИХ ДАННЫХ, например, пароля, известного только владельцу счета?

если
а) - просто состряпайте доп. таблицу соответствия "Настоящий номер счета" <-> "левый номер", заполните "левый номер" рандомными номерами и будьте счастливы.
б) - шифруйте пароль номером счета или номер счета паролем и будет вам щастье.

PS. Что касаемо "соли" - это не тот случай. Идея "соли" - не допустить генерации одинаковых хешей для одинаковых паролей.
Но для случая тредстартера "соление" означает необходимость вычислить все "10млрд. хешей" для поиска нужной строки в таблице.
Гавриленко Сергей Алексеевич
Соль и хеш хранятся рядом. При поиске соль добавляется в запрашиваемое значение и от нее считается хеш.
16 окт 15, 07:06    [18285613]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Гавриленко Сергей Алексеевич,

Зачем это огород.
Создай отдельную схему в базе или вообще отдельный сервер с отдельной базой, у всех на него права забрать.
Создать процедуру которая будет выбирать только по 1 значению и возвращать. + ограничение на кол-во вызовов по времени. не чаще 1 раза в мин для логина или вообще.(wait for вам с помощь) + журналирование запусков и запрет на повторный вызов чаще чем опред. пром. времени.
+ рекомендуется к общеизвестному алгоритму добавить что-то от себя, чтобы и алгоритм шифрования был не известен.

Ибо имея неограниченный доступ на селект - можно скачать всю табличку и дома поиграться с ней просто перебирая все значения от 1 до 10 млрд построив для них хэш по такому же алгоритму.

Можно хранить данные на 2 разных серверах. - т.н. горизонтальный срез.
16 окт 15, 07:26    [18285636]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
aleks2
Но для случая тредстартера "соление" означает необходимость вычислить все "10млрд. хешей" для поиска нужной строки в таблице.
Да, верно. Соль не походит. UPD: вернее, не подходит, если счетов миллиарды. А если несколько десятков тысяч, то может быть время поиска и будет удовлетворять.

aleks2
просто состряпайте доп. таблицу соответствия "Настоящий номер счета" <-> "левый номер", заполните "левый номер" рандомными номерами и будьте счастливы.
Я так понимаю, что хранение первоначального номера счета в открытом виде в соседней таблице не соответствует желанию автора "хочется принципиально скрыть эти данные для просмотра".

Jaffar
Зачем это огород.
Этот огород затем, чтобы обезопасить данные. Утянуть их могут тысячей и одним способом - от взлома пароля учетки того единственного "спеца" по безопасности, придумавшего эту схему, до банального "украсть физический сервер". А хешированине усложняет получение данных в случае, если все данные сперли и все алгоритмы хеширования разреверсили.

Сообщение было отредактировано: 16 окт 15, 11:44
16 окт 15, 11:20    [18286636]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
aleks2
просто состряпайте доп. таблицу соответствия "Настоящий номер счета" <-> "левый номер", заполните "левый номер" рандомными номерами и будьте счастливы.
Я так понимаю, что хранение первоначального номера счета в открытом виде в соседней таблице не соответствует желанию автора "хочется принципиально скрыть эти данные для просмотра".

Дык не надо помогать страусу зарывать голову в песок.
Пол бетонный.

Хочет скрыть - пущай удалит таблицу соответствий в безопасное место.

А с хешами ваще нарваться можно на коллизию. Вот будет весело.
16 окт 15, 11:50    [18286895]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Гавриленко Сергей Алексеевич,

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

не смешите меня.
Что-то я ни разу не слышал об успешном налете на банк с целью украсть сервер с данными.

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

Сервер украдут, ага - Швейцарский банк открыл новое представительство в подвале пятиэтажки в г. Челябинске?
Сервер в опасности, БОМЖИ могут украсть и сдать на металлолом.

Тогда уж проще автора взять за ректуми расшифровать все с помощью "терморектального криптоанализа".
16 окт 15, 12:46    [18287269]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Jaffar,

Дешифруем алгоритмы любой сложности с помощью паялька.
16 окт 15, 12:48    [18287287]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
Jaffar
Гавриленко Сергей Алексеевич,

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

не смешите меня.
Что-то я ни разу не слышал об успешном налете на банк с целью украсть сервер с данными.

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

Сервер украдут, ага - Швейцарский банк открыл новое представительство в подвале пятиэтажки в г. Челябинске?
Сервер в опасности, БОМЖИ могут украсть и сдать на металлолом.

Тогда уж проще автора взять за ректуми расшифровать все с помощью "терморектального криптоанализа".
Вот именно потому, что все считают, что их данные никому не нужны, их прут наплево и направо не особо напрягаясь.
З.Ы. Компетентные органы вывезут ваш физически защищенный сервер за два часа.
16 окт 15, 13:38    [18287672]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49505
uaggster
Естественный способ - это заместить сами цифры md5 хешем.

И долго чесать репу при получении коллизии.
16 окт 15, 14:17    [18287980]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
Dimitry Sibiryakov
uaggster
Естественный способ - это заместить сами цифры md5 хешем.

И долго чесать репу при получении коллизии.
10 лярдов - слишком малая выборка, чтобы на ней поиметь коллизии. К тому же вероятность получения можно довольно просто минимизировать считая два хеша - от исходной строки и от, скажем, перевернутой.
16 окт 15, 14:23    [18288036]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
Dimitry Sibiryakov
пропущено...

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

Еще раз помянем бредовость постановки.
Если "настоящий номер счета" знает только владелец - с таким же успехом он может знать "еще один номер для базы".
Если "настоящий номер счета" знает не только владелец - значит он где-то записан - каков смысл этого хеширования?
16 окт 15, 14:38    [18288147]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
uaggster
Member

Откуда:
Сообщений: 757
Коллеги, прошу прощения, постановка не совсем бредовая.
Это т.н. верификационная база.
Вот есть, к примеру, некий VIN. Его значение - псевдослучайно. И агрегат состоит из кучи деталей с разными VINами.
Идея в том, чтобы создать некую базу для передачи на места, по которой можно легко проверить, входить ли деталь с данным VIN в конкретный агрегат НЕ ПЕРЕДАВАЯ САМОЙ БАЗЫ, которая секретная.
Т.е. имеем деталь на руках, читаем номер, проверяем. Но не наоборот.

Если бы вин был, ну хоть 20 значным - проблем нет. md5 или sha-256 - и хрен чего восстановишь.
Проблема в том, что номер 10 значный, и состоит только из цифр.

Пока придумал только создать таблицу из... нуу... предположим, 1000 рандомных солей, и соединять ее шифруемым номером СЛУЧАЙНО.
И совпадение по базе искать не хэша номера, а 1000 хешей - номер + каждая из случайных солей.
Совпадение одного такого "ослучайнненного" хеша - является совпадением.

Как вам идея?
18 окт 15, 19:42    [18294176]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
2uaggster,

Чем больше надо будет сгенерировать хешей, тем лучше.
10 млрд * 1000 = 10 трлн. хешей. Т.е просто на хранение всех вычисленных хешей понадобится 145 Тб места, не говоря уже о времени вычисления.
19 окт 15, 00:47    [18294809]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
Jaffar
Member

Откуда:
Сообщений: 633
почему нельзя оставить сервер на вашей строне - разграничив доступ?
так же можно вести лог, + временное ограничение + кол-во неверных попыток и т.п.

КМК это чисто разграничение доступа к информации.

Ну а про органы - засунут в ....опу паяльник и ТС все вам расскажет, где у него на флешке лежит в xls файлике копия базы.

Но если условия таковы что база нужна именно "на местах" и скажем расшифровка 1 строчки допустим продлиться 2 мин., а чтобы расшифровать все потребуется 2 млрд. минут - то это вполне приемлемое решение.
19 окт 15, 07:29    [18295040]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
барбидонская
Guest
uaggster,

не передавайте базу. пусть ломятся через вебсервис.

проблемы коротких последовательностей не существует: они добиваются либо самими собой, либо случайными наборами и соответствующим образом обрабатываются. при эмдэпитировании случайными наборами добивается в любом случае вообще всё (соль) кроме самых простых ситуаций.

автор
и соединять ее шифруемым номером СЛУЧАЙНО

и попадать в них с обратной стороны ЕСЛИ ПОВЕЗЕТ? и это не шифрование. для шифрования ключ нужен.

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

+
в рассуждения про защиту обычно имеет смысл вкладывать рассуждения про стоимость ее взлома, сравнение этой стоимости со стоимостью/ценностью того что пытаются взломать для вас и для злоумышленника, со стоимостью других способов прихода куда-то ногами с инструментом или заливания в админа вискарика и заполучения одного единственного нужного пароля.
19 окт 15, 08:42    [18295153]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
aleks2
Guest
барбидонская
, а расшифровать даже самостоятельно зашифрованные последовательности не могут


Вот нафига мне париться с дешифровкой?
Я все возможные номера "зашифрую" и получу таблицу соответствий "правильный номер" <-> "шифрованный номер".
И ничего не изменится.
Хоть ушифруйся.
19 окт 15, 09:35    [18295363]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
2uaggster,

Чем больше надо будет сгенерировать хешей, тем лучше.
10 млрд * 1000 = 10 трлн. хешей. Т.е просто на хранение всех вычисленных хешей понадобится 145 Тб места, не говоря уже о времени вычисления.


Не надо хранить "все".
Достаточно хранить только те, которые "есть в базе".
Вот уже и не надо 145 Тб места.

Аналогично насчет "времени". Вычисление 1000 "хешей" должно занимать мало времени.
Следовательно, вычисление 10 трлн. хешей будет, по-прежнему, доступно.
19 окт 15, 09:45    [18295405]     Ответить | Цитировать Сообщить модератору
 Re: Скрыть данные с помощью md5 hash  [new]
UK 9.5
Guest
aleks2,

да, в "просто рассуждения" зарылся. про 10ярдов выше тоже уже упоминал.

в целом, по-моему ТСу надо задачу переформулировать еще ближе к реальности:
как раздавая всем на руки бэкап базы заставлять их продолжать сотрудничать с нами, а не тупо скопировать и сказать "спасибо, досвидос".
19 окт 15, 11:23    [18295930]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить