Какой симметричный шифр использовать для шифрования сообщений?

Я бы предложил перейти на types из typeRoots и использовать паттерн include вместо files.

{
  "compilerOptions": {
    "lib": ["dom", "es2016", "es2017.object"],
    "rootDir": "src",
    "target": "es5",
    "outDir": "build",
    "moduleResolution": "node",
    "removeComments": true,
    "types": [
      "node"
    ]
  },
  "include": [
    "**/*.ts"
  ]
}

Я также включил тип node, так как вы используете разрешение модуля node, обязательно установите @types/node, если вы еще этого не сделали.

5
задан Community 23 May 2017 в 12:13
поделиться

7 ответов

Ваша первая мысль должна быть безопасностью канала - или SSL/TLS или IPSec.
По общему признанию они оба имеют определенное количество установки наверху, IPSec больше, чем SSL/TLS, особенно когда дело доходит до PKI и т.д. - но это больше, чем платежи за себя в простоте разработки, надежности, безопасности, и т.д. Просто удостоверьтесь, что Вы используете сильные наборы шифров, как соответствующие протоколу.

Если никакой SSL/TLS или IPSec не соответствуют Вашему сценарию/среде, Вашим следующим выбором должна быть AES (иначе Rijndael).
Используйте ключи по крайней мере 256 битов длиной, если Вы хотите Вас, может пойти дольше.
Ключи должны быть случайным образом сгенерированы криптографически безопасным генератором случайных чисел (и не простой rnd () вызов).
Установите режим шифра на CBC.
Используйте дополнение PKCS7.
Генерируйте уникальный, crypto-случайный Вектор инициализации (IV). Не забывайте правильно защищать и управлять Вашими ключами и возможно рассматривать периодические ключевые вращения.

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

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

Теперь, я не знакомый ezpycrypto (или действительно Python в целом), и наклон действительно указывает, что поддерживает все это; но все здесь - довольно стандартная и рекомендуемая лучшая практика, если бы Ваша crypto библиотека не поддерживает ее, я предложил бы найти тот, который делает ;-).

7
ответ дан 18 December 2019 в 06:24
поделиться

У меня нет подсказки о шифровании вообще. Но мне нужен он. Как?

ОПАСНОСТЬ! Если Вы не знаете много о криптографии, не пытайтесь реализовать ее сами. В криптографии трудно разобраться. Существуют многие, много различных способов повредить безопасность криптографической системы вне фактического взламывания ключа (который обычно очень тверд).

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

Так... необходимо будет читать на crypto в целом, прежде чем можно будет использовать его надежно.

8
ответ дан 18 December 2019 в 06:24
поделиться

Я, вероятно, пошел бы для AES.

1
ответ дан 18 December 2019 в 06:24
поделиться

При принятии использования симметричного crypto затем AES должна быть выбором по умолчанию, если у Вас нет пользы очень причина выбрать иначе.

Была долгая, включенная конкуренция для выбора AES, и победитель был тщательно выбран. Даже Bruce Schneier, crypto бог, сказал, что победитель AES является лучшим выбором, чем алгоритм (TwoFish), который он отправил конкуренции.

4
ответ дан 18 December 2019 в 06:24
поделиться

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

1
ответ дан 18 December 2019 в 06:24
поделиться

AES 256 обычно является предпочтительным вариантом, но в зависимости от Вашего местоположения (или местоположения Ваших клиентов) Вы можете иметь легальные ограничения и будете вынуждены использовать что-то более слабое.

Также обратите внимание, что необходимо использовать случайный IV для каждой коммуникации и передать ее наряду с сообщением (это также сохранит потребность в метке времени).

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

3
ответ дан 18 December 2019 в 06:24
поделиться

Почему бы не создать VPN среди узлов, которые должны связаться надежно?

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

1
ответ дан 18 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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