Шифрование данных в ОЗУ

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Шифрование данных в ОЗУ

Сообщение Protopopulus » 14.01.2012 22:06:34

Вопрос достаточно насущный. Самое главное - шифровать данные, вычисляемые или обрабатываемые программой, помещать в ОЗУ уже зашифрованными. Есть ли для этого программные или системные средства? Задача несколько нетривиальна - создать максимально защищенную программу, в том числе защитить от изменений в ходе выполнения. Ну, и очень желательна кроссплатформенность.
Аватара пользователя
Protopopulus
новенький
 
Сообщения: 24
Зарегистрирован: 25.11.2010 09:58:07

Re: Шифрование данных в ОЗУ

Сообщение rayanAyar » 15.01.2012 07:54:56

В библиотеке FCL есть TBlowFishEncryptStream/TBlowFishDeCryptStream.
Есть набор компонентов dcpcrypt2-laz (http://wiki.lazarus.freepascal.org/DCPcrypt). В нем практически полный набор всех актуальных алгоритмов шифрования.
Аватара пользователя
rayanAyar
новенький
 
Сообщения: 42
Зарегистрирован: 06.01.2011 08:22:52
Откуда: Новоуральск

Re: Шифрование данных в ОЗУ

Сообщение Max Rusov » 16.01.2012 17:36:32

Protopopulus писал(а):Задача несколько нетривиальна - создать максимально защищенную программу, в том числе защитить от изменений в ходе выполнения

Какая то нелепая задача. Защищенность программы от этого ни капельки не вырастет.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Шифрование данных в ОЗУ

Сообщение v-t-l » 16.01.2012 18:52:45

Ага, т.к. ключи и алгоритмы дешифрования будут находится в ОЗУ в незашифрованом виде.
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Шифрование данных в ОЗУ

Сообщение Ism » 16.01.2012 23:01:14

Вам поможет http://ru.wikipedia.org/wiki/Обфускация

А ключи нужно не шифровать, а хитро прятать в памяти
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Шифрование данных в ОЗУ

Сообщение debi12345 » 17.01.2012 17:37:22

Проще и разумнее всего это сделать для уже собранной программы. Для чего купить или стырить ASPack, Armadillo и прочие-прочие рантайм-онфлай-[де]криптеры - нужны те, которые поодрживают режим декрипиовки только текущей исполняеимой секци кода . Хотя може появлись и фиварные-оперсорсные утилитту такого класса, не знаю. Кто знает - скажите !

Еще вариант - использовать шифрующий SQLite3 ( SQLiteCipher - если решитесь, то у меня есть собранные DLL & EXE и для Линуска, и для Выни). Тогда можно важные данные хранить в шифрованной БД, и вытаскивать их через SQL на короткое время, обрабатывать и опять записывать в БД - это избавит он необходимоти держать их постоянно в ОЗУ. Дополнительный бонус - эти данные можно осталять в БД поле обработки, потому что даже имея доступ к БД, ти данные хрен прочитаешь без пароля, БД кодируется кажется AES256.

Можно также писать в шифрованный файл вместо БД - рекомендую сервис библиотеки OpenSSL. Долго мучился прежде чем получить "рабочую лошадку" из оной под MSE - но теперь в ус не дую :) Вариант OpenSSL хорош тем,что ожно использовать открытые ключи с шифровкой приватного ключа.

Добавлено спустя 3 минуты 30 секунд:
ешифрования будут находится в ОЗУ в незашифрованом виде.

Ясен перец, что нужен парольный (или через ауфтокен) вход в программу - и уже эти паролем на нужное КОРОТКОЕ время декодировать ключи, а уже этими ключами - данные, и т.п.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Шифрование данных в ОЗУ

Сообщение Protopopulus » 19.01.2012 20:10:34

Возможно, меня немного неправильно поняли... Хотя, дельные советы действительно дали. Попробую "на пальцах" изложить суть вопроса.

Допустим, создаем массив в памяти:
Код: Выделить всё
Arr = array[0..1000];
PArr = ^Arr;

Далее, работаем через ссылку с массивом. Каким образом поместить уже зашифрованный массив в память, без дополнительных телодвижений в виде классов Блоуфиша и им подобных? И как сделать такую работу "прозрачной" для программы? Есть ли в компиляторе некий защищенный режим или что-то похожее?

Max Rusov писал(а):Какая то нелепая задача. Защищенность программы от этого ни капельки не вырастет.

