Проблемы с mcrypt, при сериализации сессий БД

Фанат

oncle terrible
Команда форума
тебе Alexandre всё разжевал. коряво, как всегда, но понять можно.
если взломщик получил пароль к БД, то что ему мешает получить ключ для шифрования - загадка.
Ну зачем же так сразу идиотизм
уж не обессудь. как есть - так и говорю.
вы пологаетесь только на права доступа к фалам/аутентификацию БД?
мы полагаемся на средства, адекватные задаче.
но я готов поспорить, что на однобаксовом хостинге, на котором будет крутиться этот суперсекретный магазин, никогда не слышали про SSL, например.
 

shady

Guest
Автор оригинала: Alexandre
Фанат, хоть и остр на язык, но он наводит на довольно умные рассуждения, которые надо уметь читать между строк, а не быть обиженной девочкой.
Гы, спасибо за поддержку, но я ни чуть не обиделась - привыкла к грубости отдельных мужчин;) (ессно шутка... всё-таки тема "Юмор" н.з. - слегка можно и пошутить... я ваще-то парень... но иногда хочется быть и девчёнкой... хм-хм короче...)

Попробую растолковать его мысли:

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

Автор оригинала: Alexandre
Для криптостойких систем используются именно удаленные сервера ключей, а не вычистяются ключи путем хеширования иди сессии.
В этом примере, для простоты использовался только ИД сессии, в конечном варианте, ессно удалённого сервера ключей не будет, но в криптуху кое-чего добавлю... ессно - не на столько секурней, но всё-таки, за те 5-10 минут, по истечении которых пользователь сделает новый запрос и ИД регенерится, будет реально мало для полного анализа...

Автор оригинала: Alexandre
ты их в сессию не записываешь, а хранишь в зашифрованном виде в поле BLOB.
я записываю в БД данные сессии, полученные в параметре ф-ции write (которую указали в session_set_save_handler( ))
вобщем, чтобы не "мусорить" сырцами, приведу часть:

//Здесь вызывается сама session_set_save_handler( )
PHP:
SessionPersistentManager::applyDecorator(new SessionEncrypt(new SessionDBPersistent(new SessionPersistent())));
//Это сам класс, который создаёт объект хендлинга
PHP:
class SessionPersistentManager {
	private static $entry = null; 

	public static function open($save_path, $session_name) {
		return self::$entry->open($save_path, $session_name);
	}
	
	public static function close() {
		$ret = self::$entry->close();
		self::$entry = null;
		return $ret;
	}
	
	public static function read($id) {
		return self::$entry->read($id);
	}
	
	public static function write($id, $session_data) {
		return self::$entry->write($id, $session_data);
	}
	
	public static function destroy($id) {
		return self::$entry->destroy(id);
	}
	
	public static function gc($life_time) {
		return self::$entry->gc($life_time);
	}
	
	public static function applyDecorator($entry) {
		ini_set("session.gc_probability", 100);

		self::$entry = &$entry;
		session_set_save_handler(
			array('SessionPersistentManager','open'),
			array('SessionPersistentManager','close'),
			array('SessionPersistentManager','read'),
			array('SessionPersistentManager','write'),
			array('SessionPersistentManager','destroy'),
			array('SessionPersistentManager','gc')
		);
	}
}	//class SessionPersistentManager
т.е. цепочка Декораторов...

В данном случае, при инициализации поведения <read> вначеле читаем из бызы, потом передаём декорируемому объекту - Криптовальщику...

То, что данные читаются и пишутся в БД корректно - гарантирую.

Автор оригинала: Alexandre
я бы мог помочь советом, если бы понял ход работы программы(опиши по пунктам) , особенно тот кусок - где используется сессия и где происходит шифрование, куда потом идет эта информация, как потом она извлекается.
Угу, пасиб, если после этого поста ситуация не прояснится - "помусорю" исходником ;)

-~{}~ 28.04.06 12:04:

Автор оригинала: Alexandre
Почему выбран именно RSA ?
...
Сам себя спрашиваю... знаете, скорее всего для понтов ;) или "на-вырост"... в реале, без сервера ключей по ssh использовать не собираюсь... (т.е. некоторое время...)

(Просто не сложно было)
 

Фанат

oncle terrible
Команда форума
Да, разумеется, но если в ключ крипта включать ID сессии (который ессно регенерится при каждом запросе клиента), то криптостойкость повышается...
о, господи.
 

shady

Guest
Автор оригинала: Фанат
но я готов поспорить, что на однобаксовом хостинге, на котором будет крутиться этот суперсекретный магазин, никогда не слышали про SSL, например.
Фанат , по достижению определённых результатов разработки, однобаксовый хостинг будет заменён на "средненький" дэдик

-~{}~ 28.04.06 12:07:

Автор оригинала: shady
Фанат , по достижению определённых результатов разработки, однобаксовый хостинг будет заменён на "средненький" дэдик
потому как, злоумышленнику ещё нужно будет узнать правильный ИД сессии, но он то будет закриптован...
 

crocodile2u

http://vbolshov.org.ru
Нет, эта тема не просто так попала в Юмор... Это высшие силы являют свою справедливость.
 

shady

Guest
Автор оригинала: crocodile2u
Нет, эта тема не просто так попала в Юмор... Это высшие силы являют свою справедливость.
Ну дык, если с одной стороны мне нужно реализовать описанную ф-ность, а с другой, слегка повеселится... почему бы не дать возможность, например таким как вы, выразить своё имхо... тема ведь всё таки в "Юморе" находится...

Фанат, не принимайте близко к сердцу, пошутил я...

