Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Необходимо использовать одни и те же параметры симметричного шифрования данных в клиенте (C# VS 2005) и в БД (MS SQL Server 2005).
Надо задать параметры шифрования на C# VS 2005 и установить их в MS SQL Server 2005 ИЛИ наоборот.
В C# VS 2005 можно и задать и установить, но как сделать хотя бы одно из двух в MS SQL Server 2005?

Всё пройдёт... Пройдёт и это.
22 май 06, 11:39    [2690438]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
а почему не хотите пользоваться функциональностью сервера ?

http://www.sqlservercentral.com/columnists/mcoles/sql2005symmetricencryption.asp
23 май 06, 18:49    [2697991]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
вот тут обясняется как сертификат из ассембли доставать

http://msdn2.microsoft.com/en-us/library/ms187798.aspx
23 май 06, 19:03    [2698048]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Не хочу использовать функциональность сервера, т.к. база будет на стороне клиента, т.е. не защищена. Вариант - шифрование. Использовать встроенные возможности сиквела нельзя, т.к. все пароли вылавливаются отладчиком.

Всё пройдёт... Пройдёт и это.
23 май 06, 19:18    [2698096]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
дак напишите Extended SP и пользуйтесь.
23 май 06, 19:29    [2698117]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Собственно, я так и делаю уже... Вопрос только в том, что, на мой взгляд, это неправильный путь. Предметы шифрования в БД (данные, код...) защищены меньше чем параметры симметричного ключа.

Всё пройдёт... Пройдёт и это.
23 май 06, 20:12    [2698198]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
All
Не хочу использовать функциональность сервера, т.к. база будет на стороне клиента, т.е. не защищена.
Всё пройдёт... Пройдёт и это.


что значит не защищена ? данные закриптованы. перенос базы или бэкапа делает прочтение данных невозможным.

--Вариант - шифрование. Использовать встроенные возможности сиквела нельзя, т.к. все пароли вылавливаются отладчиком.

пароль в открытом виде только на момент генерации ключа - а при использовании его guid. В любом случае если даже если пользоваться ESP то туда ключ тоже надо посылать.
23 май 06, 23:40    [2698510]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Всё просто. Самый надёжный и эффективный вариант шифрования это:

1. MASTER KEY (без опции автоматического открытия, т.е. надо сделать ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY)
2. сертификат с шифрованием по паролю и MASTER KEY (1) (можно обойтись без сертификата, но удобно для ограничения возможности шифрования - по времени)
3. Симметричный или Асимметричный ключ (на выбор - зависит от степени конфиденциальности данных и скорости шифрования) с шифрованием по паролю и сертификату (2)
4. Собственно шифрование данных с помощью ключа, сгенерированного в (3)

При этом всё равно остается возможность копирования БД (даже восстановленной из BACJKUP)
Как следствие:
1. БД может быть присоединена к вражескому инстансу сиквела, где рулит чужой SA :).
2. Любые зашифрованные процедуры всё равно расщифровываются перед выполнением и могут быть оттрассированы, т.е. все параметры выполнения (в т.ч. и пароли на все уровни шифрования) будут открыты. ;)
3. Данные могут быть расшифрованы с использованием полученных паролей.

Всё таки сиквел - это серверная платформа. И защитить его можно только защитив среду выполнения от доступа с других машин. В т.ч. можно использовать EFS, потеряв при этом 5% производительности, но надежно (опять же сомненительно, т.к. есть недорогие утилиты http://www.elcomsoft.com/aefsdr.html для расшифровки зашифрованных дисковых ресурсов) защитив БД от копирования.

Другими словами, до тех пор пока аккаунты системного администратора сервера и/или домена надёжно защищены, можно считать, что процесс защиты управляемый. :)

Использовать ESP я хочу только на своём сервере - для удобства шифрования. Далее, я разумеется не собираюсь отдавать модули шифрования с базой - буду защищать на уровне приложения. Средства защиты приложений гораздо больше приспособлены для выполнения своих функций на вражеской стороне даже без защиты среды выполнения....
Запутать можно так, что расшифровка будет стоить гораздо больших денег, чем сама программа. Но тут, собственно, речь уже о рынке - отдельная песня, в которой участвуют продавец, покупатели и хакеры (как естественная сила, регулирующая запросы продавца на рынке в рамках того же механизма "спрос-предложение"). Это отдельная тема :)

Собственно вопрос был: что является Initialization Vector, а что Key для симметричного шифрования. В описании синтаксиса создания симметричного ключа этой информации нет http://msdn2.microsoft.com/en-us/library/ms188357(d=ide).aspx


Всё пройдёт... Пройдёт и это.
24 май 06, 12:12    [2699857]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
All
При этом всё равно остается возможность копирования БД (даже восстановленной из BACJKUP)


да на здоровье,только если не был скопирован master Key и нет сертификата, то раскодировать не удасться.[/quot]

--1. БД может быть присоединена к вражескому инстансу сиквела, где рулит чужой SA :).

это только в мечтах если неизвестен мастер key

вот что будет на другом серверe

use master
go
RESTORE FILELISTONLY 
FROM 
DISK = 'c:\cryptotest.bak' 


Msg 3201, Level 16, State 2, Line 1
Cannot open backup device 'c:\cryptotest.bak'. Device error or device off-line. See the SQL Server error log for more details.
Msg 3013, Level 16, State 1, Line 1
RESTORE FILELIST is terminating abnormally.

---3. Данные могут быть расшифрованы с использованием полученных паролей.

без master key при знании пароля данные - мусор

---Другими словами, до тех пор пока аккаунты системного администратора сервера и/или домена надёжно защищены, можно считать, что процесс защиты управляемый. :)

положив на уличе ключ от квартиры где деньги лежат трудно ожидать что они останутся на своем месте.

