🌋

PNGファイル爆発しろ!

に公開
5

Discussion

herietheriet

たいへん面白いですね!他の画像形式にも応用が効く素晴らしい発想だと思います。
今回のレギュレーションですと、IDATチャンクは0バイトも仕様上 validとされているので、まだ無限に爆発できそう 0バイトのIDATもレギュレーション違反としたほうが良さそうです。

https://www.w3.org/TR/png/#12Compression

Zero-length IDAT chunks are also valid, though even more wasteful.

yohhoyyohhoy

(本記事の文脈では)重要な情報ありがとうございます!その発想はなかった...

yohhoyyohhoy

もしかして...と思い、Deflate非圧縮ブロック分割エンコードにも「長さ0非圧縮ブロック」を含めてみたところ、zlibデコーダ実装は「長さ0非圧縮ブロック」を許容するようでした🫠

PNGフォーマットでは長さ0のIDATチャンクを、Deflateビットストリームでは長さ0非圧縮ブロックを含めることで、無限長のPNGファイルが作れてしまいますね。
ここは一つ「1bitの無駄もない 無駄に巨大なPNGファイル」=画像再構築に直接的にも間接的にも寄与しないビットの存在を避ける、と解釈してくださいませ。

saki7saki7

ステガノグラフィーに応用できそうだと思いました。
zTXtチャンクのようないわゆるコメントセクションに任意のデータを埋め込むのは愚直すぎて効果的な隠蔽にはならないので、ハフマン符号表に何か埋め込むような形で。(技術的に成立するのかどうかはわかりません)

yohhoyyohhoy

Deflate動的ハフマン符号ブロック分割に含まれるハフマン符号表はビット水増しのためだけに存在していますから、原理的には追加情報埋め込みも可能とは思います。
(Deflate/RFC1951仕様順守に加えてzlibデコーダ実装による妥当性検査が存在するため、情報を埋め込みつつ妥当なハフマン符号表を構築するのは困難かもしれません)

最大の懸念は「画像サイズの割にめちゃくちゃ巨大なPNGファイル」の存在自体が、すでに怪しさ満点という点でしょうか ;P