Режимы шифрования и шифрования DES

Мне нужно зашифровать сообщение ISO 8583... проблема здесь в том, что сообщение длиннее ключа. Мне нужна помощь, как зашифровать эту строку.

Например: у меня есть 300 символов в моей строке; я должен зашифровать каждые 16 символов отдельно, а затем объединить их, так как длина моего главного ключа составляет 16 байтов?

Я ценю вашу помощь...


ISO 8583-1: 2003 Сообщения, созданные с помощью карты финансовых транзакций. Спецификации сообщений обмена. Часть 1. Сообщения, элементы данных и кодовые значения.

5 ответов

DES является блочным шифром, а блочные шифры имеют разные режимы работы.

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

Я бы предложил вам использовать CBC или другой режим.

Вы можете прочитать о режимах работы блочного шифра здесь: Режимы работы блочного шифра

Что касается самого шифра, я бы посоветовал вам избегать использования DES, если это вообще возможно. DES чрезвычайно легко взломать в наши дни. Пожалуйста, используйте AES или, по крайней мере, 3DES, если AES недоступен.

РЕДАКТИРОВАТЬ: В ответ на обновленный вопрос, да, вам нужно будет дополнить последний блок, если размер открытого текста не кратен размеру блока.

Существует много различных режимов работы блочного шифра. Если вам просто нужно применить ECB к обычному тексту, просто разбейте простой текст на блоки одинакового размера размером 8 байт (размер блока DES) и зашифруйте каждый по отдельности.
В зависимости от того, чего вы хотите достичь, вы также можете использовать

  • ECB, который шифрует каждый блок, причем каждый блок независим от всех других (предыдущих) блоков. Недостаток: известные атаки обычного текста могут выявить закономерности в вашем зашифрованном тексте, поскольку один и тот же простой текст всегда будет зашифрован в одном и том же зашифрованном тексте.
  • CBC здесь у вас есть вектор инициализации, и каждый блок зависит от всех ранее зашифрованных блоков. Вот почему вам нужен IV для первого блока.
  • CFB это интересный, потому что он позволяет вам превратить ваш блочный шифр в потоковый шифр, который может быть полезен, если вы хотите зашифровать видеопоток или что-то еще (аналогично для OFB, который в основном генерирует ключевой поток)
  • Кража текстаCTS может быть полезна, если вы хотите зашифровать данные, но хотите избежать заполнения. Примером использования может быть шифрование большого двоичного объекта в вашей базе данных, размер которого нельзя изменить после его записи в БД.

Есть еще много других режимов, но это наиболее часто используемые (imho).
Как уже отмечали другие, посетите Википедию для всех деталей.

Обновить:
Что касается заполнения, у вас есть разные возможности. Я бы рекомендовал использовать стандарт ANSI X.923, который в основном требует, чтобы вы заполняли последний буфер нулями и добавляли счетчик в последнем байте, который дает вам количество действительных байтов в последнем блоке. Та же идея используется в ISO10126, но заполнение этого времени выполняется случайными байтами. Обратите внимание, что вы можете вообще избежать заполнения при использовании CTS.

Возможно, спросите себя, проще ли на самом деле использовать криптографическую библиотеку, чтобы сделать эту работу за вас.
Если вы используете C++ для Crypto ++ (не такой простой, но согласованный стиль C++), Java и.NET имеют встроенных поставщиков криптографии. Если вы хотите использовать простой C, я могу порекомендовать libTomCrypt (очень прост в использовании).

Вам нужно поискать режимы шифрования, которые имеют такие имена, как Cipher Block Chaining (CBC) и электронная кодовая книга в режиме "не использовать" (ECB), и даже некоторые экзотические имена, такие как Infinite Garble Extension (IGE). Эта страница прекрасно иллюстрирует, почему не следует использовать режим ECB.

CBC - это стандартный, надежный режим работы. OFB и CFB также широко используются.

Вы понимаете, что федеральное правительство США больше не использует простой DES, потому что он недостаточно безопасен (потому что он использует 56-битный ключ и может быть взломан грубой силой)? Triple-DES практически допустим - он имеет 112-битный или 168-битный ключ, в зависимости от того, как вы его используете. Стандарт, однако, является Усовершенствованная система шифрования, AES. Если у вас нет причин обратной совместимости, вы должны использовать AES, а не DES в новом производственном коде.

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

Вы можете зашифровать по следующей причине:

  1. Передайте защищенные данные, которые представляют собой блок PIN (элемент данных 52), об этом позаботится HSM к тому времени, когда вы выполняете преобразование от ключа-получателя к ключу-эмитенту.
  2. или для MAC-сообщения, вы должны выбрать несколько полей для хэширования и добавить в конец сообщения (обычно элемент данных 124 или 128)
  3. или вы хотите сохранить сообщение ISO 8583 и соблюдать правила PCI DSS, в этом случае вы бы зашифровали следующие элементы данных, если они есть
    • DE 2 - номер карты
    • DE 14 - срок годности
    • DE 35 - Трек II
    • DE 45 - Трек I
    • DE 48 - данные EMV (чип) (MasterCard TLV)
    • DE 52 - PIN-код
    • DE 55 - EMV (чип) данных (Visa)

еще одна вещь, ваш мастер-ключ должен быть 128 бит для соответствия мандатам Visa (Triple DES мандаты, чтобы иметь LMK как минимум ключ двойной длины, который составляет 32 цифры - ключ 128 бит)

Длина ключа не накладывает ограничения на размер сообщения. Сообщение может быть сколько угодно, и ваш 128-битный ключ (нестандартный для DES?) Все равно будет в порядке. Шифр DES работает с блоками байтов, по одному блоку за раз. Стандарт DES использует 56-битный ключ (плюс 8 битов четности) и 64-битные блоки.

я должен зашифровать каждые 16 символов отдельно, а затем объединить их, так как длина моего главного ключа составляет 16 байтов?

Шифры в целом не требуют, чтобы размеры ключа и блока были одинаковыми; они могут определять сложные операции, беря данный блок открытого текста и преобразуя его с ключом в блок зашифрованного текста (обычно того же размера). Когда необходимо зашифровать несколько блоков, указывается режим работы, чтобы описать, как один блок связан со следующим блоком в процессе.

При работе в режиме электронной кодовой книги (ECB) сообщение разделяется на блоки, и каждый блок открытого текста шифруется отдельно тем же ключом (полученные блоки зашифрованного текста затем объединяются). Как и другие режимы работы для DES (например, CBC, CFB, OFB), этот подход имеет свои плюсы и минусы. Вам нужно будет выбрать режим, наиболее подходящий для вашего приложения.

Кстати, вы также должны знать, что DES сейчас считается небезопасным.

Другие вопросы по тегам