DSカードがCDの呪いの影響を受けなかったとはいえ、任天堂はゲームの流通をコントロールし続けるためにいくつかの保護システムを導入しました。
セキュリティの仕組み
それでは、それぞれのセクションを見てみましょう。
暗号化システム
ニンテンドーDSは、主にメモリインターフェースとSlot-1カード間の通信を暗号化するために対称暗号化システムを使用しています。 暗号化の実行方法について話し合う前に 使用されるアルゴリズムと、(暗号化を実行するために使用される) キーがどのように生成されるかについて話しましょう。
カードの「ヘッダー」領域にはゲームコード(ゲームの一意識別子) と呼ばれる値が含まれており、メモリインターフェイスはこのブロックを取得してKEY1を生成します。このKEY1は、カードに送信されるコマンドをさらに暗号化するために使用します。 KEY1 暗号化は Blowfish アルゴリズム に基づいています。
その後 KEY1 は、内部クロックやカートリッジヘッダーのその他の値と混合して、 KEY2 という新しいキーを生成します。 KEY1との根本的な違いは、ランダムな値を使用して予測不可能にすることです。 KEY2暗号化は、データを難読化するために複数のXOR演算およびShift演算に依存します。
KEY1とKEY2は、異なる段階でSlot-1インターフェースによって使用され、カードとの通信を保護します。 また、KEY1はARM7 BIOSによってDSカードを検証し、カードインターフェースを初期化するためにも使用されます。
DSカードの認証
前述したとおり、BIOSには起動時にNDSカードを検証するいくつかのルーチンが含まれています。 これは以下のように動作します。
- ARM7 BIOSがカートリッジのチップIDを取得し、RAMに保存した後、KEY1およびKEY2暗号化を有効にします。
- 'セキュアエリア'の最初の2KBがランダムな順序でRAMにコピーされます。 この領域の最初の8 Bは、 セキュア エリア IDと呼ばれる文字列を格納します。その次の領域からは、いくつかのチェックサム(CRC16タイプ) とその他のメタデータが続きます。 これらはすべてKEY1で暗号化されており、特にセキュアエリアIDは異なるパラメータを使用してKEY1で2回暗号化されます。
- ARM7 BIOSはセキュアエリアIDを復号し、復号された値が
encryObjと一致するかどうかを確認します。 もし一致していれば、カード検証の第一テストを通過したことになります。 その後、文字列はアルゴリズムを明らかにしないように破壊されます。 検証に失敗した場合、セキュアエリアの2KBはゴミデータで埋められ、カードの残りの部分が読み取られることを防ぎます。 - 第二のテストは、ランダムなタイミングで再びチップIDを取得することです(ランダムシードは内部クロックに依存します)。 取り出したチップIDの値が保存しておいた最初のチップIDと一致する場合、 2番目のテストは合格です。
- 最後に、セキュアエリアの残りの部分はランダムな順序で取得され、RAMに再構築されます。 この後、ファームウェアが実行されます。
もしすべてがうまくいった場合、ファームウェアはRAM内でカードの必要な実行ファイルを見つけ出し、ユーザはゲームを起動することができます。 そうでなければ、ゲームセレクターは灰色で表示されます。
ダウンロードプレイの保護機能
ダウンロードプレイ経由で受信したプログラムは、任天堂が RSA署名 を使用して署名する必要があります(任天堂のみが秘密鍵を知っています)。
このチェックはファームウェアによって実行されます。
保護機能の敗北
あなたがHomebrewのユーザーだった場合は、おそらくこのソフトウェアを実行するために利用可能なオプションを実行できます。 実際、現在のハック方法がすべて発見される以前は、ハッカーは任天堂の複雑な海賊版対策システムを回避するのに苦労していました。
既存のSlot-2
GBAサブシステムはセキュリティ保護が実装されていない(ロゴ・トリックは除く) カートリッジをそのまま実行していたため、既存のGBAフラッシュカートはNDSと互換性がありました。 これによって、DSゲームに固有の新しい機能が使えないことを気にしなければ、GBA home brewを実行することが可能でした。
いつものとおり、フラッシュカートリッジでの海賊版ROMの実行ができます。しかし、任天堂はGBAの保護システムを変更できなかった(既存のゲームを使用不能にする可能性があるため) ので、ゲームの販売会社はそれを受け入れざるを得ませんでした。
強化されたSlot-2

