Я пытаюсь показать простое доказательство концепции относительно уязвимости в куске кода в игре написанной на C.Простое шифрование - Сумма хэшей в C
Давайте предположим, что мы хотим для одобрения символьный логин. Вход пользователя обрабатывается пользователем, выбирая n
пунктов (предположим, теперь n=5
) из графического меню. Элементы все средневековые тематические:
например:
_______________________________
| | | |
| Bow | Sword | Staff |
|-----------|-----------|-------|
| Shield | Potion | Gold |
|___________|___________|_______|
пользователь должен нажать на каждый элемент, а затем выбрать номер для каждого пункта.
Алгоритм проверки затем выполняет следующие действия:
- определяет, какие были выбраны пункты
- капли каждой строки в нижний регистр (то есть:
Bow
становитсяbow
, и т.д.) - Расчет простой строки хэша для каждого (т. е.: лук => b = 2, o = 15, w = 23, sum = (2 + 15 + 23 = 40)
- Умножает хэш на значение, выбранное пользователем для соответствующего элемента; значение называется
key
- Суммы вместе
keys
для каждого из выбранных предметов; это окончательный хэширование валидации. - ВАЖНО: валидатор примет этот хэш вместе с ненулевыми кратными его значениям (то есть: если конечный хеш равен 1111, тогда также действуют 2222, 3333, 8888 и т. д.).
Так, к примеру, скажем, я выбираю:
Bow (1)
Sword (2)
Staff (10)
Shield (1)
Potion (6)
Алгоритма капель каждый из этих строк в нижнем регистре, вычисляет свои строки хэш, умножает хэш по выбранному номеру для каждой строки, а затем суммирует эти ключи вместе.
например:
Final_Validation_Hash = 1*HASH(Bow) + 2*HASH(Sword) + 10*HASH(Staff) + 1*HASH(Shield) + 6*HASH(Potion)
При применении метода Эйлера, я планирую показать, что эти хэши не являются уникальными, и вы хотите, чтобы разработать простое приложение, чтобы доказать это.
в моем случае, на 5 пунктов, я бы по существу пытается вычислить:
(B)(y) = (A_1)(x_1) + (A_2)(x_2) + (A_3)(x_3) + (A_4)(x_4) + (A_5)(x_5)
Где:
B is arbitrary
A_j are the selected coefficients/values for each string/category
x_j are the hash values for each string/category
y is the final validation hash (eg: 1111 above)
B,y,A_j,x_j are all discrete-valued, positive, and non-zero (ie: natural numbers)
Может кто-либо мне помочь в решении этой проблемы или мне точку к аналогичному примеру (т.е.: код, выработанные уравнения и т. д.)? Мне просто нужно решить последний шаг (т. Е.: (B) (Y) = ...).
В конце концов, я написал рекурсивный алгоритм, который идет n
уровней в глубине, а затем обрабатывает приращение, тестирования и т.д., для всех остальных возможных комбинаций. Не очень эффективный, но он работает. Я мог бы предоставить его по запросу (слишком большой для публикации здесь).
Какой вопрос Вот? –
Обновлено. Хорошая точка зрения. Благодарю. +1 – DevNull
Какие у вас есть проблемы с внедрением? – Attila