Я понятия не имею о шифровании. Но мне это нужно. Как?
Допустим, у вас есть система узлов, взаимодействующих друг с другом в сети посредством асинхронных сообщений. Узлы не поддерживают информацию сеанса о других узлах (это ограничение проекта).
Допустим, вы хотите убедиться, что только ваши узлы могут читать отправляемые сообщения. Я полагаю, что шифрование является решением этой проблемы.
Поскольку узлы не поддерживают сеанс и связь должна работать без состояния и без установления соединения, я предполагаю, что асимметричное шифрование исключено.
Итак, вот что я хотел бы сделать:
- сообщения отправляются как дейтаграммы UDP
- каждое сообщение содержит метку времени, чтобы отличать сообщения (противодействие повторным атакам)
- каждое сообщение шифруется общим секретным симметричным ключом и отправляется по сети
- другой конец может расшифровываться с помощью общего секретного симметричного ключа
Ключи, очевидно, могут быть скомпрометированы путем компрометации любого отдельного узла. В то же время в этом сценарии доступ к любому отдельному скомпрометированному узлу в любом случае раскрывает всю интересную информацию, поэтому ключ не является самым слабым звеном.
Какой шифр я должен использовать для этого шифрования? Какую длину ключа?
Я бы предпочел использовать что-то, поддерживаемое ezPyCrypto .
Предполагая, как большинство отмечают, я иду с AES. Какие режимы мне следует использовать?
Я не мог понять, как это сделать с помощью ezPyCrypto, PyCrypto , кажется, зависает при обмене модератором и гуглит keyczar не объясняет, как это настроить - я боюсь, если я не просто получу это, тогда я рискую ввести небезопасность. Так что босоножки были бы лучше. Этот парень утверждает, что у него есть хороший модуль для AES в python, но он также утверждает, что это его первый проект на Python - хотя он, вероятно, загружен умнее меня, может быть, его споткнули?
РЕДАКТИРОВАТЬ: Я переместил поиск реализации Python в другой вопрос , чтобы остановить clobber ...