Вам придется добавить элемент фактической случайности - если вы не заполните генератор случайными числами, вывод также не будет случайным.Описанное вами решение уязвимо для:
- Словарные атаки. Вы можете сгенерировать хэши для всех сидов для общих паролей. Или скачать его.
- Атаки с известным открытым текстом. Поскольку ваше семя фиксировано, случайный поток фиксирован. Если вы знаете открытый текст одного сообщения, теперь вы можете декодировать все остальные сообщения до той же длины. В зависимости от информации, которую вы отправляете, может быть доступно гораздо больше открытого текста, чем вы думаете (например, файлы имеют определенные маркировки, поскольку язык сообщений может быть более предсказуемым, чем вы думаете).
Трюк XOR только запутывает, а не распространяет, и открыт для статистических атак. Даже одноразовые блокноты с XOR лишь частично уязвимы. Например. для очень длинных сообщений статистически XOR также оставляет 1/256 вашего сообщения незашифрованным, потому что XOR с 0 ничего не делает, а 1/256 инвертируется, потому что XOR с 0xff такое же, как NOT. Опять же - в зависимости от информации, которую вы отправляете, совпадение 1/256 может быть достаточно для злоумышленника (например, если злоумышленник хочет знать, предоставили ли вы общий доступ к определенному файлу, контекст которого им известен).
Возможно, вы захотите добавить в свой ГСЧ истинную случайность в дополнение к хешу. И вам нужно дополнение, чтобы гарантировать, что вы не утечете информацию о длине.