2012-02-24 2 views
0


Я разрабатываю приложение, которое с одной стороны создает код с определенной информацией о покупке, в который включена кредитная информация. Например, вы можете купить определенное количество минут, чтобы потратить на публичный ПК в кибер-кафе, и вы получите билет с номером/кодом с этим количеством минут, который затем декодируется и обрабатывается программным обеспечением блокировки ПК в публичный ПК.
Полная длина этой информации (включая дату покупки, идентификатор и т. Д.) Составляет около 12 байтов. Я должен обеспечить эти данные, очевидно, столько, сколько мне нужно сделать неизменным. У меня нет опыта в криптографии, но я читал много последних нескольких дней, поэтому я придумал схему, в которой я шифрую данные с помощью Twofish в режиме CFB (чтобы сохранить маленький зашифрованный текст) и добавьте 4 байтов длиной IV, генерируемых случайным образом. Я понимаю, что это короткий IV, но причина в том, что атакующий должен захватить явно нелепый набор билетов, чтобы стать нитью с IV из 65535 вариаций.
Проблема, которую я вижу (не говоря уже о том, что я пропустил), заключается в том, что мне также нужно аутентифицировать код, поскольку в режиме CFB небольшое изменение в зашифрованном тексте приводит к небольшому изменению открытого текста, поэтому любой может измениться, поскольку экземпляр, кредит его билета, просто изменив A для B.
Итак, первый вопрос: есть ли очевидная проблема при использовании CRC16 открытого текста как IV и добавить его (незашифрованный) в зашифрованный код, чтобы использовать его как для аутентификации, так и для IV? Повторяю, я не в криптографии, но «странно» добавить некоторую информацию об незашифрованном незашифрованном тексте вместе с cyphertext. Но это всего лишь ощущение кишки.
Или вместо этого я должен использовать потоковый шифр? Какой из них мог бы сильно изменить (/ испортить) открытый текст из небольшого изменения зашифрованного текста. Связано ли это с свойством распространения ошибки в режиме шифрования?

Некоторые рекомендации, пожалуйста?
Большое спасибо.
Кстати, если это имеет значение, я использую mcrypt на PHP.Рекомендации по обеспечению/шифрованию кода

Я должен добавить, что другой конец приложения, тот, который читает билет, не является (и не может быть) онлайн. Извините за это.

+0

Я предпочел бы раздавать случайные числа и иметь клиентский компьютер: спросить сервер лицензий на информацию о покупке, связанную с этим случайным числом. –

+0

Спасибо, Альбин. Вся эта схема основана на том факте, что другой конец приложения (тот, который показан на ПК) не находится в сети. Я понял, что это подразумевалось. Извини за это. Я отредактирую. – tebastian

+0

Бессмысленно использовать IV, который получен из обычного текста. Вся суть IV заключается в том, чтобы создавать разные шифрованные тексты из одного и того же простого текста. – erickson

ответ

0

Я хотел бы добавить немного соли и произвести MD5 хэш, доставленный прямо с открытым текстом

+0

Спасибо Эдуардо. MD5 hash кажется слишком длинным для моих потребностей, и, возможно, (надеюсь) перебор. Билет стал бы непрактичным. Во всяком случае, моя концептуальная проблема остается неизменной в отношении добавления незашифрованной информации об открытом тексте, даже понимая, что MD5 намного меньше информации, чем CRC16. – tebastian

+0

Вы должны быть осторожны, используя такой хэш, потому что злоумышленник может легко добавить еще несколько данных в конец сообщения и обновить хеш. Формат сообщения должен иметь какой-то маркер «конца сообщения» или иметь фиксированную длину, чтобы этот подход был безопасным. – Andrew

+0

Вы можете взять подстроку из хэша. Хотя ... Я не специалист по шифрованию и надеюсь, что это не очень плохой совет! – Eduardo

1

Это звучит как то, что вы ищете, либо HMAC или, если вы не можете защитить клиентские компьютеры, цифровую подпись, не шифрование.

+0

Спасибо, Андрей. Я ошибаюсь, полагая, что в этом случае мне все равно нужно отправить информацию, а также HMAC? Я имею в виду, только ваш совет заменить часть CRC16 моей схемы? Если это так, кажется, что длина билета станет непрактичной. Если я ошибаюсь, извините, пожалуйста, уточните меня. – tebastian

+0

Да, для этого потребуется больше бит, чтобы сделать это безопасно. Вы можете получить безопасные билеты, короткие билеты или отключить проверку: выберите два. – Andrew

Смежные вопросы