--шифрования. Далее, я разумеется не собираюсь отдавать модули шифрования с базой - буду защищать на уровне приложения.

а ваши ESP ?

--Собственно вопрос был: что является Initialization Vector,

Server Key надо полагать, который уникален для каждого сервера

---а что Key для симметричного шифрования. В описании синтаксиса создания симметричного ключа этой информации нет

вот простейший тест.

-- Create a Database Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';

-- Create a Temp Table
CREATE TABLE #Temp4
(ID   INT PRIMARY KEY,
 edisplayname   NVARCHAR(200),
 eusername  NVARCHAR(200),
 displayname   NVARCHAR(200),
 username  NVARCHAR(200));

-- Create a Test Certificate, encrypted by the DMK
CREATE CERTIFICATE TestCertificate4
   WITH SUBJECT = 'Adventureworks Test Certificate',
   EXPIRY_DATE = '10/31/2009';

-- EncryptByCert demonstration encrypts 100 names from the Person.Contact table
INSERT
INTO #Temp4(ID, edisplayname, eusername)
SELECT ID, EncryptByCert(Cert_ID('TestCertificate4'), displayname),
	EncryptByCert(Cert_ID('TestCertificate4'), username)
FROM USerList

-- DecryptByCert demonstration decrypts the previously encrypted data
UPDATE #Temp4
SET displayname = DecryptByCert(Cert_ID('TestCertificate4'), edisplayname),
	username = DecryptByCert(Cert_ID('TestCertificate4'), eusername)

-- View the results
SELECT *
FROM #Temp4;

-- Clean up work:  drop temp table, test certificate and master key
DROP TABLE #Temp4;


DROP CERTIFICATE TestCertificate4;

DROP MASTER KEY;

ключи можно создавать при обладании сертификатом

CREATE SYMMETRIC KEY TestSymmetricKey4
    WITH ALGORITHM = TRIPLE_DES
    ENCRYPTION BY CERTIFICATE TestCertificate4;

select Key_GUID( 'TestSymmetricKey4' )

DROP SYMMETRIC KEY TestSymmetricKey4
24 май 06, 17:51    [2702198]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Всё красиво, только опять, MASTER KEY может быть оттрассирован до копирования БД.

ESP - актуальны только на стороне моего сервера. На стороне врага они использоваться не будут.

Про "ключ от квартиры" - слишком сильно сказано :) Если так обобщать, то решения никогда не найти. Думаю, что задача защиты данных от неавторизованного прямого доступа (если они установлены на стороне врага) актуальна до сих пор и будет актуальна дальше :)

Про IV и Key всё же на совсем понятно

Всё пройдёт... Пройдёт и это.
24 май 06, 18:20    [2702346]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
All
Всё красиво, только опять, MASTER KEY может быть оттрассирован до копирования БД.


пароль для master key создается один раз. Если он не был отрассирован, расшифровать уже не удасться.

потому как при его восстановлении он должен указываться
24 май 06, 19:34    [2702678]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
:) Считайте, что пароль оттрассирован. Это делается легко и просто с помощью отладчика.

Собственно вопрос был: что является Initialization Vector, а что Key для симметричного шифрования.

Всё пройдёт... Пройдёт и это.
26 май 06, 09:58    [2708638]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Stas Tristan
Member

Откуда: Kyiv, Ukraine
Сообщений: 190
Проблема защиты данных от прямого прямого доступа sa для нас тоже актуальна:
Наш проект предусматривает информационный бизнес, где наши клиенты - подписчики той или иной информации. При этом для нас стоят следующие задачи:
- подписка клиентом нужного ему сегмента информации
- регулярная передача клиенту информации по его подпискам
- сделать невозможным передачу клиентом полученной информации другому клиенту (в электронном виде разумеется)
- запретить просмотр структуры и содержимого базы извне от поставляемого приложения
Проект предусматривает наличие центральной базы - MS SQL, DB2, Oracle и локальной - на стороне клиента - тут могут быть Экспресс-версии тех же MS SQL, DB 2, Oracle. Кроме того есть интересный проект VistaDB, 3-я версия которого должна выйти в конце июля - фишка его состоит в том, что он поддерживает прозрачное шифрование базы данных. Но там траблы с мультипользовательским доступом - либо база выступает как файл-сервер, либо можно востпользоваться сервером от VistaDB, но тогда шифрование задается уже не в строке подключения в приложении, а в параметрах сервера, что делает невозможным скрытие пароля шифрования...
Короче говоря беда да и только... не можем никак найти приемлемого решения, по сему будем рады любой информации
11 июн 06, 16:59    [2762278]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Здравствуйте!

Если вас интересует топик, то ответ такой: надо создавать сборку и загружать её в базу.

Всё пройдёт... Пройдёт и это.
12 июн 06, 12:15    [2762919]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
All
:) Считайте, что пароль оттрассирован. Это делается легко и просто с помощью отладчика.

Собственно вопрос был: что является Initialization Vector, а что Key для симметричного шифрования.

Всё пройдёт... Пройдёт и это.



будем считать что админ не дурак и создает это в моде Single User на сервере, когда сетевой кабель на этот момент выдернут.
12 июн 06, 17:37    [2763420]     Ответить | Цитировать Сообщить модератору
 Re: Шифрование одним и тем же симметричным ключом в C# .NET 2005 и MS SQL Server  [new]
All
Member

Откуда: Владивосток
Сообщений: 47
Речь идёт об базе данных, которая распространяется для использования на стороне третьих лиц, которые зхаинтересованы использовать её напрямую, а не через интерфейс. Этого допустить нельзя - для того данные и шифруются! :)

Всё пройдёт... Пройдёт и это.
12 июн 06, 17:40    [2763426]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить