Файл 420 байт розтискається в картинку png на 40 гігапікселів

У старі часи були популярні zip-бомби і рекурсивні архіви, які розпаковуються самі в себе. Zip-бомбу іноді можна використовувати для DoS-атаки. Наприклад, горезвісний файл 42.zip має розмір 42 кілобайт. Якщо почати його розпакування, то процес буде йти до тих пір, поки набір даних не досягне верхньої межі розпакування в 4,3 гігабайти. При цьому процес займе більше 4,5 петабайт в оперативній пам'яті (4 503 599 626 321 920 байт).

Програміст і хакер Девід Фіфілд (David Fifield) задумався, де ще можна застосувати «архівні бомби». Відразу на думку спадає графічний формат PNG, в якому використовується алгоритм стиснення DEFLATE в бібліотеці zlib.

Який буде максимальний розмір картинки з мінімальним розміром файлу? Ідея в тому, щоб файл можна було швидко завантажити з інтернету, але при цьому він не помістився в оперативну пам'ять на персональному комп'ютері.

Спочатку алгоритм DEFLATE замінює повторювані рядки покажчиками (LZ77), при цьому кожна пара біт кодує 258 однакових байтів з нулями. Ступінь компресії становить 1032 до 1.

Потім за справу береться bzip2, який стискає довгий набір однакових значень в максимально компактний вид.

В архіві на 420 байт - файл PNG розміром 6 132 534 байт (5,8 МБ) і зображенням 225 000 х 225 000 пікселів (50,625 гігапікселів). У піксельному буфері з трьома байтами на піксель картинка займе приблизно 141,4 ГБ.

Картинка майже повністю складається з нулів, з секретним повідомленням в центрі. Для кращого стиснення використовується однобітний колірний простір, хоча більшість програм для рендеринга графіки все одно резервують по три біта на піксель і розгортають картинку в 141,4 гігабайти.

2) встановити новий фавікон на сайті.

Поділися новиною з друзями: