Процедура шифрования хранилища SQL Server безопасна?

Я использую SQL Server 2008 Enterprise на Windows Server 2003 Enterprise. Я разработал некоторую процедуру хранения для SQL Server, и компьютер, на котором установлен SQL Server, может быть не полностью под моим контролем (может использоваться ненадежной третьей стороной).

Я хочу защитить исходный код T-SQL моей процедуры хранения (т. Е. Невидимый для просмотра какой-либо другой стороной) с помощью функции шифрования хранимой процедуры, предоставляемой SQL Server. Я не уверен, является ли процедура зашифрованного хранилища на 100% безопасной и есть ли у администратора компьютера (установленного с SQL Server) способы просмотра исходных кодов процедуры хранилища?

спасибо заранее, Джордж

3 ответа

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

Самое большее, что может сделать SQL Server, - это запутать ключ, пытаясь скрыть его, чтобы его было нелегко украсть.

Исторически была повторная атака, где, если бы вы использовали ALTER PROCEDURE, он бы снова использовал тот же ключ. Используя ALTER PROCEDURE с известным открытым текстом, вы можете сравнить полученный зашифрованный вывод и восстановить поток ключей, а затем использовать его для расшифровки исходного зашифрованного текста. (Он использует потоковый шифр RC4, который создает псевдослучайную строку битов, называемую потоком ключей, которая затем XOR с открытым текстом для шифрования или XOR с зашифрованным текстом для дешифрования.) Я не знаю, так ли это в случае SQL Server 2008.

Будьте уверены, что даже если вы используете шифрование для хранимых процедур в SQL Server 2008, его можно очень легко расшифровать с помощью инструментов сторонних производителей. Их много, и одним из них является http://www.elitude.net/.

Если вы используете проприетарное программное обеспечение, то добавление еще одного слоя с использованием шифрования НЕ будет достаточно, если существует определенный пользователь. Все, что вы можете сделать, это попросить их подписать соглашение о неразглашении (NDA) и соблюдать эти правила.

Администратор базы данных SQl-сервера всегда будет иметь возможность просмотреть содержимое хранимой процедуры, если они попытаются сделать это достаточно усердно. Единственный способ усложнить эту задачу - это использовать сторонний продукт, такой как sql-shield, который будет использовать другую схему шифрования, чтобы предотвратить "обычные" атаки дешифрования. Если вы предоставляете кому-то зашифрованные данные и доступ к расшифровке ключом, вы никогда не сможете предотвратить дешифрование данных (независимо от того, насколько запутанным может быть процесс). Шифрование действительно "хорошо", когда ключ шифрования и данные не доступны вместе. Вы также можете рассмотреть возможность запутывания своего кода с помощью хранимой CLR процедуру и любой из множества доступных обфускаторов.net См. Пример хранимых процедур CLR.

Другие вопросы по тегам