Android15の新機能「プライベート スペース」　～データはどの程度保護されるのか～

# お知らせ
当記事はNTT DATA Techblogへ移転しました。
リンクは[こちら](https://zenn.dev/nttdata_tech/articles/76d9281dbe82ed)です。
今後の記事はNTT DATA Techblogにて公開されますので、引き続きお楽しみ下さい。

# はじめに
本記事で扱う内容は、Android 15で追加された、プライベート スペースという機能に関連したものです。
プライベート スペースは、一つのアプリを同一端末に複数インストールする、いわゆるクローンアプリ機能としての面が注目されますが、端末上に隔離環境を作り、そこにプライベートなアプリをインストールできる、というのが目的になります。
本記事では、どのようにしてアプリとデータが安全に隔離されているか、調査した内容を説明します。

# プライベート スペースとは
冒頭でも書いた通り、Android 15で導入された、新機能です。まだAndroid 15がインストールされた端末 or アップデート可能な端末は多くありませんので、使ったことがない方も多いかと思います。

プライベート スペースは、Android Open Source Projectのページで以下のように説明されています。
> プライベート スペースを使用すると、ユーザーはデバイス上に安全で隔離された環境を作成し、プライベートなアプリを他人の目から守ることができます。

https://source.android.com/docs/security/features/private-space?hl=ja

Android端末でプライベート スペースを有効にすると、アプリランチャ内に、「プライベート」とされた領域が現れます。
この領域は、普段はロックされており、明示的にロックを解除しないと利用できません。ロック解除方法として端末ロックと同じ方法を選んだ場合にも、端末ロックと同時には解除されません。
ちなみに、プライベートスペースが存在すること自体を隠すことも可能で、この状態だとランチャには「プライベート」の領域は出てきません。(隠した状態で、検索バーに「プライベート スペース」と入力することでロック解除用の項目が出てきます。入力途中でもサジェストで出てきます。ただし、「プライベートスペース」のように、「プライベート」と「スペース」の間にスペースを入れずに一気に入力した場合は出てきません。筆者はこれで少しはまってしまいました...)
<div align="center">
<img width=30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930884/3a84570d-cffb-0043-11dd-e0afde7acfdc.png">
<img width=30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930884/5623ff07-c5a9-d145-6842-1c4fdcd14f7b.png">
<img width=30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930884/b1e2c929-9cf9-9a2d-24d2-fb6b6201c2ef.png">
</div>

# どのようにしてアプリやデータを隔離しているか
プライベート スペースがアプリを隔離する仕組みは、Androidデバイスのマルチユーザ機能を利用して実現しています。正確には、ユーザーに関連付けられたプロファイルを作成しています。

実は、Androidは、端末に複数ユーザを設定できる機能が用意されています。この機能が有効になっていると、各ユーザで分離されたアプリインストール領域やデータ領域が割り当てられます。
ただし、この機能を有効にするためのUIは、デフォルトでは無効化されており、スマートフォンではあまり有効化されていないので、イメージしづらいかもしれません。同一の機種をベースにしていても、通信キャリア次第で塞がれているケースもあります。

プライベート スペースを有効化した際に作成されるユーザは、通常のマルチユーザ時に作成されるユーザとは異なります。システム全体に関する設定などが関連付けられたユーザと共有されるプロファイルと呼ばれる種類のユーザタイプがあり、この中でも特殊な「非公開プロファイル」が使われます。非公開プロファイルは、ロック状態ではメインユーザーからはアプリが見えない状態となります。(通知や設定なども見えません)。

この非公開プロファイルを作成すると、私のデバイスでは、以下のように内部ストレージの領域が分かれます。
`/data/user/0`←メインユーザの領域。/data/dataはここの別名。
`/data/user/10`←プライベートスペースの領域。
10という数字は、端末やその利用状況で変わる可能性があります。このフォルダは分離されており、直接のアクセスはできません。
なお、プライベート スペースがロック解除されているときに限り、メインユーザのアプリからもSharesheetや写真選択ツールによって、プライベート スペースへのファイル送信やプライベート スペース上のファイル選択が可能です。



# データはどの程度保護されているか
プライベート スペースの説明に、「安全で」とついていますので(英語原文ではsecure)、先ほど説明された領域について、何かしらのセキュリティがあるかが気になるところです。

結論から先に書くと、通常のメインユーザのストレージと同程度のセキュリティとなります。つまり、Android標準のアプリ毎に割り当てられたLinuxユーザによって独立した専用ストレージであることや、デバイスの暗号化による保護はありますが、個別のデータ暗号化などは存在しません。
そのため、プライベートストレージに格納されたアプリもデータ保護のためにアプリ側で暗号化の処理などを設けなければなりません。平文で保存していた場合、ルート権限では、容易にアクセスし、データを見ることが可能です。
もっとも、アプリ開発において、基本的に、メインユーザのスペースにインストールするアプリと、プライベートスペースにインストールするアプリで対応を変える必要はありません。
ただし、以下に類するアプリは、プライベート スペースの特性上、対応が必要とされています。詳しい対応内容は、Android Developersの内容を参照して下さい。
+ 仕事用プロファイル用のロジックを含むアプリ
+ 医療アプリ：ロック時に通知の表示などのフォアグラウンド、バックグラウンドアクティビティが実行できない
+ ランチャーアプリ：プライベート スペースに対応した判定やロック解除への対応
+ アプリストアのアプリ

# おわりに
プライベート スペースにインストールしたアプリとそのデータがどのように隔離された環境に置かれるのか、また何かしらの保護がなされているかを調査した内容について説明しました。
デバイスの画面上でのプライバシーについては、向上するケースがあるものの、データ保護の観点では通常のユーザスペースと同じ対策が必要となります。現時点では、プライベート スペースのみへのインストールを想定とした使い方はありませんし、通常のインストールとの区別をすることはありませんが、本調査が何かしらの参考になればと思います。