Фон
Я разрабатываю систему, которая позволяет разрабатывать схемы динамической аутентификации для пользователя статического веб-контента. Мотивация заключается в том, чтобы предварительно генерировать большое количество сложного для генерируемого, но чувствительного веб-контента, а затем статически ставить его на основе аутентификации на основе файлов cookie (встраиваемых в обратимо зашифрованную информацию), что принудительно выполняется веб-сервером. Использование примитива шифрования AEAD.
Проблема
Мне нужно сгенерировать IVEC и ключи, которые действительны в течение продолжительного времени, скажем, одну неделю (действующая в настоящий момент пара). и что предыдущие IVECs/Keys также действительны в течение 2 недель (исторически обоснованные), и любые данные, зашифрованные исторически достоверными секретами, будут просто зашифрованы с действующим в настоящее время IVEC/KEY.
Мне нужна детерминированная CSPRNG, что семена случайного числа и кодовой фразы, которые могут производиться в индексированных моделях 64-битных или 128-битных блоков. Если я использую неделю с тех пор, как "jan 1 1970", как один из элементов индекса моего гипотетического CSPRNG, я должен иметь возможность создавать систему, которая взамен меняет ключи автоматически со временем.
Подход, который я рассматриваю
Теперь я не вижу такой функции в криптоппе, или я знаю теперь терминологию достаточно хорошо, и поскольку криптопп является самой передовой из библиотек шифрования, я не уверен, что найду еще одну. Итак, если я не могу найти реализацию там, я должен опрокинуться. Будет ли генерировать статическую строковую структуру из конкатенированных данных, а затем хешировать ее (показано ниже), сделать трюк?
ripemd160 (RandomPreGeneratedFixedNonce: Passphrase: UInt64SinceEpoch: 128BitBlockIndexNumber);
Примечание. Блочные числа будут назначены и иметь регулярную структуру, поэтому, например, для 128-битного дайджеста, первые 64-бит блока 0 будут для ivec, а весь элемент 1 для 128-битного ключ.
Является ли это разумным подходом (-, то есть криптографически безопасным)?
- изменить: отправить комментарий -
После некоторого размышления я решил объединить то, что я изначально считал ключевой фразой и nonce/соль, в 16-байтовый (криптографически сильный) ключ и использовать методы, изложенные в PKCS # 5, чтобы получить множественные временные ключи. Нет необходимости в соли, поскольку фразы не используются.