Russian Federation
Filial Rostovskogo gosudarstvennogo universiteta putey soobscheniya v g. Voronezhe
Russian Federation
The article discusses the issue of building a secure data storage in the C# programming language. The basic methods of data protection are outlined, including cryptography, authentication and authorization, as well as physical server protection. Provides guidelines for secure storage design, including architectural design and access control. An implementation in C# using cryptographic libraries, password hashing and encryption of secret information is considered. Sample test scenarios and security assessments are presented.
Secure storage, C#, cryptography, authentication, authorization, physical security, design, access, encryption, testing, security
Проблема сохранности данных возникает из-за угроз, которым они подвергаются в цифровом окружении. Их условно можно определить, как потенциальные угрозы, такие как кибератаки, хакерские атаки, вирусы, программное обеспечение-вредоносное ПО так и физические повреждения, которые могут привести к потере, утечке или повреждению данных. Защищенное хранилище данных позволяет предотвратить и решить проблемы сохранности данных и представляет собой специальное место или инфраструктуру, где данные могут быть сохранены и защищены от несанкционированного доступа и повреждений. Защищенные хранилища обеспечивают различные меры безопасности, такие как шифрование данных, контроль доступа, механизмы аутентификации и мониторинг, чтобы предотвратить несанкционированный доступ или использование данных.
Защищенное хранилище данных имеет следующие характеристики [2], [5]:
-
- конфиденциальность - обеспечивают конфиденциальность данных, предотвращая несанкционированный доступ или утечку информации;
- целостность - гарантируют целостность данных, предотвращая их повреждение или изменение несанкционированными лицами;
- доступность - обеспечивают доступ к данным только авторизованным пользователям, предотвращая потерю или недоступность информации;
- восстановление данных - в случае потери или повреждения данных защищенное хранилище позволяет восстановить информацию из резервных копий или архивов;
- соответствие законодательству - помогают организациям соблюдать требования законодательного регулирования и юридические нормы в отношении обработки и хранения данных.
Все указанные аспекты делают защищенное хранилище данных необходимым для обеспечения сохранности информации и предотвращения потенциальных угроз ее безопасности.
Для реализации программных методов защиты используются способы защиты [3], [4], [6].
-
- криптографические алгоритмы - используются для шифрования данных и защиты их от несанкционированного доступа, преобразуют данные в нечитаемую форму, которую могут расшифровать только те, у кого есть соответствующий ключ доступа;
- аутентификация и авторизация - это процессы проверки легитимности пользователей и предоставления им соответствующих прав доступа;
- физическая защита сервера - направлена на защиту аппаратного обеспечения и физического местоположения сервера. она ограничивает несанкционированный доступ к серверам и предотвращает потенциальные физические угрозы.
При разработке специального программного обеспечения с использованием языка программироания C# можно использовать следующие программные методы.
Пример 1. Защита данных с использованием криптографических библиотек.
Для этого у языка программирования C# есть специальные криптографические библиотеки и используются классы из пространства имен System.Security.Cryptography. Ниже приведен пример шифрования и расшифрования строки с использованием алгоритма AES:
using System;
using System.IO;
using System.Security.Cryptography;
public static class CryptoExample
{
private static readonly byte[] Key = new byte[32] { 0x2A, 0x5C, 0x82, 0x47, 0xC9, 0xE3, 0x9F, 0x81, 0xCD, 0xAE, 0x53, 0x7F, 0x3C, 0x24, 0x92, 0x16, 0xE6, 0x01, 0x4B, 0x7D, 0xF2, 0xA5, 0xD6, 0x98, 0xC1, 0x8B, 0x55, 0x63, 0x74, 0x29, 0xBB, 0x64 };
private static readonly byte[] IV = new byte[16] { 0x42, 0xA7, 0x3E, 0xAF, 0x08, 0xE4, 0xD5, 0xF1, 0xC7, 0x72, 0x9B, 0x6D, 0x58, 0x93, 0x02, 0x34 };
public static byte[] EncryptString(string plainText)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return msEncrypt.ToArray();
}
}
}
}
public static string DecryptString(byte[] cipherText)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
public static void Main()
{
string plainText = "Hello, world!";
byte[] cipherText = EncryptString(plainText);
string decryptedText = DecryptString(cipherText);
Console.WriteLine("Original: {0}", plainText);
Console.WriteLine("Encrypted: {0}", Convert.ToBase64String(cipherText));
Console.WriteLine("Decrypted: {0}", decryptedText);
}
}
Выполнение кода выше приведет к зашифрованию строки "Hello, world!" с использованием алгоритма AES и выводу зашифрованного текста, а затем к расшифровке и выводу исходного текста.
Пример 2. Хэширование паролей и секретных данных.
Хэширование паролей и секретных данных - это распространенная практика для защиты данных от несанкционированного доступа. Ниже приведен пример хэширования пароля с использованием алгоритма SHA256:
using System;
using System.Security.Cryptography;
public static class HashingExample
{
public static string HashPassword(string password)
{
using (SHA256 sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
public static bool VerifyPassword(string password, string hashedPassword)
{
string hashedInput = HashPassword(password);
return (hashedInput == hashedPassword);
}
public static void Main()
{
string password = "myPassword123";
string hashedPassword = HashPassword(password);
Console.WriteLine("Original password: {0}", password);
Console.WriteLine("Hashed password: {0}", hashedPassword);
bool isPasswordValid = VerifyPassword(password, hashedPassword);
Console.WriteLine("Password is valid: {0}", isPasswordValid);
}
}
Выполнение кода выше приводит к хэшированию пароля "myPassword123" с использованием алгоритма SHA256 и выводу захэшированного значения. Затем происходит проверка валидности пароля, используя функцию VerifyPassword.
Пример 3. Работа с шифрованными контейнерами данных.
Шифрованные контейнеры данных позволяют защитить целые наборы данных, сохраняя их в зашифрованном виде и обеспечивая доступ только авторизованным пользователям. В C# можно использовать класс ProtectedData из пространства имен System.Security.Cryptography для работы с шифрованными контейнерами данных. Ниже приведен пример сохранения и чтения шифрованных данных:
using System;
using System.IO;
using System.Security.Cryptography;
public static class ProtectedDataExample
{
public static byte[] ProtectData(byte[] data)
{
return ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
}
public static byte[] UnprotectData(byte[] protectedData)
{
return ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser);
}
public static void Main()
{
string originalData = "Sensitive information";
byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(originalData);
byte[] protectedData = ProtectData(dataBytes);
Console.WriteLine("Protected data: {0}", Convert.ToBase64String(protectedData));
byte[] decryptedData = UnprotectData(protectedData);
string decryptedText = System.Text.Encoding.UTF8.GetString(decryptedData);
Console.WriteLine("Decrypted data: {0}", decryptedText);
}
}
Выполнение приведенного кода приведет к защите данных "Sensitive information", используя функцию ProtectData, и выводу зашифрованных данных. Затем эти данные расшифровываются с помощью функции UnprotectData, и результат выводится на экран.
Обратим внимание, что в каждом из этих примеров показан основной принцип работы соответствующих функций и методов. В реальных системах защиты данных обычно требуется принять дополнительные меры, такие как сохранение ключей безопасности в безопасном хранилище, управление доступом и т.д.
Для оценки защищенности данных, реализованных на языке программирования C# с использованием криптографических библиотек, хэширования паролей и секретных данных, а также работы с шифрованными контейнерами данных, можно провести следующие тестовые сценарии [1], [7], [8]:
- Тестирование хэширования паролей:
- создание пользователя с паролем;
- хэширование пароля и сохранение его в базе данных;
- аутентификация пользователя с введенным паролем;
- сравнение хэша введенного пароля с сохраненным хэшем.
- Тестирование шифрования и дешифрования данных:
- шифрование некоторых секретных данных с использованием симметричного ключа;
- сохранение зашифрованных данных в файл или базу данных;
- дешифрование данных с помощью правильного ключа;
- проверка правильности дешифрованных данных.
- Тестирование работоспособности криптографических библиотек:
- генерация случайного ключа шифрования;
- шифрование и расшифрование каких-либо данных с использованием библиотеки;
- проверка правильности расшифрованных данных.
- Тестирование обработки ошибок и исключений:
- попытка использования неправильного пароля для расшифровки данных;
- попытка дешифрования данных без доступа к необходимым ключам;
- проверка обработки исключений и корректности сообщений об ошибках.
- Тестирование работы с шифрованными контейнерами данных:
- создание шифрованного контейнера данных и добавление в него некоторых элементов;
- чтение данных из контейнера и проверка корректности расшифрованных данных;
- редактирование и удаление элементов из контейнера;
- проверка сохранения изменений в контейнере и корректности работы со шифрованными данными.
Анализ результатов тестирования включает в себя оценку успешности выполнения каждого тестового сценария, выявление потенциальных уязвимостей защищенности данных и производительности криптоопераций. Также важно учесть возможные ошибки в реализации и принять меры для их устранения.
Построение защищенного хранилища на языке программирования C# является важной задачей для обеспечения безопасности данных. Реализация описанных принципов и методов поможет предотвратить утечку и несанкционированный доступ к конфиденциальной информации. При разработке такого хранилища необходимо учитывать современные требования безопасности и следовать рекомендациям по обеспечению защиты данных.
1. Marakueva, N. V. Zaschischennoe faylovoe hranilische / N. V. Marakueva // Informacionnoe prostranstvo v aspekte gumanitarnyh i tehnicheskih nauk - 2015: Materialy IV mezhdisciplinarnoy mezhvuzovskoy konferencii studentov, magistrantov i aspirantov, Barnaul, 25 noyabrya 2015 goda / Otvetstvennyy za vypusk A.V. Cherenkova. – Barnaul: OOO "Altay-Ciklon", 2015. – S. 36-39. – EDN VXULYP.
2. Marakueva, N. V. Zaschischennoe oblachnoe hranilische predpriyatiya / N. V. Marakueva // Problemy pravovoy i tehnicheskoy zaschity informacii: Sbornik nauchnyh statey, Barnaul, 24 maya 2017 goda / FGBOU VPO «Altayskiy gosudarstvennyy universitet». Tom Vypusk V. – Barnaul: Altayskiy gosudarstvennyy universitet, 2017. – S. 45-50. – EDN ZTOXWB.
3. Sadkov, A. A. Razrabotka mnogopol'zovatel'skogo zaschischennogo hranilischa dannyh / A. A. Sadkov // Molodoy issledovatel': vyzovy i perspektivy: Sbornik statey po materialam LXI mezhdunarodnoy nauchno-prakticheskoy konferencii. Tom 8 (61): Obschestvo s ogranichennoy otvetstvennost'yu "Internauka", 2018. – S. 146-148. – EDN YTJELU.
4. Kochin, V. P. Razrabotka obrazovatel'nogo zaschischennogo oblachnogo hranilischa dannyh, integrirovannogo v infrastrukturu obrazovatel'nogo uchrezhdeniya / V. P. Kochin, A. V. Zherelo // Vestnik komp'yuternyh i informacionnyh tehnologiy. – 2022. – T. 19, № 6(216). – S. 21-28. – DOIhttps://doi.org/10.14489/vkit.2022.06.pp.021-028. – EDN TNVYJK.
5. Bakumenko, V. V. Ispol'zovanie obschedostupnyh oblachnyh hranilisch dannyh v kachestve kriptokonteynerov dlya zaschischennogo hraneniya informacii v raspredelennyh komp'yuternyh sistemah / V. V. Bakumenko, S. S. Kulikov // Upravlenie informacionnymi riskami i obespechenie bezopasnosti infokommunikacionnyh sistem. – 2020. – T. 18, № 1. – S. 72-85. – EDN MBSZEP.
6. Zol'nikov, K.V. Matematicheskaya model' ocenki pokazateley nadezhnosti slozhnyh programmno-tehnicheskih kompleksov / K.V. Zol'nikov, D.M. Utkin, Yu.A. Chevychelov // Modelirovanie sistem i processov. – 2018. – T. 11, № 1. – S. 21-26.
7. Zol'nikov, V.K. Modelirovanie i analiz proizvoditel'nosti algoritmov balansirovki nagruzki oblachnyh vychisleniy / V.K. Zol'nikov, O.V. Oksyuta, N.F. Dayub // Modelirovanie sistem i processov. – 2020. – T. 13, № 1. – S. 32-39.
8. Zol'nikov K.V. Sistema upravleniya raspredeleniem rabot pri proektirovanii slozhnyh tehnicheskih sistem / Novikova T.P., Zol'nikov K.V., Kulay A.Yu., Strukov I.I. // V sbornike: Informacionnye tehnologii v upravlenii i modelirovanii mehatronnyh sistem. materialy 1-y nauchno-prakticheskoy mezhdunarodnoy konferencii. 2017. S. 199-204.