PS3のセキュリティ構造:実行ファイルのプロテクト | みらいマニアックス !

PS3のセキュリティ構造:実行ファイルのプロテクト

PS3のセキュリティは非常に強固で、発売後長期間に渡ってハッカーの猛攻に耐え、不正なプログラムの実行を許さなかった。その大きな理由の一つは、内部の実行ファイルが複雑かつ強固に暗号化されていたためだ。

おおざっぱに言って、PS3の内部の実行ファイルは三重に暗号化されている。

第一段階:ファイル本体の暗号化(AES128)
第二段階:ファイルへの電子署名
第三段階:署名と暗号化キーをさらに暗号化(AES256)


実際の処理では、これを逆向きに復号化していくことになる。実行ファイルは以下のように復号化される。
なお前提として、実行ファイルはELF形式にセキュリティ情報を追加したSELF形式。
SELF形式ファイルは、SCE Header、Metadata Information、Metadata、Metadata Header 、データ部(ELFファイル)から成る。ELF形式にセキュリティヘッダを付けた形式。


第三段階:ローダーキーの取得
Metadata Informationからローダーキーを取り出す。ローダーキーはAES256CBCで暗号化されているので、ローダー自身が持つ固定キー(erk and riv)で復号化する。

第二段階:ファイルの署名承認
Metadata HeaderはAES128CTRで暗号化されている。
(1)で取得したローダーキーで復号化し、署名情報を取り出す。
署名は秘密鍵で暗号化されているため、個々の本体毎に定められている公開鍵で署名情報を復号化する。
SELFファイルのハッシュ値をとり、復号化した署名情報と比較して署名を承認する。

第一段階:メタデータキーの取得とデータ部の復号化
MetadataはAES128CTRで暗号化されている。
(1)で取得したローダーキーで復号化し、メタデータキーを取り出す。
データ部はAES128CTRで暗号化されているので、(1)で取得したローダーキーで復号化する。復号化したデータ部はハッシュ値を取り、上で取得したメタデータキーキーと比較し、確認する。

(以前にPS3のハッキング関連のニュースで「キー」の漏えいが一時話題になったが、これはおそらく、PS3ブートプロセスにおけるかなり上位のローダー「metldr」の固定キーを指すものと思われる)


なお、上の処理は全てSPE内部で処理される。

SPEは復号化/暗号化処理の実行中は自閉(アイソレーション)モードで動作する。このため、処理中の情報が外部に漏えいすることはない。

アイソレーションモードで動作するSPEのLS(ローカルストア。外部と共有されない、SPE固有のメモリ領域)領域は他のSPEやPPEからのアクセスが遮断され、外部からの読み書きは一切できない。アイソレーションモードで暗号に用いる秘密鍵などの機密情報を扱うことで、他のプロセスからそれらを盗み取ることを不可能にする。(略)外部からのプロセス停止が実行されると、SPEのコンテキストおよびそのLSに置かれたプログラムやデータは速やかに消去されるため、機密情報が外部に漏洩することは無い。」(Wikiより)

上記のファイルの暗号化、あるいはさらにBlu-ray自体のプロテクトだけではまだ不安だとばかりの、セキュリティに対するソニーのパラノイアックな執念が感じられる。


追記

ハッキング関連の話題は、非常に面白いものであっても、掲載にはちょっと気を使う。
今回の記事レベルであればとっくに対策が済んでいる内容でもあり、また純粋に技術的な話題として楽しめるレベルかと考え、掲載してみた。

これほどまでに強固なプロテクトを、一時的にせよ破ったハッカーがいるというのは少々信じ難いほどだ。

悪名高いハッカーGeohotことGeorge Hotzは、ソニーに招かれて自身のテクニックを披露したことがある。
Hotzは後で、ソニーで彼を迎えたのは弁護士ではなく「尊敬できる」エンジニアの一団で、みな彼のプログラミングの才能と、彼がどのようにPS3のセキュリティを破ったかについて知りたがっていた、と語っている。
ハッカーを擁護する気は毛頭ないが、鉄壁のハズのセキュリティを破ったハッカーと話をしてみたいという、ソニーのエンジニアの気持ちもわからないでもない。

これほどの情熱をうまく使いこなせればよいのにと思う。

例えばセキュリティ・ホールを発見・報告すれば一定期間後にハードメーカーが賞金を支払う、というスキームを導入したらどうだろう?緊急性・重大性で賞金を設定して、一定期間中に申請者が複数でれば賞金は山分け。賞金が確定したら公開し、ハッカーのテクニックをたたえるとか。もちろんハードメーカーはその「一定期間」中に対策を取るわけだ。


次世代機でもセキュリティは地味に重要なポイントなのだろう。そこで、常時オンライン接続という力技でねじ伏せようとするMSと、あくまで本体側の鉄壁のプロテクトにこだわるソニーの違いは面白いと思う。

PS4でもセキュリティへのパラノイアックなこだわりは相変わらず続くことだろう。

だがAMDのCPUにはSPEも自閉モードはないので、PS3のやり方は踏襲はできない。アプリ層から隠蔽されているらしいセカンダリ・チップで暗号化/復号化の処理をさせたりするのだろうか?


参考: PS3Dev Wiki  Boot_Order
参考: PS3Dev Wiki  SELF_File_Format_and_Decryption