Режимы шифрования и шифрования DES - PullRequest
2 голосов
/ 08 февраля 2009

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

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

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


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

Ответы [ 5 ]

7 голосов
/ 08 февраля 2009

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

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

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

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

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

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

4 голосов
/ 08 февраля 2009

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

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

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

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

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

2 голосов
/ 17 июля 2009

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

  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 бит ключ)

2 голосов
/ 08 февраля 2009

Вам нужно поискать режимы шифрования - с такими именами, как Cipher Block Chaining (CBC) и режим «Не использовать» Электронная кодовая книга (ECB), и даже некоторые экзотические имена, такие как Расширение бесконечного мусора (IGE). Эта страница прекрасно иллюстрирует, почему не следует использовать режим ECB.

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

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

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

2 голосов
/ 08 февраля 2009

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

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

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

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

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

...