Можно поинтересоваться по какой причине?
Аватара пользователя
Protopopulus
новенький
 
Сообщения: 24
Зарегистрирован: 25.11.2010 09:58:07

Re: Шифрование данных в ОЗУ

Сообщение alexs » 19.01.2012 20:31:09

Зачем шифровать в памяти?
Если злоумышлиник получил физический доступ к железу - никакая шифрация не спасёт.
Скорее всего ваша исходная проблема должна решаться не на уровне вашей программы - а на организационном уровне.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Шифрование данных в ОЗУ

Сообщение Protopopulus » 19.01.2012 20:52:27

Так задача именно организационного уровня. Шифрование томов жесткого диска у меня и так включено, iptables режет любой "левый" трафик, SELinux следит за процессами, я работаю без административных прав. Но, допустим, я параноик и хочу шифровать данные, которые попадают в память. Есть ли для этого средства?
Аватара пользователя
Protopopulus
новенький
 
Сообщения: 24
Зарегистрирован: 25.11.2010 09:58:07

Re: Шифрование данных в ОЗУ

Сообщение alexs » 19.01.2012 21:00:04

П.1.
Если вы тут же в памяти держите алгоритм дешифрования и ключи - то задача безсмыслена.
П.2.
А если нет - то как вы эти данные собираетесь использовать? следственно - см. п.1

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

Если вредоносный код уже запущен и он проник в адресное пространство вашего процесса - то шифрование данных не спасёт.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Шифрование данных в ОЗУ

Сообщение dunin » 19.01.2012 22:00:23

Protopopulus писал(а):...Но, допустим, я параноик...

http://www.itsecurity.ru/edu/kurs/bt_01.html :roll:
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Шифрование данных в ОЗУ

Сообщение Alek_Aaz » 01.02.2012 10:12:34

Protopopulus писал(а):Так задача именно организационного уровня. Шифрование томов жесткого диска у меня и так включено, iptables режет любой "левый" трафик, SELinux следит за процессами, я работаю без административных прав. Но, допустим, я параноик и хочу шифровать данные, которые попадают в память. Есть ли для этого средства?

Теоретически. Нужно ставить "свой" контроллер ОЗУ который будет шифровать данные отправляемые в память. Для Intel еще можно придумать, для AMD - нереально. Если край как надо и денег мешочек с вагончиком то можно реализовать все на OpenSPARC и FPGA. Процессор SPARC, на нем запускать Linux , а там эмулятор х86. Есть еще FPGA с защитой от взлома ... Гыыы...
Alek_Aaz
новенький
 
Сообщения: 39
Зарегистрирован: 26.11.2007 04:13:06

Re: Шифрование данных в ОЗУ

Сообщение wavebvg » 02.02.2012 13:58:09

alexs писал(а):П.1.
Если вы тут же в памяти держите алгоритм дешифрования и ключи - то задача бессмыслена.

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

Protopopulus писал(а):Но, допустим, я параноик и хочу шифровать данные

alexs писал(а):Если вредоносный код уже запущен и он проник в адресное пространство вашего процесса - то шифрование данных не спасёт.

И кто же тут параноик? :-)

Моё личное мнение - достаточно использовать свой проприетарный формат храниения данных и зашифровать модифицированным алгоритмом - этого вполне достаточно, чтобы затянуть время несанкционированного извлечения данных именно в этом "узком" месте на "годы".
Самая простая реализация - читалка/писалка для TStream с возможностью работы с данными в незашифрованном и зашифрованном виде (в случае с памятью - TMemoryStream в качестве хранилища)
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Шифрование данных в ОЗУ

Сообщение Padre_Mortius » 02.02.2012 14:44:33

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

ничего этого не нужно. В большинстве случаев снимаем дамп памяти и практически сразу получаем данные в расшифрованном виде. Работать с зашифрованными данными малость не удобно.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Шифрование данных в ОЗУ

Сообщение wavebvg » 02.02.2012 15:38:34

Padre_Mortius писал(а):В большинстве случаев снимаем дамп памяти и практически сразу получаем данные в расшифрованном виде. Работать с зашифрованными данными малость не удобно.

Вот вот, и от этого и требуется защититься (и обеспечить удобство), те хранить весь массив данных в криптованном виде, а перед использованием расшифровывать только буфер и нигде его после этого не накапливать (зы недавно решал похожую задачу, только намного проще - просто часть метаинформации "тщательно скрывалась" - этого вполне достаточно, чтобы отбить желание получить исходные данные).
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru