Реклама:

Для сохранения клиентской стороной нового клиента необходимо выполнить следующие операции.

1. Извлеките сертификат шифрования (открытый ключ приложения внутренней сети) и сертификат подписи (закрытый ключ клиентской стороны).

2. Зашифруйте с использованием сертификата шифрования.

3. Выполните конкатенацию всех открытых текстовых значений.

4. Создайте подпись для конкатенированных значений.

5. Сохраните данные.

Вы можете подписать каждое значение отдельно, по в таком случае увеличится объем таблицы, и вы больше не сможете запрашивать открытые значения. Именно поэтому я решил использовать открепленные подписи. Это означает, что подпись создается для множества значений и сохраняется в отдельном поле (в отличие от тесного связывания данных и подписи в одном поле). Таким образом можно хранить одну подпись для всех значений, защиту целостности которых необходимо обеспечить.

Шифрование записи клиента

public static void AdrJUse г (string name, string street, string city, string ssn)

<

// Получаем сертификаты подписи и шифрования

// (идентификатор хранится в настройках appSettings файла web.contig) X509Certificate2 signatureCert = CryptoHelper.GetCertificate( StoreName.My.

StoreLocation.LocalMachine.

X509FindType.FindBySubjectKcyIdentifier,

Conf igurationManager. AppSetnngsf "SignatureCert if icate"]);

X509Certificaie2 encryptionCert - CryptoHelper.GetCertificate(

StoreName.AddressBook.

StoreLocation LocalMachine.

X509FindType. FintJBySub ject Keyldent if ler,

ConfiguratlonManaqer.AppSettings

["Encrypt ionCertlflcatu"]):

byte[] ssnEnc : CryptoHelper.Encrypt(encryptionCert, ssn): byte[] signature - CryptoHelper.SignDetached( signatureCert.

name + street t city + ssn);

using (SqlConnoction con = new SqlConnection(cs)) (

// Код базы данных пропущен

}

}

Извлечение клиентов

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

1. Извлеките сертификат расшифровки (закрытый ключ приложения внутренней сети).

2. Расшифруйте SSN.

3. Выполните конкатенацию всех открытых текстовых значений, а также проверку подписи.

4. Возвратите открытые данные.

Расшифровка записи клиента

List<Customer> getA11Customers() (

List<Customer> customers = new Ust<Customer>{);

using (SqlConnection con - new SqlConnection(cs)) {

SqlCommand and =

new SqlCommandC'dbo.GetAllCustomers". cor); cmd.CommandType - CommandType.StoredProcedure;

con.0pen();

SqlDatafleader reader - cmd.ExecuteReader();

while (reader.Read()) {

string ssn = CryptoHelper.Decrypt<<byte[])reader["SSN"]);

Customer с = new Customer(); c.CustomerName - (strlng)reader["Username"]; c.Street = (string)reader[ "Street"]; c.City = (stnng)reader["City"]; c.Ssn = ssn:

byte[] signature = (byte[])reader["Signature"]; if (!CryptoHelper.VerifyDetached(


⇐ Предыдущая страница| |Следующая страница ⇒