Я работаю над небольшим хобби-проектом, чтобы лучше понять криптографию.
https://app.gitbook.com/@noojee/s/dvault/
Цель состоит в том, чтобы упростить шифрование набора файлов в «хранилище» и их расшифровку позднее.
Инструмент cli будет работать следующим образом
# сгенерировать пару ключей rsa
dvault init -p парольная фраза
#создать зашифрованное хранилище, содержащее <путь к файлу>
dvault lock <путь к файлу>
# расшифровать хранилище, восстанавливая обычный текстовый файл.
dvault unlock <путь к хранилищу> -p парольная фраза
Парольные фразы не будут передаваться через кли, это просто иллюстрация.
Таким образом, вопрос действительно касается структуры и процесса создания хранилища.
Насколько я понимаю, iv и соль должны быть случайными, но их не нужно шифровать.
Я намерен использовать aes 256 для шифрования файлов и использовать открытый ключ rsa для шифрования ключа aes.
Чтобы зашифровать содержимое файла, я создам файл «хранилище», который содержит:
открытым текстом:
rsaIV
rsaSalt
aes256iv
aes256Соль
зашифрованные элементы:
# сгенерировать, зашифровать и сохранить aeskey с открытым ключом rsa
aesKey = генератор aesKey
encRsa[aesKey] с использованием rsaPubKey, rsa256Iv, rsa256Salt
# сгенерировать, зашифровать и сохранить macKey с помощью ключа aes
aesMacKey = поколение aesMacKey
encAes[aesMacKey] с использованием aesKey, aesIV, aesSalt
# сгенерировать, зашифровать и сохранить bodykey с помощью ключа aes
aesBodyKey = генератор aesKey
encAes[aesBodyKey] с использованием aesKey, aesIV, aesSalt
# зашифровать/сохранить файл с помощью ключа aes
encBody = encAes256[файл] с использованием aesBodyKey, aes256Iv, aes256Salt
# сгенерировать mac из зашифрованного тела
macOfEncBody = mac[encBody]
# зашифровать, сохранить mac с помощью aes
encAes256[macOfEncBody] с использованием aesMacKey, aes256IV, aes256Salt
Здесь я использовал три ключа aes. Насколько я понимаю, ключи mac и body aes должны быть разными. Могу ли я повторно использовать основной ключ aes для шифрования тела и ключа Mac и удалить ключ тела?
https://en.wikipedia.org/wiki/Authenticated_encryption (Зашифровать Mac)
Я разделил aes IV и Salt на три ключа, это нормально или мне нужна уникальная соль / iv для каждого ключа?