LEADERSOFT.ru Разработка на заказ программ и сайтов
Интернет магазин программного обеспечения

500 руб.

ДОРАБОТКА ПРОГРАММ

Если Вам необходимо изменить любую программу, например, добавить или изменить отчет или форму, то это можно сделать по отдельному соглашению.

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

Введение
В программе рассказывается о шифровании разными алгоритмами. Все они имеют недостатки и преимущества. В любом случае, использование такой защиты оправдано, т.к. шифрование данных ограничивает доступ к данным пользователям, имеющим разные привилегии. Например, администраторам, операторам и т.п.
  Описание алгоритмов шифрования в программе
Имя алгоритма Комментарий Размер ключа
Blowfish В программе реализован стандартный алгоритм Blowfish. Он поддерживает шифрование файлов и конвертацию результата в шестнадцатеричный вид (HEX вид применяется для хранения паролей в таблицах, чтобы легче было переносить данные). Blowfish считается одним из сильнейших алгоритмов шифрования на рынке и гораздо быстрее, чем шифр IDEA. Он поддерживает переменную длину ключа до 448-бит. Этот шифр рекомендуется для задач высокой секретности. Он не патентован и свободен для использования. 448 бит
DES В программе применяется стандартный алгоритм DES. Он поддерживает файлы и преобразование строк в Hex вид. DES практически не используется, но все еще имеет свое место в криптографическом сообществе для шифрования малосекретных задач. 56 битов
ГОСТ В программе применяется алгоритм c реализацией шифрования поддержки файлов и Hex строк. ГОСТ поддерживает 256-битные ключи и является стабильным алгоритмом, разработанный в бывшем Советском Союзе. У него есть много известных недостатков и пока неясно насколько он сильнее DES. 256 битов
RC4 RC4 алгоритм в программе поддерживает шифрование файлов, бинарный и шестнадцатеричный результат и оптимизирован для Visual Basic. RC4 является очень быстрым и надежным шифром от RSA Data Security, Inc. Рекомендуется для высоко рискованных ресурсов. Его скорость шифрования - очень и очень хорошая. Запатентован для коммерческого использования. 2040 битов
AES Алгоритм AES (Rijndael) реализован с поддержкой файлов и преобразованием строк в 16-й вид. Принят в США как новый стандарт шифрования после DES 128 бит
Serpent Данный алгоритм был финалистом в AES и характеризуется как мощный и безопасный алгоритм, но его машинная реализация для VBA слишком медленная. Не хватает памяти, поэтому его лучше использовать в академических целях. 256 бит
Skipjack Этот алгоритм поддерживает шифрование файлов и преобразование исходных данных в Hex строки. Оптимизирован для VBA. Он разработан NSA для использования в Clipper и Capstone. Этот алгоритм собственность NSA. Возможно имеет дыры или скрытые недостатки. 80 битов
TEA Этот алгоритм поддерживает шифрование файлов и преобразования данных в Hex вид. TEA является отличным новым шифром который достаточно сильный, но может показать может показать свои слабые места в ближайшем будущем. Рекомендуется для использования в среднерискованных проектов. 128 битов
Twofish Twofish реализован с поддержкой шифрования файлов и преобразования в Hex строки. Twofish это просто еще один мощный алгоритм шифрования от Брюс Шнайера, который был финалистом AES. Экспортные ограничения сняты, и его можно рекомендовать как сильного кандидата на шифрование серьезных задач. 256 бит

Защита базы данных открытым ключом RSA
    В этой статье рассказывается об одном из наиболее популярных методов защиты базы данных открытым ключом RSA, названый так по начальным буквам фамилий ее изобретателей (Rivest, Shamir and Adleman). В RSA используется для шифрования один ключ, а для расшифровки другой. Первый ключ не является секретным и может быть известен всем, кто работает с базой данных. 
 
Очевидные факторы алгоритма :
  • расшифровать данные с помощью известного ключа невозможно;
  • ключ расшифровки не может быть определен из ключа шифрования;
  • ключи должны иметь очень большую величину;
 
Определим термины, которые встречаются при описании алгоритма:
 • простое число - это такое, которое может делится только на 1 и на само себя;
 • взаимно простые числа - это числа не имеющие ни одного общего делителя кроме 1;
 • i mod j - деление по модулю;
 • i ^ j - возведение в степень j числа i;
 
Описание алгоритма RSA. В скобках дан пример вычислений в цифрах.
1. Возьмем два простых числа A и B. [3 и 11]
2. Определим c=A*B
[33]
3. Выберем число d
[3] взаимно простое с выражением (A-1)*(B-1) [20]
4. Найдем число e
[7], чтобы (e*d) mod ((A-1)*(B-1))=1
5. Итак,
 
e[7] и c[33] - открытый ключ
 
d[3] и c[33] - секретный ключ
Проверка алгоритма
6. Зашифруем число x
[2] по формуле: p=(x^e) mod c [((2^7) mod 33)=29]
7. Расшифруем число p[29] по формуле: x=(p^d) mod c [((29^3) mod 33)=2]
 
Выводы
  1. Перед шифрованием надо разбить текст на блоки, а затем каждому из них дать определенное число. В примере выше использован простой случай, т.е. текст разбивается на символы, где число x  имеет код 2.
  2. Сам процесс зашифровки/расшифровки требует эффектных решений, т.к. если использовать стандартные математические операции для расчета, то уже для простых чисел 23 и 17 может возникнуть переполнение при возведении в степень. Как этого избежать и подобрать простые числа указано в файле: profi_prot1.mdb
  3. Для проверки изложенного выше алгоритма используйте следующую программу (действует на малых числах):
 
Тестирование
   Private Sub funTestRSAencryption()
Dim A As Long, B As Long, c As Long
Dim d As Long, e As Long, x As Long, p As Long
'1. Возьмем два простых числа A и B.
A = 3
B = 11
Debug.Print "A=" & A, "B=" & B
'2. Определим c = A * B
c = A * B
Debug.Print "C=" & c
'3. Выберем число d взаимно простое с выражением (A-1)*(B-1)
d = 3
Debug.Print "Test1=" & (A - 1) * (B - 1)
'4. Найдем число e, чтобы (e*d) mod ((A-1)*(B-1))=1
e = 7
Debug.Print "Test2=" & (e * d) Mod ((A - 1) * (B - 1))
'5. Выбираем символ x для шифрования
x = 2
Debug.Print "X=" & x
'6. Зашифруем число x по формуле: p=(x^e) mod c
p = x ^ e Mod c
Debug.Print "P=" & p
'7. Расшифруем число p по формуле: x=(p^d) mod c
x = (p ^ d) Mod c
Debug.Print "X=" & x
   End Sub

   P.S. В качестве дополнительного материала, советуем прочитать книгу "Защита информации в персональных ЭВМ", Спесивцев, Вегнер, Крутяков, Серегин, Сидоров. Москва "РАДИО и СВЯЗЬ" 1992 год, стр. 39-41. Вот умная выдержка из этой книги
   Криптостойкость алгоритма RSA основывается на предположении, что исключительно трудно определить секретный ключ по известному, поскольку для этого необходимо решить задачу о существование делителей целого числа. Данная задача является NP – полной и, как следствие этого факта, не допускает в настоящие время эффектного (полиномиального) решения. Более того, сам вопрос существования эффективных алгоритмов решения NP – полных задач является до настоящего времени открытым. В связи с этим для чисел, состоящих из 200 цифр (а именно такие числа рекомендуются использовать), традиционные методы требуют выполнения огромного числа операций (около 10^23).