простое руководство по шифрованию? - PullRequest
0 голосов
/ 04 декабря 2009

Я ищу простое руководство по шифрованию для кодирования строки в другую строку. Я ищу это в общих математических терминах или psuedocode; мы делаем это на языке сценариев, который не имеет доступа к библиотекам.

У нас есть система Micros POS (точка продажи), и мы хотим написать скрипт, который помещает закодированную строку в конец квитанции. Эта строка используется клиентом для входа на веб-сайт и заполнения опроса о бизнесе.

Итак, в этой строке я хотел бы получить трехзначный идентификатор местоположения, дату и время; например.: 0010912041421 Где 001 - идентификатор местоположения, 09 год, 12 месяц и 04 день, 1421 военное время (14:41). Таким образом, мы узнаем, в каком месте респондент побывал и когда.

Очевидно, что если мы просто напечатаем эту строку, кому-то будет легко взломать «код» и заполнить бесконечные опросы за наш счет, не посещая наши магазины. Так что, если бы мы могли сделать простое шифрование и декодировать его с помощью предварительно установленного ключа, это было бы здорово. Расшифровка будет осуществляться на веб-сайте.

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

Ответы [ 6 ]

2 голосов
/ 04 декабря 2009

Шифрование не даст вам никакой защиты целостности или аутентификации, которые вам нужны в этом приложении. Клиент знает, когда и где он совершил покупку, поэтому вам нечего скрывать.

Вместо этого рассмотрите возможность использования кода аутентификации сообщения. Они часто основаны на криптографическом хеше, таком как SHA-1.

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

В этом случае вы захотите добавить уникальный идентификатор. Может быть уникальным только в сочетании с отметкой времени. Или вы можете просто расширить временную метку, включив в нее секунды или десятые секунды.

0 голосов
/ 18 декабря 2009

Я хочу использовать XOR. Достаточно просто, что мы можем сделать это на проприетарном языке сценариев (мы не сможем сделать в нем никакого реального шифрования), и если кто-то взломает его, они могут достаточно легко изменить ключ.

0 голосов
/ 04 декабря 2009

Одним из способов было бы использование AES - взятие местоположения, года, месяца и дня - кодирование его с использованием закрытого ключа с последующим добавлением последних 4 цифр (военного времени) в качестве вектора инверсии. Затем вы можете преобразовать его в какую-либо форму Base32. Вы получите что-то похожее на ключ продукта. Это может быть слишком долго для вас.

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

0 голосов
/ 04 декабря 2009

Я нашел Криптографические правильные ответы , чтобы быть полезным руководством при выборе правильных криптографических примитивов для использования в различных обстоятельствах Он говорит вам, какой крипто / хэш использовать и какие размеры подходят. Он содержит ссылки на различные криптографические примитивы, на которые он ссылается.

0 голосов
/ 04 декабря 2009

Прежде всего, я должен отметить, что это, вероятно, значительный объем работы, которую необходимо выполнить, если вы не решаете проблему, которая у вас есть на самом деле. Так как вам все равно понадобится какой-то мониторинг / анализ функциональности опроса, вам, вероятно, лучше попытаться обнаружить подозрительное поведение после факта и предоставить способ исправить любые проблемы.

Я не знаю, будет ли это осуществимо в вашей ситуации, но это случай из учебника по асимметричной криптографии.

  1. Предоставьте каждому POS-терминалу собственный закрытый ключ
  2. Предоставьте каждому POS-терминалу открытый ключ вашего сервера
  3. Сделать так, чтобы терминал зашифровал информацию о дате, местоположении и т. Д. (Используя открытый ключ сервера)
  4. Попросить терминал подписать зашифрованные данные (используя закрытый ключ терминала)
  5. Кодировать результаты в удобную для человека строку (Base64?)
  6. Распечатать строку в квитанции

Однако вы можете столкнуться с проблемами с длиной строки, удобной для человека.

ПРИМЕЧАНИЕ Возможно, вам потребуется выполнить шаги по подписанию и шифрованию; У меня нет своего крипто справочника (ов) под рукой. Пожалуйста, посмотрите это в авторитетном справочнике, таком как Прикладная криптография Шнайера.

0 голосов
/ 04 декабря 2009

На каком языке вы используете / знакомы?

Веб-сайт Rijndael имеет исходный код c для реализации алгоритма Rijndael. У них также есть псевдокодовые описания того, как все это работает. Что, вероятно, лучшее, что вы могли бы пойти с. Но большинство основных алгоритмов содержат исходный код где-то.

Если вы реализуете собственный алгоритм Rijndael, учтите, что Advanced Encryption Standard ограничивает размер ключа и блока. Поэтому, если вы хотите быть кросс-совместимым, вам нужно использовать эти размеры, я думаю, 128-клавишный размер и 128, 192, 256-клавишный размер.

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

Другая альтернатива, которая может быть проще, - это DES, а точнее 3DES. Но у меня нет удобной ссылки. Я посмотрю, смогу ли я выкопать одну.

EDIT: Эта ссылка имеет стандарт FIPS для DES и Triple DES. Он содержит все таблицы перестановок и тому подобное, я помню, как один раз проходил 1 и 0 через раунд DES вручную. Так что это не так сложно реализовать, как только вы начнете, просто будьте осторожны, чтобы не переключаться вокруг числовых таблиц. Ящики P и S они называются, если я правильно помню.

Если вы пойдете с этим, то используйте Triple DES, а не DES, 3DES фактически использует два ключа, удваивая размер ключа алгоритма, что является единственным реальным недостатком DES. Насколько я знаю, он не был взломан ничем, кроме грубой силы. 3DES использует один ключ для шифрования, другой для дешифрования и тот же самый для шифрования снова.

На сайте Blowfish также есть ссылки для реализации алгоритма Blowfish на разных языках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...