「このドレスは何色?」現象、そして「ヤニー vs. ローレル」現象は誰もが覚えているでしょう。今、世界は新たなパズルに夢中になり、Appleユーザーと長年のライバルたちを対決させることになります。
使い方はこうです。まず、この画像をPC、Androidスマートフォン(またはApple以外の製品)で表示します。次に、同じ画像をAppleデバイスで表示します。すでにMac、iPhone、iPadをお使いの場合は、別のプラットフォームに切り替えてください。
別の画像でもう一度試してみましょう。
なかなかいいですね!最初の画像をPCやAndroidスマートフォンで表示すると、「HELLO WORLD」というメッセージが表示されるはずです。Appleデバイスでは、同じ画像ファイルに「HELLO APPLE」と表示されます。(ただし、注意点があります。詳細は後述します。)

2枚目の画像はさらに奇抜です。Apple以外のデバイスでは古いIBM PCが表示されますが、iデバイスに切り替えると古いMacが表示されます。

さて、一体何が起こっているのでしょうか?このパズルの立役者であるエンジニア兼暗号学者のデイビッド・ブキャナンに解説してもらいましょう。
「マルチスレッドPNGデコーダーを独自に開発しているときに、このバグを発見しました。設計をじっくり考えていたところ、悪用可能な実装バグがあることに気づきました」とブキャナン氏はブログ記事に記しています。「Appleが並列デコード可能なPNGの独自実装を持っていることを知り、彼らも全く同じミスを犯していたことに気づきました!」
簡単に言えば、画像をデコードする方法は複数あります。単一のスレッドで実行することも、ブキャナン氏が試みたように、ブロックに分割された並列スレッドで実行することもできます(これはプログラムを高速化するために用いられる手法です)。彼は自身のプロジェクトでバグを発見し、その後Appleも同じミスを犯していることを突き止めました。彼は、decompress(a + b) != decompress(a) + decompress(b) (!=は「等しくない」という意味)という条件でPNGファイルをレンダリングできることを突き止めました。つまり、2つの部分を別々にデコードしてから結合しても、同じ2つの部分を一緒にデコードした場合と必ずしも同じ結果が得られるわけではないということです。
「これは、圧縮されていないブロックの途中で終了した場合に発生する可能性があります。そのため、画像を並列デコーダーでデコードするか非並列デコーダーでデコードするかによって、2通りの解釈が可能になる可能性があります」とブキャナン氏は続けた。
懐疑的な皆さんへ、私がこれらの画像をバージニア大学の研究者である兄に見せたところ、兄はファイルをハッシュ化(数字に変換)し、確かに同じものであることを確認しました。これは、ブキャナンが、ユーザーが使用しているブラウザや OS に基づいて異なるファイルを提供することで手抜きをしていないことを証明しています。
このパズルを再現できない場合は、ブラウザに問題がある可能性があります。このトリックはハードウェアではなくAppleのソフトウェアに依存しているからです。複数のデバイスとブラウザで画像を確認した結果、Safariを実行しているApple製品では常に「HELLO APPLE」と表示されるのに対し、他のブラウザを使用している非Appleデバイスでは「HELLO WORLD」と表示されることがわかりました。
しかし、混ぜたり組み合わせたりすると混乱が生じます。
Appleのモバイルデバイス(iPad、iPhone)でSafari以外のブラウザを使用すると、「HELLO APPLE」というメッセージが表示されました。不思議なことに、同じブラウザ(Chrome、Opera、Edgeなど)をMacで使用すると、「HELLO WORLD」というメッセージが表示されました。確証はありませんが、これはApp Store向けに開発されたブラウザアプリがAppleのPNGレンダリング画像ライブラリを使用しているのに対し、macOSにプログラムとしてダウンロードされたブラウザは独自のPNGパーサーを使用していることを示唆しています。
いずれにせよ、もしこの楽しみに参加したいなら、ブキャナン氏が投稿した「Ambiguous PNG Packer」というツールを使えば、Appleソフトウェアで実行した際に見た目が変化する画像を誰でも作成できます。ただし、画像ファイルの解析におけるこうした逸脱はセキュリティ上の懸念事項となる可能性があり、ブキャナン氏は「慎重に扱う必要がある」と考えています。
午後1時30分(東部標準時)更新:当初、この記事には埋め込み画像が掲載されていましたが、CMSのファイル変更により、本来の見た目が損なわれてしまいました。Appleと他のプラットフォームで異なる表示になる写真へのリンクを追加し、記事を更新しました。
BleepingComputer経由