#algorithm #file-io #storage
#алгоритм #file-io #Хранение
Вопрос:
Я хочу проверить, зашифрован ли файл или нет, есть ли лучший способ проверить, можем ли мы обнаружить зашифрованный или нет.
- Я использовал энтропию Шеннона для проверки энтропии файлов, делая это, мы можем найти энтропии файла, что приведет к выводу, что данные либо зашифрованы, либо сжаты, либо имеют случайные данные, потому что, если энтропия файла высока, в нем могут быть указаны эти три условия
- Но он не может различать сжатый и зашифрованный файл, поскольку высокая энтропия может привести к любому из этих условий
Как мы можем определить, зашифрован файл или нет?
Комментарии:
1. Если вы ничего не можете предположить ни об исходном содержимом, ни об алгоритме сжатия, ни о схеме шифрования, это будет довольно сложно. У вас есть еще какая-нибудь доступная информация?
2. ничего особенного, кроме имени и формата файла.
3. Какой тогда формат? Я имею в виду,
.txt
никогда не шифруется, тогда.zip
как всегда сжимается и т.д.
Ответ №1:
Теоретически вы не можете определить разницу между случайными данными, зашифрованными данными и данными, которые были максимально сжаты.
Однако в реальной жизни сжатые и зашифрованные данные кодируются в форматах файлов с заголовками и другими областями с низкой энтропией, которые вы можете использовать для их распознавания.
Довольно хорошей реализацией было бы искать целую кучу тегов, которые вы знаете, а затем использовать эмпирическое правило:
- Небольшая часть материала с низкой энтропией в начале => зашифровано, в то время как
- Длинный бит материала с низкой энтропией в начале (например, jpeg) или материал с низкой энтропией в конце (например, zip), или много маленьких битов с низкой энтропией между ними (например, аудио / видео) => сжатый.
Кроме того, общая энтропия сжатых данных, если вы измеряете ее с помощью биграмм или триграмм, не будет такой высокой, как зашифрованные данные, потому что сжатие никогда не бывает идеальным.
Комментарии:
1. Я не понимаю, что такое маленький бит с низкой энтропией и длинный бит с низкой энтропией, не могли бы вы, пожалуйста, объяснить мне эту вещь
2. Вы хотите сказать, что проверяете энтропию файла в блоке битов, находите энтропию и анализируете
3. Да, хотя простая энтропия порядка 0, вероятно, не подойдет. Создайте прогностическую модель порядка 2 для всего файла, а затем для каждого отдельного байта вы можете увидеть, может ли модель для файла без этого байта предсказать этот байт. Сжатые файлы будут содержать кластеры из правильно предсказанных байтов.