Безопасен ли мой метод обеспечения целостности строки? - PullRequest
2 голосов
/ 04 января 2011

Это мой первый вопрос, поэтому дайте мне знать, если я что-то не так делаю!

Я создаю приложение для Android с Eclipse и читаю QR-коды с помощью считывателя штрих-кодов.Это все работает просто отлично, однако, иногда есть «особый случай» штрих-кодов, которые содержат «вознаграждение» для пользователя.

Это «вознаграждение» содержится в специально отформатированной строке, эта строка МОЖЕТ быть подделанас людьми, которые намерены обмануть систему.Это не большая проблема, но я предпринял шаги, чтобы предотвратить это, теперь мой вопрос ... Насколько безопасны эти шаги?

Вот два примера строк:

***Code-v1.0:31c8f90a4050:1001:0:C:1337
***Code-v1.0:6a9c4e8d92da:1002:C4D23A1B:C:1337

Строки отформатированы следующим образом:

***Code-v1.0:HASH:CODE_ID:REDEEM_ONCE:CODE_ACTION:ARG
(REDEEM_ONCE has 3 possible values)

Моя система хеширования работает следующим образом:

salt = "************:***"; // didnt think it wise to post this, but the length is
                           //  the same and its alphanumeric
MD5 = salt . ":" . codeParts[2] . codeParts[5] . codeParts[4] . ":" . codeParts[3] . ":";
MD5 .= codeParts[4] . codeParts[3] . ":" . codeParts[5] . codeParts[2];

Это безопасный способ сделать это, код не может быть подделанбез влияния на хеш, но, конечно, хэши могут столкнуться, и если кто-то разработал схему хеширования, все это становится бессмысленным (это немного меньше, чем просто «найти» его, поскольку он находится на стороне сервера, но если кто-то выяснит).

Что ты думаешь?

1 Ответ

1 голос
/ 04 января 2011

Если вы отправили части и хеш, но НЕ соль (где бы то ни было;), вы выглядите так, как будто находитесь на правильном пути. Некоторые замечания:

  1. почему вы используете md5? Семейство SHA более безопасно.
  2. Наш провайдер платежей недавно приступил к форматированию таких строк, чтобы обеспечить более длинные строки, в которых коллизии (их обоснование) менее вероятны:

codepart1.SALT.codepart2.SALT.codepart3.SALT и т. Д.

Технически это не будет соль, я думаю, но все же ..

Итак, отправьте ваш хэш и ваши кодовые части и воссоздайте хэш из кодовых частей и строки соли / секрета, и все готово.

Я вижу одну проблему: ваша секретная строка должна быть действительно секретной, и она находится в вашем приложении. Таким образом, обратный инжиниринг может показать, как создается ваш хеш, и поэтому они могут изменять поля И хеш, который вы отправляете?

...