Как передать вектор инициализации AES клиенту для гибридной системы шифрования

Говоря на основе опыта при записи такого рода вещи, действительно трудно сделать с 100%-й надежностью. Я записал некоторый код Java, чтобы сделать это, которое довольно хорошо в обработке данных, которые мы имеем, но не будем применимы в каждой стране. Вопросы, которые необходимо задать:

символ должны пронумеровать отображения, последовательные между странами? США используют многое из этого (например, 1800-GOT-MILK), но в Австралии, как один пример, его довольно редкое. То, что необходимо было бы сделать, гарантируют, что Вы делали корректное отображение для рассматриваемой страны, если это варьируется (это не могло бы). Я не знаю то, что делают страны, которые используют различные алфавиты (например, Cyrilic в России и бывших странах стран Восточного блока);

необходимо признать, что решением не составят 100%, и Вы не должны ожидать, что он будет. Необходимо проявить "лучшее предположение" подход. Например, нет никакого реального способа знать, что 132345 действительный телефонный номер в Австралии, как 1300 123 456, но что это только два шаблона, которые являются для 13xx числа, и они не являются вызываемыми из-за границы;

также необходимо спросить, хотите ли Вы проверить регионы (коды зоны). Я полагаю, что США используют систему, где вторая цифра кода зоны является 1 или 0. Это, возможно, когда-то имело место, но я не уверен, применяется ли это все еще. Безотносительно случая много других стран будут иметь другие правила. В Австралии допустимых кодах зоны для наземных линий и мобильный (ячейка) телефоны являются двумя цифрами (первое 0). 08, 03 и 04 все допустимы. 01 не. Как Вы обслуживаете это? Вы хотите?

Страны используют различные соглашения, неважно, сколько цифр они пишут. Необходимо решить, хотите ли Вы принять что-то другое, чем "норма". Они все распространены в Австралии:

  • (02) 1234 5678
  • 02 1234 5678
  • 0411 123 123 (но я никогда не видел 04 1112 3456)
  • 131 123
  • 13 1123
  • 131 123
  • 1 300 123 123
  • 1300 123 123
  • 02-1234-5678
  • 1300-234-234
  • +44 78 1234 1234
  • +44 (0) 78 1234 1234
  • +44-78-1234-1234
  • +44-(0) 78-1234-1234
  • 0011 44 78 1234 1234 (0011 стандартный международный код набора)
  • (44) 078 1234 1234 (не распространенный)

И это просто первое, что пришло на ум. Для одной страны. Во Франции, например, его общее запись номер телефона в парах числа (12 34 56 78) и они объявляют его что слишком: вместо:

ООН (один), deux (два), trois (три)...

погружают (двенадцать), trente-quatre (тридцать четыре)...

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

Также некоторые люди могут добавить добавочные номера по номерам телефона, возможно с "расширением" или подобным сокращением. Вы хотите обслужить это?

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

9
задан onkar 31 December 2012 в 08:25
поделиться

3 ответа

Вы не шифруете IV. Свяжите его с зашифрованным ключом и отправьте (в открытом виде) получателю.

Стандарты для этого существуют. Эта схема называется «KeyTransRecipientInfo» в CMS (на которой основан S / MIME), и PGP предлагает аналогичный режим. TLS также включает вектор инициализации в качестве параметра в идентификатор алгоритма шифрования ключа, используя тот же синтаксис ASN.1, что и CMS. Надежная библиотека с открытым исходным кодом для выполнения этой операции доступна для многих, многих платформ.

По крайней мере, изучение спецификации CMS может помочь избежать некоторых из многих ловушек в реализации домашнего приготовления. См. §6.1 и §6.2.1 RFC 3369.

10
ответ дан 4 December 2019 в 14:29
поделиться

Я проделал то же самое, и я поступил так же - объединить ключ AES с IV и зашифровать их оба.

Вы также можете просто отправить ключ и использовать сам ключ для генерации IV - например, используя первые 128 бит хеш-кода ключа в качестве IV. Это должно быть нормально с точки зрения безопасности, пока вы генерируете новый ключ AES для каждого сеанса и не используете повторно один и тот же ключ AES снова и снова с одним и тем же IV.

2
ответ дан 4 December 2019 в 14:29
поделиться

There is no reason to encrypt the IV - you can send that in the clear. Just make sure you pick a new one each time (the same way you do the AES key).

That said, it is often convenient to package the AES key and IV together. Encryption of 16 bytes ain't that expensive.

2
ответ дан 4 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: