2013-03-26 2 views
1

Мой веб-сайт ASP.NET MVC 4 (размещенный как веб-роль Azure) хранит некоторые конфиденциальные данные в таблице SQL Server. Когда пользователь начинает рабочий процесс, который генерирует данные, я получаю случайный ключ из реализации Rijndael и сохраняю его в состоянии сеанса. Я использую этот ключ для шифрования/дешифрования в оба конца в базу данных и из базы данных на протяжении всего сеанса. Таким образом, только код, запущенный в этом сеансе (или, по крайней мере, код, который имеет доступ к ключу, сохраненному в состоянии сеанса), может дешифровать данные.Параметры криптографии

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

Я должен добавить, что я стараюсь НЕ использовать любые лазурные крючки, чтобы мой сайт мог размещаться на любом хосте ASP.NET.

У меня есть два вопроса:

  1. ли моя существующая схема (хранение моего ключа в состоянии сеанса) обеспечение на Azure, если моя сессия схема состояние <sessionState mode="StateServer" /> и я, на самом деле, с помощью нескольких хостов? (Пожалуйста, будьте добры ... Я все еще выясняю всю эту вещь ASP.NET/Azure. На данный момент я использую сессионное состояние InProc, я даже не пытался заставить работу нескольких хостов работать.)

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

+0

SSL генерирует новый секретный ключ при каждом подключении, открытый ключ используется только для шифрования секретного ключа, поэтому его можно отправить на сервер, известный как обмен ключами. – Despertar

+0

@Despertar: Но если ваш закрытый секретный ключ SSL украден, тогда зашифрованный обмен ключами может быть отслежен, и вся схема распадается. Я хотел сказать, что это пример широко используемой схемы, которая опирается на один секрет, хранящийся в контейнере с жестким доступом (надеюсь). –

+0

SSL предоставляет дополнительные эфемерные шифры (EDH), которые обеспечивают прямую секретность. В этих ciphersuites долгосрочный открытый ключ (например, ключ RSA или ключ ECDSA) используется только для аутентификации обмена. –

ответ

0

1.

Securing Session State. Он не говорит вам, что он делает, к сожалению, но вам много чего не нужно делать, что должно сделать вас параноидальным.

2.

Защита данных в состоянии покоя является очень сложной проблемой, вы будете иметь, чтобы хранить ключ, вы просто должны держать его как безопасный и отдельно от данных, насколько это возможно. Если вам нужно сегментировать свои данные, вы можете иметь ключ на x (для каждого пользователя, независимо), зашифрованные с помощью главного ключа. Возможность поворота ключей действительно помогает поддерживать безопасность, поэтому вы можете менять время выполнения ключей без последствий. Корпус keyczar, который I ported to c# имеет простую конструкцию для поворота ключа.

Смежные вопросы