Шифрование больших файлов с помощью открытого ключа

Мне нужно зашифровать файл размером 100 КБ с помощью открытого ключа. Я читал несколько сообщений, в которых утверждалось, что напрямую шифровать большие файлы с помощью открытого ключа непрактично, и что предпочтительный метод - зашифровать файл с помощью симметричного ключа, а затем зашифровать этот симметричный ключ с помощью открытого ключа. Кажется, наивным решением было бы разбить большой файл на части и зашифровать каждый из них одним и тем же открытым ключом. Мой вопрос в том, является ли это решение неправильным и почему?


person wanderingbear    schedule 16.08.2010    source источник


Ответы (5)


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

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

person Thilo    schedule 16.08.2010
comment
Разделить файл - плохая идея, en.wikipedia.org/wiki/Watermarking_attack - person TBH; 16.08.2010
comment
@TBH: Да, если подумать, можно легко обнаружить повторяющиеся блоки и тому подобное. С другой стороны, эту проблему можно решить, добавив случайные отступы. Я по-прежнему считаю, что принципиальная разница только в производительности. - person Thilo; 16.08.2010
comment
С точки зрения производительности лучшее, что вы можете сделать, - это обменяться ключом шифрования AES (или Serpent) и зашифровать эти данные с помощью симметричного ключа. - person TBH; 16.08.2010

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

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

Разделение файла увеличивает накладные расходы на управление (как вы можете быть уверены, сколько фрагментов будет? Что вы их все передали?) И не добавляет никакой безопасности. Напротив.

person chryss    schedule 16.08.2010
comment
Сохранение секрета общего ключа решается путем случайной генерации нового ключа для каждого сообщения, его передачи получателю в зашифрованном виде с открытым ключом и затем отбрасывания. - person Thilo; 16.08.2010
comment
Альтернативой является сочетание обоих. Шаг 1: Создайте любой Randome-Key, например, строку из 64 символов (512 бит) Шаг 2: симметрично зашифруйте файл с помощью ключа из шага 1 Шаг 3: зашифруйте ключ любым асимметричным шифрованием (открытым ключом) Шаг 4: добавьте результат из шага 3 в конец зашифрованного файла. Чтобы расшифровать: Шаг 1: прочтите и удалите последний бит XXX из файла Шаг 2: расшифруйте данные из шага 1 с помощью вашего закрытого ключа Шаг 3: расшифруйте файл с помощью ключа, который является результатом шага 2 - person Floyd; 16.08.2010
comment
Да, я пояснил ответ - я говорил в общих чертах о хранении ключа в секрете, и для этого нужен шаг открытого ключа. - person chryss; 16.08.2010

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

person Ahmet Ardal    schedule 16.08.2010
comment
Если производительность не учитывается, почему гибридное шифрование является лучшей практикой? - person Thilo; 16.08.2010
comment
Я имею в виду, что производительность не увеличится, если вы разделите файл и снова воспользуетесь асимметричным шифрованием. При гибридном подходе у вас есть преимущество шифрования больших данных с помощью симметричного шифра, потому что симметричные шифры относительно более эффективны по времени по сравнению с асимметричными шифрами. И предположим, что ваш секретный ключ составляет 256 бит / 32 байта, вам нужно зашифровать только 32 байта данных с помощью вашего асимметричного шифра. Такой подход лучше, чем шифрование всего файла асимметричным шифром. - person Ahmet Ardal; 16.08.2010

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

person Nickolay Olshevsky    schedule 23.08.2010
comment
И GnuPG тоже - GnuPG - одна из реализаций стандарта OpenPGP. Существуют также другие коммерческие реализации, которые могут быть более гибкими и удобными. - person Nickolay Olshevsky; 24.08.2010

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

person Community    schedule 12.06.2011