Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана…
1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше.
Короче, прошу посоветовать, как всё это провернуть. Спасибо за внимание!
15.09.05 08:05: Перенесено модератором из 'Базы данных' — _MarlboroMan_
15.09.05 16:38: Перенесено модератором из 'Философия программирования' — AndrewVK
Здравствуйте, Аноним, Вы писали:
А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы.
Не пишите его в программу. Другого варианта в такой схеме нет.
А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает
По квартире разбросаны деньги и ценные вещи. Как сделать, чтобы находящийся внутри квартиры взломщик их не увидел?
А>>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает
надо эти данные просто шифровать, а прога будет расшифровывать
S>По квартире разбросаны деньги и ценные вещи. Как сделать, чтобы находящийся внутри квартиры взломщик их не увидел?
Здравствуйте, Callisto, Вы писали:
А>>>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. C>надо эти данные просто шифровать, а прога будет расшифровывать
Угу. А расшифрованные данные — спокойно считать из памяти программы.
Я однажды извлекал данные из подобной программы. Все, что потребовалось — посадить крохотный фрагмент собственного кода, который дождался, пока "дешифратор" инициализируется, взял управление, считал файлы, используя "дешифратор" программы, после чего записал их, минуя "шифратор".
Re[4]: Сокрытие данных, "импортированных" из БД
От:
Аноним
Дата:
11.09.05 17:31
Оценка:
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, Callisto, Вы писали:
А>>>>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. C>надо эти данные просто шифровать, а прога будет расшифровывать
S>Угу. А расшифрованные данные — спокойно считать из памяти программы.
S>Я однажды извлекал данные из подобной программы. Все, что потребовалось — посадить крохотный фрагмент собственного кода, который дождался, пока "дешифратор" инициализируется, взял управление, считал файлы, используя "дешифратор" программы, после чего записал их, минуя "шифратор".
вот поэтому и я задаю столь "глупые" вопросы. Нигде не могу найтирешения, которое мне бы помогло. А разве так редко требуется шащитить свои проги?
Здравствуйте, Аноним, Вы писали:
А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
Данные БД хранит в зашифрованном виде? Если нет, что скорее всего, то огорчу — можно извлечь данные из места их физического хранения... Если СУБД стоит на сервере, данные передаются по сети в зашифрованном виде?
А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы?
В общем случае — никак.
А>Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше.
Если уж так не хочется выпускать данные из БД — используйте хранимые процедуры — в них и выполняйте расчеты. Только не забываем, что СУБД — это тоже программа и она тоже дизассемблируется и т.д.
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
вводить пароль каждый раз при запуске программы, или использвать авторизацию Windows. А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше.
видимо, надо ограничить права пользователя (чтоб он не запускал разных там дизассемблеров) или сервер, на котором выполняется прога. в самой программе это не делается.
Re: Сокрытие данных, "импортированных" из БД
От:
Аноним
Дата:
12.09.05 05:54
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом. А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше. А>Короче, прошу посоветовать, как всё это провернуть. Спасибо за внимание!
Софтину — в на терминальный сервер. Всех юзеров через RDP/Citrix грамотно нарезать права на терминале — и пусть дети в песочнице сидят. Если и обгадятся то вылезти всё равно не смогут.
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
Пароль и любые данные находящиеся в памяти персонального компьютера за определённое время могут быть получены его пользователем.
Решение состоит в том, чтобы пресечь попытку пользователя совершить недозволенное, либо усложнить процедуру настолько, чтобы за указанное время искомые сведения потеряли актуальность.
Можно к каждому пользователю приставить сотрудника СБ, запереть ПК на замок, запретить выполнение посторонних операций. Но где гарантия, что вместо сертифицированного ПК к серверу БД не будет подключен взломщик?
Проще всего сделать так, чтобы в память ПК попадали только те сведения, которые известны пользователю — имя учётной записи и пароль, или доступны ему по праву.
В твоём случае может быть имеет смысл сделать двухуровневую систему авторизации.
1. ODBC подключается к БД с именем и паролем, которые потенциально могут быть известны всем, но первоначальные права учётной записи (роль) должны позволять только выполнить авторизацию второго уровня.
2. На втором уровне авторизации пользователь используя сессию 1 сообщает БД известный только ему одному пароль в зашифрованном виде, хранимая процедура базы данных проверяет пароль и назначает сессии соответсвующую полноценную роль.
А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления.
В общем случае никак.
А> А информацию эту нельзя «выпускать» из БД дальше.
Так и не выпускай её из БД. Используй хранимые процедуры или выполняй вычисления на сервере приложений, физический и программынй доступ к которому со стороны пользователей не сложно ограничить.
Здравствуйте, Аноним, Вы писали:
А>вот поэтому и я задаю столь "глупые" вопросы.
Они не глупые, они наивные . Вы полагаете, что существует простое и действенное решение очень сложной проблемы.
Грубо говоря, защититься от человека с правами администратора невозможно; можно только более или менее осложнить ему жизнь. Я бы сказал, защита действует в основном по двум направлениям:
— связать руки на дальних подступах, не допустить до получения серьезных прав на нужной машине
— не сделать дырок, через которые можно будет высосать информацию обходным путем, пользуясь чужими правами, через незащищенную часть системы итп.
Re[2]: Сокрытие данных, "импортированных" из БД
От:
Аноним
Дата:
12.09.05 17:53
Оценка:
Здравствуйте, smr, Вы писали:
smr>Здравствуйте, Аноним, Вы писали:
А>>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом. smr>Данные БД хранит в зашифрованном виде? Если нет, что скорее всего, то огорчу — можно извлечь данные из места их физического хранения... Если СУБД стоит на сервере, данные передаются по сети в зашифрованном виде?
Какая разница. Даже если это и так (а это так), то из клиента всё-равно могут получить эти данные. вЕдь где-то есть функция, которая расшифровывает
А>>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? smr>В общем случае — никак.
А>>Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше. smr>Если уж так не хочется выпускать данные из БД — используйте хранимые процедуры — в них и выполняйте расчеты. Только не забываем, что СУБД — это тоже программа и она тоже дизассемблируется и т.д.
вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО?
Здравствуйте, Аноним, Вы писали:
А>вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО?
Возможно. Вон, Oracle для своего appserverа получил уж не помню какие необходимые сертификаты для использования в МинАтоме. Другой вопрос, что "на коленке" и нераспределенную безопасную систему сделать весьма затруднительно.
Здравствуйте, Аноним, Вы писали: А>вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО?
Вы сформулируйте чётче требования, прежде чем бросаться голословными утверждениями. Невозможно — что?
Здравствуйте, beroal, Вы писали:
А>>вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО? B>Вы сформулируйте чётче требования, прежде чем бросаться голословными утверждениями. Невозможно — что?
Невозможно, не зная теории и не имея опыта. Так наверное
Здравствуйте, Аноним, Вы писали:
smr>>Если уж так не хочется выпускать данные из БД — используйте хранимые процедуры — в них и выполняйте расчеты. Только не забываем, что СУБД — это тоже программа и она тоже дизассемблируется и т.д. А>вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО?
Невозможно.
В любой книжке про криптографию написано что абсолютно безопасных систем не бывает.
Бывают системы, взлом которых обойдется дороже добытой при взломе информации.
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
используй авторизацию системы если бд позволяет (например MS SQL 2000)
или DCOM/COM+
А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше. А>Короче, прошу посоветовать, как всё это провернуть. Спасибо за внимание!
Легко — переноси её на север, куда НИКОГО не пускай
DCOM/COM+/хранимки сервера бд, которые выдают только готовый результат ...
Re[4]: Сокрытие данных, "импортированных" из БД
От:
Аноним
Дата:
13.09.05 15:27
Оценка:
Здравствуйте, beroal, Вы писали:
B>Здравствуйте, Аноним, Вы писали: А>>вот-вот. я тоже смотрел и в эту сторону... получается, сделать безопасную распред. систему практически НЕВОЗМОЖНО? B>Вы сформулируйте чётче требования, прежде чем бросаться голословными утверждениями. Невозможно — что?
ок. для противных. Нужно что-то подсчитать. инфа хранится в базе. Причем считать нужно ИМЕННО в программе, т.е. там логика довольно сложная.
Необходимо сделать так, чтобы ИСХОДНЫЕ данные для задачи (к примеру — цены на нефть за последние 15 лет никто не смог извлечь из программы. Даже если шифровать — то из проги данные извлекут за 10 секунт в любом случае. Программа НЕ находится на выделенном сервере итд. Никаких "специальных" паролей от юзеров не требует. Для запуска — пароль "от создателя" нужен.
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
В своей дипломной работе я хранил совершенно не пароль и не его шифрованную форму, а хэш пароля. Равно как и в БД и в клиенте. В процессе ввода пароля вычисляется его хэш и сравнивается в хэшем в БД. А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше. А>Короче, прошу посоветовать, как всё это провернуть. Спасибо за внимание!
Есть, правда, одна идейка, но реализовать её у меня не дошли ещё руки: сделать что-то типа "пробирки" для этого, т.е. некий эмулятор типа VMWare или другого. Есно, только что такой фичастости не требуется, и только он для некоторых функций создаётся. Главное — именно в "пробирчатости".
Здравствуйте, Аноним, Вы писали:
А>Сперва хочу извиниться. Никак не мог выбрать, в какой форум лучше писать. Решил писать в БД. Короче говоря – возникли вопросы вот какого плана… А>1) Есть DB. Есть софтина, с ней работающая через ODBC. Нужно сделать так, чтобы пароль на чтение БД невозможно было извлечь из программы. А то, получается, вся эта криптография – лажа, если можно просто взять дизассемблер, Hex-editor (etc) и всё пойдет прахом.
Легко. Это называется Kerberos. Пароль живет только на то время как он нужен(через сеть пересылается в зашифрованном виде). Приплюсуй к этому аутентификацию с помощью OS. И MSSQL и Oracle как сервисы его знают и могут юзать.
А>2) Как сделать, чтобы СТРОКИ или какие-либо бинарные данные, извлечённые из БД нельзя было прочитать в памяти программы? Т.е. допустим там хранится важная инфа и программа НА ЕЁ основе делает какие-то вычисления. А информацию эту нельзя «выпускать» из БД дальше.
Легко. Хранить данные в сухом и прохладном месте. Это одно из частых требований, которое обязывает строить трехзвенные системы. Информация не выпускается за пределы сервера. В данном случае, можно использовать бд как сервер приложений(если бд такое умеет, конечно).