Защита на хэш-функциях
От: Relayer http://www.strongbit.com
Дата: 21.07.06 20:44
Оценка: 18 (4)
#Имя: FAQ.shareware.protection
Здравствуйте, FDSC, Вы писали:

FDS>Странно, я не нашёл (я нашёл только это
Автор: Relayer
Дата: 14.05.06
. Или это оно и есть?)


угу. эт меня склероз замучал. насчет битовых массивов я пару лет назад писал в другую конфу вот порылся на диске и нашел:

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

Решение 1:
хеш функция H()
битовый массив B
if B[H(sn)] == 1 then sn is valid
недостаток — высокий уровень ложного срабатывания

Решение 2 (Probabilistic Spell Checker):
хеш функции H1()..Hn()
битовый массив B
if B[Hj(sn)] == 1 для всех 1<=j<=n then sn is valid

весь остальной материал относится к вариации на 2е решение.

2. Практика
на практике вполне легко добиться вероятности ложной идентификации
порядка 10^-8 (при мощности множества серийных номеров порядка 10^4).
такое решение позволяет нам получить ответ на вопрос валиден серийный
номер или нет. но оно имеет и отрицательную сторону — взломщик легко
может вычислить значения хешфункций для некотрого серийника и
установить соответствующие биты в "1" (т.е. пропачить хештаблицу).

усложним ему работу рассмотрим битовую строку:
HB = ( B[H1(sn)], B[H2(sn)], B[H3(sn)], ... B[Hn(sn)] )
мы требовали чтобы в случае валидного сериника все ее элементы были
равны "1". откажемся от этого при генерации хеш таблицы выберем
некоторую константу KEY (размереностью n бит). потребуем чтобы
валидный серийник выдавал HB == KEY (это приведет к некоторому
усложнению формирования хештаблицы B). что мы имеем в данном случае ?
взломщику не известна константа KEY (программа в дальнейшем может этой
константой расшифровывать блоки кода).

тестовый прогон дал такие результаты:
размер B = 2^18 бит (32 Кб)
кол-во хеш функций n = 32 (использовался SHA1)
SizeOf(HB) == SizeOf(KEY) == n == 32 бита
кол-во используемых бит в хештаблице B = 41% (остальные биты заполнены
мусором)
кол-во серийных номеров = 3868
общее кол-во перебраных кандидатов в серийные номера ~= 10^6
время ~= 5 мин (P3 1Gz)

3. блек лист
при дискредитации серийного номера его не такто просто вычекнуть из
хеш-таблицы, т.к. одни и теже биты могут использоваться несколькими
серийниками из списка. для возможности "вычеркивания" введем следующее
условие: некоторая (nfix <= n) часть битов в HB из таблицы B должна
принадлежать только этому серийнику и никаким другим. для вычеркивания
серийника из таблицы достаточно установить в другое состояние его
"уникальные" биты. это никоим образом не отразится на верификации других
серийниках.

был проведен тестовый прогон с nfix = 8. результаты практически те же
что и без "уникальных" битов.

4. детали
4.1 ничто не запрещает нам наложить более сложное условие чем
HB == KEY
например:
HB xor HH(sn) == KEY
здесь HH() — некотрая хешфункция
4.2 при формировании хештаблицы достаточно легко достичь ее коэф.
заполнения порядка 50%. дальше начинаются существенные пробуксовки
4.3 заполнение неиспользуемых элементов в таблице B "мусором"
существенно усложняет реверсирование схемы
4.4 нет особых ограничений на вид серийника. при тестировании я
использовал серийники из 9ти символов (буквы+цифры). мощность
множества серийников 2^(9*5) = 2^45
4.5 ложка дегтя при дискредитации ключа KEY, очень сложно
сформировать хештаблицу для тех же серийников и другого ключа.

5. финита ля комедия
утверждение 4.5 портит всю картину. но если мы выберем nfix == n (т.е.
потребуем чтобы все биты в строке HB были "уникальными") то смена
ключа будет полностью безболезненной.

тестовый прогон:
размер B = 2^18 бит (32 Кб)
кол-во хеш функций n = 32 (использовался SHA1)
nfix == n == 32
SizeOf(HB) == SizeOf(KEY) == n == 32 бита
кол-во используемых бит в хештаблице B = 25% (остальные биты заполнены
мусором)
кол-во серийных номеров = 2503
общее кол-во перебраных кандидатов в серийные номера ~= 2*10^7
время ~= 2 часа (P3 1Gz)

отмечу что увеличивая размер B можно практически во столько же раз
увеличить кол-во серийников которые можно "втиснуть" в хеш.
т.е. при 64 кб ~= 5*10^4 серийников
128 кб ~= 10^5 серийников
============================================================================

(c) на все это — мой. вобщем юзайте на здоровье

22.07.06 12:20: Ветка выделена из темы крякеры сломали
Автор: squid
Дата: 17.07.06
— retalik
Re[2]: Защита на хэш-функциях
От: Relayer http://www.strongbit.com
Дата: 22.07.06 10:24
Оценка: +2 :)
Здравствуйте, Аноним, Вы писали:

А>подскажите пожалуйста в каком направлении искать.


в направлении регистрации на форуме и заполнения профиля.
Re[4]: Защита на хэш-функциях
От: Relayer http://www.strongbit.com
Дата: 22.07.06 18:22
Оценка: 2 (1)
Здравствуйте, sergey2b, Вы писали:

R>>в направлении регистрации на форуме и заполнения профиля.

S>я зарегистрировался.

одним анонимом стало меньше ну и то хорошо

S>Могли бы вы рассказать каким образом можно вставить в программу пароль для расшифровки зашифрованного кода что бы его не могли найти или как можно использовать несколько паролей для расшифровки одного и того же участка кода. Конечная цель если пароль принадлежит ключу из блек листа его не возможно было использовать для расшифровки участка кода.


вообще в идеале ключ(пароль) для расшифровки кода должен получаться в процессе верификации ключа. и естественно его нет ни в каком виде в серийнике. некоторые ассиметричные криптоалгоритмы позволяют это сделать. т.е. результат верификации серийника должен быть не ответ да/нет, а некоторый инвариант, который одинаков для всех серийников. как это сделать — очень сильно зависит от выбранного алгоритма.
Re: Защита на хэш-функциях
От: Аноним  
Дата: 24.07.06 07:40
Оценка: +1
Здравствуйте, Relayer, Вы писали:

Одна вода
Re: Защита на хэш-функциях
От: Аноним  
Дата: 21.07.06 21:34
Оценка:
Здравствуйте, Relayer, Вы писали:

R>Здравствуйте, FDSC, Вы писали:


Relayer большое спсибо за приведенный алгоритм.

Скажите пожалуйста как можно решить такую проблему или в какую сторону смотреть:
часть моего кода закриптовано;
я не могу пароль для расшифровки вставить в регистрационный номер так как тогда у всех пользователей будет часть ключа одинаковой и при смене пароля старые ключи не будут работать;
делать сборку каждому пользователю и вставлять свою пароль для расшифровки я тоже не могу;
каким образом можно вставить в программу пароль для расшифровки зашифрованного кода что бы его не могли найти.

подскажите пожалуйста в каком направлении искать.
Re[3]: Защита на хэш-функциях
От: sergey2b ЮАР  
Дата: 22.07.06 13:42
Оценка:
Здравствуйте, Relayer, Вы писали:

R>в направлении регистрации на форуме и заполнения профиля.

я зарегистрировался.

Спасибо за описание использования хэш функции для системы ключей.

Могли бы вы рассказать каким образом можно вставить в программу пароль для расшифровки зашифрованного кода что бы его не могли найти или как можно использовать несколько паролей для расшифровки одного и того же участка кода. Конечная цель если пароль принадлежит ключу из блек листа его не возможно было использовать для расшифровки участка кода.

Спасибо
Re[5]: Защита на хэш-функциях
От: sergey2b ЮАР  
Дата: 22.07.06 19:26
Оценка:
Здравствуйте, Relayer, Вы писали:

R>серийника должен быть не ответ да/нет, а некоторый инвариант, который одинаков для R>всех серийников. как это сделать — очень сильно зависит от выбранного алгоритма.


Большое спасибо за ответ.

Я использую RSA но как вы написали он дает мне только ответ да/нет.
Честно я не понимаю как его можно использовать иначе.
Скажите пожалуйста какую книгу или статью мне лучше прочитать что бы найти ответ.

Спасибо.
Re[6]: Защита на хэш-функциях
От: Relayer http://www.strongbit.com
Дата: 23.07.06 15:22
Оценка:
Здравствуйте, sergey2b, Вы писали:

S>Скажите пожалуйста какую книгу или статью мне лучше прочитать что бы найти ответ.


рекомендовать ничего не буду т.к. как минимум надо высшее математическое. "умрешь" на первой же странице.
Re[7]: Защита на хэш-функциях
От: sergey2b ЮАР  
Дата: 23.07.06 21:09
Оценка:
Здравствуйте, Relayer, Вы писали:

R>рекомендовать ничего не буду т.к. как минимум надо высшее математическое. "умрешь" на первой же странице.


Спасибо, буду разбираться в вашем описании использовании хэш-функции и как использовать KEY в качестве пароля для расшифровки
Re: Защита на хэш-функциях
От: Аноним  
Дата: 24.07.06 07:28
Оценка:
Здравствуйте, Relayer, Вы писали:

R>тестовый прогон дал такие результаты:

R>размер B = 2^18 бит (32 Кб)
R>кол-во хеш функций n = 32 (использовался SHA1)
R>SizeOf(HB) == SizeOf(KEY) == n == 32 бита
R>кол-во используемых бит в хештаблице B = 41% (остальные биты заполнены мусором)
R>кол-во серийных номеров = 3868
R>общее кол-во перебраных кандидатов в серийные номера ~= 10^6
R>время ~= 5 мин (P3 1Gz)


По поводу реализации тестового полигона 8) Вы не могли бы привести код сего действа, так было бы более понятно, конечно, в купе с объяснением
приведенным выше, за что отдельное спасибо.

P.S.
R>размер B = 2^18 бит (32 Кб)
Правильно ли я монимаю следующую запись. Размер битого массива 32 Кб (килобайт), тогда что означает 2^18.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.