это, видимо, тоже метод шифрации. - нет, я уже написал, что это было...
 

Фанат

oncle terrible
Команда форума
а где написано, что я принимаю близко к сердцу?
просто это очень вписывается в общую картину шифрования, да
Ну дык, если с одной стороны мне нужно реализовать описанную ф-ность, а с другой, слегка повеселится...
о, супер!
давайте веселиться!
анекдот про грузина и немку в поезде знаешь?
 

shady

Guest
тока мы только и веселимся кажись... давайте эт самое... по сабжу так сказать...

...по сабжу в форме анекдота... но анекдота, раскрывающего проблему....

-~{}~ 28.04.06 13:10:

Кстати, меня тут идея посетила... давайте тему в Sticky...
может кто действительно по-существу ответит...

зы: спасиб Alexandre, заступился за девушку ;)
 

Alexandre

PHPПенсионер
но если в ключ крипта включать ID сессии (который ессно регенерится при каждом запросе клиента), то криптостойкость повышается...
заблуждение. Криптостойкость определяется только алгоритмом и длинной ключа. А где и как он генерится - это только ее снижает.
Угу, пасиб, если после этого поста ситуация не прояснится - "помусорю" исходником
shadyя уже писал, что ни кому не интерестно разбираться в километрах исходников. Мне сам вопрос интересен, но в исходниках разбираться времени нет.
Я пытаюсь помочь и хотел понять суть того где и как криптуется и почему может вылезти этот косяк. По этому я хотел увидеть словесную диаграму действий, т.е.
1) получаем от юзера то-то
2) криптуем и пишем в сессию
3) в БД пишем то-то
....
и т.д

хе-хе всетаки тема скатывается к юмору...

-~{}~ 28.04.06 13:54:

я тебе да два дельных совета
- не использовать вектор инициализации
- перед записью криптопотока, делать его преобразование по басе64
что ты из них получилось?
 

shady

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

Автор оригинала: Alexandre
...я хотел увидеть словесную диаграму действий
1. Пользователь (П) инициирует сессию

2. Система скриптов : восстанавливает создаёт окружение (переменные и т.д. текущего сеанса) пользователя, по срабатыванию хендлера read (установленных в session_set_save_handler()) :
- читает из внешнего хранилища данные сессии (в данном случае БД)
- декодирует прочитанные данные (в данном случае mcrypt*)
- отдаёт подсистеме сессий PHP восстановленные данные

По срабатыванию хендлера write
- обработчик получает от подсистемы PHP данные
- обработчик шифрует полученную инфу
- обработчик записывает зашифрованные данные в БД (используется хэшированный SID в качестве ключа ключ , приёмник этих данных - атрибут типа BLOB)

Автор оригинала: Alexandre
я тебе да два дельных совета
1. не использовать вектор инициализации
2. перед записью криптопотока, делать его преобразование по басе64
что ты из них получилось?
1. Без вектора, я кажется уже говорил - мусор исчезает, но ведь вектор то просто нулями заполнен... как бы не есть гуд с точки зрения криптоанализа или я ошибаюсь?
2. делал, но дело здесь не в этом... в БД я гарантирую - пишется правильно... в противном случае мы бы не смогли дешифровать данные.

Всё состояние сессии расшифровывается полностью и правильно, однако часть содержимого IV постоянно вставляется перед расшифрованной строкой...
 

Alexandre

PHPПенсионер
по работе кода все понятно, даже более. Действительно басе64 - здесь не поможет.
но ведь вектор то просто нулями заполнен... как бы не есть гуд с точки зрения криптоанализа или я ошибаюсь?
да, ни есть гуд, но оставь рабочую версию (без вектора). Твоя задача выполнена, данные ты шифруешь и при необходимости ты клиенту или заказчику продемонстрировать это сможешь. Использовать или не использовать IV - это лишь то маленькое зло, по срвнению с тем, что ты имеешь дыру в образовании ключей.

не надо криптоманиться.

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

shady

Guest
Автор оригинала: Alexandre
Твоя задача выполнена, данные ты шифруешь и при необходимости ты клиенту или заказчику продемонстрировать это сможешь.
Да просто для самого уже более чем в спортивный интерес переросло, да и бросать на половине не хочу...

Автор оригинала: Alexandre
Использовать или не использовать IV - это лишь то маленькое зло, по срвнению с тем, что ты имеешь дыру в образовании ключей.
Таааак, а вот здесь пожалуйста по-подробнее...
Вы хотите сказать, что "злоумышленнику" будет достаточно получить SID (ну там трой на тачке у пользователя, кто-то траф сканит и т.д. )?
Ну я просто не все участки кода показывал (изрядно покацав каждый класс при этом)...
На тех зонах сайта, там где действительно нужна секурность используется SSL, при каждом ответе клиенту мы делаем session_regenerate_id и т.д.

Alexandre, подскажите где дыра

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

Вобщем, Alexandre, покажите дыру...
 

shady

Guest
Автор оригинала: Paxan
shady
Дыры - они в голове :) Всё остальное - отверстие
Спасибо за Ваш абсолютно бестолковый и бесполезный комментарий, тем более, что вопрос предназначался не Вам, впрочем, если количества отверстий не дают Вам сие понять, я принимаю Ваш коммент... как некое абстрактное, филосовское высказывание...
... Paxan , Вы видимо форумом ошиблись, это не флейм... это Юмор...

Собсно, г-да, будет любопытно выслушать ЗДРАВУЮ критику...
пожалуйста, если кто знает. что имел ввиду Александре, плиз - прокоментируйте... (ессно, будет замечательно, если Вы Alexandre, укажите дыры лично)
 
Сверху