🌋PNGファイル爆発しろ!2023/04/20に公開2023/05/025件pngアルゴリズム画像処理techDiscussionheriet2023/04/21たいへん面白いですね!他の画像形式にも応用が効く素晴らしい発想だと思います。 今回のレギュレーションですと、IDATチャンクは0バイトも仕様上 validとされているので、まだ無限に爆発できそう 0バイトのIDATもレギュレーション違反としたほうが良さそうです。 https://www.w3.org/TR/png/#12Compression Zero-length IDAT chunks are also valid, though even more wasteful. yohhoy2023/04/21(本記事の文脈では)重要な情報ありがとうございます!その発想はなかった... yohhoy2023/04/23もしかして...と思い、Deflate非圧縮ブロック分割エンコードにも「長さ0非圧縮ブロック」を含めてみたところ、zlibデコーダ実装は「長さ0非圧縮ブロック」を許容するようでした🫠 PNGフォーマットでは長さ0のIDATチャンクを、Deflateビットストリームでは長さ0非圧縮ブロックを含めることで、無限長のPNGファイルが作れてしまいますね。 ここは一つ「1bitの無駄もない 無駄に巨大なPNGファイル」=画像再構築に直接的にも間接的にも寄与しないビットの存在を避ける、と解釈してくださいませ。 返信を追加saki72023/04/21ステガノグラフィーに応用できそうだと思いました。 zTXtチャンクのようないわゆるコメントセクションに任意のデータを埋め込むのは愚直すぎて効果的な隠蔽にはならないので、ハフマン符号表に何か埋め込むような形で。(技術的に成立するのかどうかはわかりません) yohhoy2023/04/24Deflate動的ハフマン符号ブロック分割に含まれるハフマン符号表はビット水増しのためだけに存在していますから、原理的には追加情報埋め込みも可能とは思います。 (Deflate/RFC1951仕様順守に加えてzlibデコーダ実装による妥当性検査が存在するため、情報を埋め込みつつ妥当なハフマン符号表を構築するのは困難かもしれません) 最大の懸念は「画像サイズの割にめちゃくちゃ巨大なPNGファイル」の存在自体が、すでに怪しさ満点という点でしょうか ;P 返信を追加
heriet2023/04/21たいへん面白いですね!他の画像形式にも応用が効く素晴らしい発想だと思います。 今回のレギュレーションですと、IDATチャンクは0バイトも仕様上 validとされているので、まだ無限に爆発できそう 0バイトのIDATもレギュレーション違反としたほうが良さそうです。 https://www.w3.org/TR/png/#12Compression Zero-length IDAT chunks are also valid, though even more wasteful. yohhoy2023/04/21(本記事の文脈では)重要な情報ありがとうございます!その発想はなかった... yohhoy2023/04/23もしかして...と思い、Deflate非圧縮ブロック分割エンコードにも「長さ0非圧縮ブロック」を含めてみたところ、zlibデコーダ実装は「長さ0非圧縮ブロック」を許容するようでした🫠 PNGフォーマットでは長さ0のIDATチャンクを、Deflateビットストリームでは長さ0非圧縮ブロックを含めることで、無限長のPNGファイルが作れてしまいますね。 ここは一つ「1bitの無駄もない 無駄に巨大なPNGファイル」=画像再構築に直接的にも間接的にも寄与しないビットの存在を避ける、と解釈してくださいませ。 返信を追加
yohhoy2023/04/23もしかして...と思い、Deflate非圧縮ブロック分割エンコードにも「長さ0非圧縮ブロック」を含めてみたところ、zlibデコーダ実装は「長さ0非圧縮ブロック」を許容するようでした🫠 PNGフォーマットでは長さ0のIDATチャンクを、Deflateビットストリームでは長さ0非圧縮ブロックを含めることで、無限長のPNGファイルが作れてしまいますね。 ここは一つ「1bitの無駄もない 無駄に巨大なPNGファイル」=画像再構築に直接的にも間接的にも寄与しないビットの存在を避ける、と解釈してくださいませ。
saki72023/04/21ステガノグラフィーに応用できそうだと思いました。 zTXtチャンクのようないわゆるコメントセクションに任意のデータを埋め込むのは愚直すぎて効果的な隠蔽にはならないので、ハフマン符号表に何か埋め込むような形で。(技術的に成立するのかどうかはわかりません) yohhoy2023/04/24Deflate動的ハフマン符号ブロック分割に含まれるハフマン符号表はビット水増しのためだけに存在していますから、原理的には追加情報埋め込みも可能とは思います。 (Deflate/RFC1951仕様順守に加えてzlibデコーダ実装による妥当性検査が存在するため、情報を埋め込みつつ妥当なハフマン符号表を構築するのは困難かもしれません) 最大の懸念は「画像サイズの割にめちゃくちゃ巨大なPNGファイル」の存在自体が、すでに怪しさ満点という点でしょうか ;P 返信を追加
yohhoy2023/04/24Deflate動的ハフマン符号ブロック分割に含まれるハフマン符号表はビット水増しのためだけに存在していますから、原理的には追加情報埋め込みも可能とは思います。 (Deflate/RFC1951仕様順守に加えてzlibデコーダ実装による妥当性検査が存在するため、情報を埋め込みつつ妥当なハフマン符号表を構築するのは困難かもしれません) 最大の懸念は「画像サイズの割にめちゃくちゃ巨大なPNGファイル」の存在自体が、すでに怪しさ満点という点でしょうか ;P
Discussion
たいへん面白いですね!他の画像形式にも応用が効く素晴らしい発想だと思います。
今回のレギュレーションですと、IDATチャンクは0バイトも仕様上 validとされているので、
まだ無限に爆発できそう0バイトのIDATもレギュレーション違反としたほうが良さそうです。(本記事の文脈では)重要な情報ありがとうございます!その発想はなかった...
もしかして...と思い、Deflate非圧縮ブロック分割エンコードにも「長さ0非圧縮ブロック」を含めてみたところ、zlibデコーダ実装は「長さ0非圧縮ブロック」を許容するようでした🫠
PNGフォーマットでは長さ0のIDATチャンクを、Deflateビットストリームでは長さ0非圧縮ブロックを含めることで、無限長のPNGファイルが作れてしまいますね。
ここは一つ「1bitの無駄もない 無駄に巨大なPNGファイル」=画像再構築に直接的にも間接的にも寄与しないビットの存在を避ける、と解釈してくださいませ。
ステガノグラフィーに応用できそうだと思いました。
zTXtチャンクのようないわゆるコメントセクションに任意のデータを埋め込むのは愚直すぎて効果的な隠蔽にはならないので、ハフマン符号表に何か埋め込むような形で。(技術的に成立するのかどうかはわかりません)
Deflate動的ハフマン符号ブロック分割に含まれるハフマン符号表はビット水増しのためだけに存在していますから、原理的には追加情報埋め込みも可能とは思います。
(Deflate/RFC1951仕様順守に加えてzlibデコーダ実装による妥当性検査が存在するため、情報を埋め込みつつ妥当なハフマン符号表を構築するのは困難かもしれません)
最大の懸念は「画像サイズの割にめちゃくちゃ巨大なPNGファイル」の存在自体が、すでに怪しさ満点という点でしょうか ;P