DSゲームを起動できるSlot-2フラッシュカートの例。 これをブートストラップするにはSlot-1パススルーカードが必要です。
秘密裏にDSのBIOSとファームウェアの研究が行われた結果、NDSカードの実行がGBAスロットにリダイレクトされることが発見されました。 NDSカードはまだクラッキングされていませんが、この方法により、Slot-1カードのセキュリティシステムを一時的に回避し、DSモードでSlot-2プログラムを実行できるようになりました。
このようにして、新しい世代のSlot-2フラッシュカートが市場に登場しました。 それらはARM9コードを組み込み、Slot-1からブートストラップされると実行されます。 ブートストラップ自体は、以下の方法(「パススルーメソッド」と呼ばれる) の1つを使用して達成されました。
- PassMeカードを使用する: これは正規のSlot-1カードが必要です。 PassMeは、Slot-1と正規のゲームの間に位置する一種のアダプターです。 基本的に、カードからコンソールに送られたヘッダを改ざんして、コンソールを騙してスロット2コードを実行し、スロット2カートリッジにロードします。
- WifiMe: 互換性のあるWi-Fiカードを搭載したPCが必要です。 変更されたドライバーを使用する場合 DSがDownload Play を使ってダウンロードできるカスタマイズされたプログラムをブロードキャストすることが可能です。 起動すると、実行をSlot-2にリダイレクトします。 これは、ファームウェアがバイナリの特定の領域の RSA 署名をチェックしないことを悪用したものです。
- FlashMe: 永続的な解決策。 以前の方法を連鎖させて
SL1端子をブリッジすることで、フラッシュカートリッジがある場合にSlot-2から起動するために、ファームウェアを書き換えるホームブリュープログラムを実行することが可能になりました。 このハックは、ダウンロードプレイからhomebrewを起動するために、デジタル署名チェックも削除しました。
予想通り、ニンテンドーはこれらの改造に対して、パッチを当てたファームウェアの更新によるDSのバージョンアップを行いました。 なので、その後ハッカーはBIOSの利用に焦点を当てた他の方法を見つけようとしました(パッチを適用することは困難です)。
ネイティブSlot-1

「R4 DS」は市場に登場した最初のSlot-1フラッシュカードの一つでした。 その直後、膨大な数のレプリカがそれを圧倒しました。
有名なニンテンドーDSエミュレーター「NO$GBA」の開発者であるマーティン・コースは、後にBIOSを抽出し、Slot-1セキュリティをリバースエンジニアリングすることに成功しました。 これにより、ニンテンドーDSセキュリティの真のメカニズムが明らかになりました。 この記事でご覧になったように、誰かがリバースエンジニアリングしない限り、暗号化システムは機能しました(これが対称暗号化システムの限界です。 秘密鍵が保存されないRSAなどの非対称暗号化システムとは異なります) 。
いずれにせよ、これらはどの種類のコンソールでも動作し、ニンテンドーDSプログラムをネイティブに実行するプラグアンドプレイのSlot-1フラッシュカードの大量流入を引き起こしました。 パススルー方式も『NoPass』カードの登場により改善され、正規のゲームを必要とせずにSlot-2フラッシュカートをロードできるようになりました。
すべての既存の小売ゲームに影響を与えるような、破壊的な変更を加えなければ暗号化システムを変更できなかったので、任天堂は最終的にこの戦いに負けました。 唯一残された道は、以前のコンソールと同じように、法的な対応をとることでした。
観察記録
これは私の個人的な意見ですが、以前のコンソールの他のhomebrewメソッドと比べると、このフラッシュカードのシンプルさは本当に印象的です。 過去の記事では、ユーザーが最終的にhomebrewプログラムや海賊版のゲームを実行したい場合は、複雑な手順を辿らなければならないと説明しました。
しかし、DSの場合、フラッシュカードは通常のゲームと同様に(異なった「スタイル」のマーケティングではありますが)実際に販売されており、海賊行為に至るのがいかに容易であるかをゲームスタジオが心配したことは間違いないでしょう。

Slot-1フラッシュカードは一時かなり活発な産業で、多くの製品が提供されていました。
もう一つ驚くべきことは、市場に登場したブランド付きフラッシュカードの量です(すべての模倣品を除いて)。 技術的な観点から見ると、フラッシュカードは単なるSDカードアダプター にすぎません。 しかし、この業界が進化するにつれて、一部のメーカーは、より優れたソフトウェアパッケージ(「カーネル」や「ファームウェア」と呼ばれる)を設計したり、非常に珍しいハードウェアを備えるための追加の工夫を行いました。 例えば、「N-Card」は組み込みストレージを提供し、「SuperCard DSTwo」はIngenic Jz4740 CPU(MIPS互換)を搭載し、360 MHzで動作しました! この情熱は拡張カートリッジ以来見ていません。