Опасно ли шифрование значений с низкой дисперсией?

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

Если это так, сколько требуется вариаций значения, чтобы этого избежать? Как насчет кода безопасности номера банковской карты, который обычно состоит всего из трех цифр?


person Ian Warburton    schedule 20.08.2013    source источник
comment
Как они могут проверить правильность своего предположения и какой метод шифрования?   -  person Michelle    schedule 20.08.2013
comment
Я не уверен. Но у них был бы шанс один из двенадцати, чтобы они могли работать, исходя из двенадцати различных предположений - если в этом есть какой-то смысл. Метод шифрования не должен быть секретом; это ключ, который должен быть в безопасности.   -  person Ian Warburton    schedule 20.08.2013
comment
Итак, в этом случае оговорите, что у них действительно есть номер карты. Но не по истечению срока. Выполнения тестовой транзакции на сумму 1 доллар будет достаточно, чтобы проверить правильность хешированного / зашифрованного истечения срока действия. И эта простая проверка правильности хеширования может поставить под угрозу безопасность самого алгоритма?   -  person Andyz Smith    schedule 20.08.2013
comment
Существует огромное количество методов симметричного шифрования, и я не могу сказать из вашего вопроса, каков ваш уровень знаний (и используете ли вы, например, самодельный шифр Цезаря или что-то в этом роде).   -  person Michelle    schedule 20.08.2013
comment
В отличие от шифрования военного времени. Вы никогда не узнаете, правильно ли вы получили сообщение, пока войска не начнут двигаться так, как вы думали, согласно расшифрованному вами незашифрованному, но сбивающему с толку и, возможно, мусорному сообщению.   -  person Andyz Smith    schedule 20.08.2013
comment
@AndyzSmith Его зашифровано. Не хешируется.   -  person Ian Warburton    schedule 20.08.2013
comment
Хеширование - это основа шифрования.   -  person Andyz Smith    schedule 20.08.2013
comment
Хорошо, не могли бы вы, эксперты, дайте ответ? :)   -  person Ian Warburton    schedule 20.08.2013
comment
Интересно ... stackoverflow.com/questions/ 1110152 /   -  person Ian Warburton    schedule 20.08.2013
comment
Этот вопрос кажется не по теме, потому что он касается криптографии, а не программирования.   -  person President James K. Polk    schedule 21.08.2013


Ответы (2)


Если вы правильно используете правильный шифр, такой как AES, то шифрование таких значений полностью безопасно.

Это связано с тем, что режимы работы, которые считаются безопасными (такие как CBC и CTR), принимают дополнительный параметр, называемый вектором инициализации, который эффективно рандомизирует зашифрованный текст, даже если один и тот же простой текст зашифрован несколько раз.

Обратите внимание, что чрезвычайно важно, чтобы IV использовался правильно. Каждый вызов функции шифрования должен использовать другой IV. Для режима CBC IV должен быть непредсказуемым и предпочтительно случайным, в то время как CTR требует уникального IV (случайный IV обычно также неплохой выбор для CTR).

person ntoskrnl    schedule 21.08.2013
comment
Если я использую разные случайные IV для каждого шифрования, то как мне узнать, какой IV использовать для дешифрования? - person Ian Warburton; 21.08.2013
comment
@IanWarburton Некоторые системы просто присоединяют IV к началу зашифрованного текста, что является допустимым подходом. Вы также можете сохранить его в другом поле базы данных. IV вовсе не обязательно должен быть секретным. - person ntoskrnl; 21.08.2013
comment
Это потрясающе. Поэтому я добавлю его к зашифрованному тексту, который будет храниться в базе данных. - person Ian Warburton; 21.08.2013
comment
Считаете ли вы, что подстрока первых шестнадцати символов нового Guid является хорошим случайным IV? - person Ian Warburton; 21.08.2013
comment
@IanWarburton Нет; это будет использовать только 16 различных символов ASCII из 256 возможных значений байта. Вам следует использовать криптографически безопасный генератор случайных чисел. - person ntoskrnl; 21.08.2013

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

i.e.

Если хакеру нужно угадать три числа, a, b, c, каждое из них может иметь значения от 1 до 3. Количество вариантов будет 3 * 3 * 3 = 27. Теперь хакер обнаруживает, что первое число, a всегда является фиксированным значением 2. Таким образом, количество вариантов равно 1 * 3 * 3 = 9. Если раскрытие значения числа a приведет к ограничению количества вариантов до значения меньше 9, чем вы были взломаны , но в сильной модели, если одно из чисел будет раскрыто, то количество вариантов, которые будут ограничены, будет ровно 9.

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

Надеюсь, я был достаточно ясен.

person TomF    schedule 21.08.2013
comment
Да я шифровал эксп. date и поместив результат в столбец базы данных, используемый для хранения только этого значения. - person Ian Warburton; 21.08.2013
comment
Извините, я подумал, что срок действия вашего ключа. Возможных решений для вывода будет меньше из-за множества повторяющихся дат, если только вы не используете разные IV для каждого пользователя. Но зачем вам его шифровать? это секрет? - person TomF; 21.08.2013
comment
@TomF Обратите внимание, что вы предполагается использовать разные IV для каждой операции шифрования. - person ntoskrnl; 21.08.2013
comment
Вы НЕ ДОЛЖНЫ. например, если в вашем блоке данных есть что-то в качестве идентификатора последовательности, которое нужно зашифровать, то можно использовать тот же IV, потому что входные данные в любом случае не будут повторяться. Хотя это не рекомендуется, потому что этот способ отрицает назначение IV, если он может сэкономить вам полосу пропускания, например, тогда можно использовать фиксированный IV (например, используя время, скажем, с разрешением 3 минуты), вызовет повторяющиеся вводы внутри этого временного окна будет выводиться то же самое. - person TomF; 21.08.2013