より安全なAndroidアプリを作成する! Samsung Knox SDKの簡単な導入方法を学ぶ
セキュアコンテナ:企業データやアプリケーションを分離して保護し、不正アクセスを防止します。
VPN:安全なVPN接続を確立し、ネットワークトラフィックやデータを保護します。
暗号化:データを暗号化し、転送中のセキュリティを確保します。
ポリシー管理:パスワードルール、デバイスロック、データ消去などのデバイス設定やポリシーを管理します。
認証:生体認証やスマートカード認証などの強力な認証機能を実現します。
セキュリティアップデート:アプリケーションやオペレーティングシステムを安全に更新し、全体的なセキュリティを向上させます。
この記事では主に
Samsung Knox SDK 導入時の基本的な概念
および遭遇した問題を共有します
- 現在サポートされているSamsungの携帯電話とバージョン:参考
- Knox SDKのダウンロードとインストール
- 公式サイトに従ってSDKをインストールし、関連するSDKをプロジェクトに導入します
- 導入時にどのバージョンを使用するかはmapping表を参照してください
- ライセンスキーを取得する必要があります
- Knox 2.7以前のバージョンを開発している場合、生成されたライセンスキーは後方互換のキーを「選択」できます
- ライセンスキーは
Development Key
とCommercial Key
に分かれており、テスト
またはリリース
に応じて設定できます - 関連するapk:関連するapkのみが生成されたライセンスキーを使用できます
(バックエンドにはオプションの選択肢があり、関連付けるかどうかを選択できます)
- 実際のテストでは、
Development Key
は同じアカウントで1つしか持てません -> ライセンスキーのルールと制限
- 開発時にライセンスキーをアクティブ化する方法はKnoxのバージョンによって異なります : こちらを参照
-
Knox開発に関する公式のサンプル:参考
- Knoxライセンス
- ライセンスの利用可能な権限リスト
- ライセンスの3つの比較表
- バックエンドの実際のテストでは、SDKライセンスキーはさらに細分化されています:
KPE Development
: テスト環境用、キーの有効期間は0.5年
KPE Standard
: Standard permissionsへのアクセスを許可、10,000,000シート、キーの有効期間は2年
KPE Premium
: Standard, Premium, and Custom permissionsへのアクセスを許可、10,000,000シート、キーの有効期間は2年
KPE DualDAR
: Standard, Premium, Custom and DualDAR permissionsへのアクセスを許可、代理店と交渉して年数または永久サブスクリプションを決定
- 開発権限の宣言:
Knox 3.0
は一部の権限を宣言することを提供し、AndroidManifest.xmlでKnox権限を宣言できます。宣言しない場合、デフォルトですべてのKnox権限が有効になります。宣言した場合、宣言された権限のみが使用可能です。参考
- 現在のネイティブ
AirDroid Biz
で使用されているDevicePolicyManagerとの初期比較 (類似APIのみを先に比較し、使用したいものを議論し、実際の動作をテストする
)- すべての権限はこちらで確認できます
- 実際の比較
一般的なDevicePolicyManager
とKnoxが提供する機能の参考
- 参考リンク
- Samsung Knoxはwebベースとデバイスベースの2つの方法で使用でき、現在のアーキテクチャは以下の通りです:
- Android 6.0.1 Samsung S6、テスト
Knox 3.8
- Samsung開発者バックエンドからKnox 3.8版をダウンロードし、使用方法はknox3.7.1以上を参照、URI解析時に例外が発生
-
knox2.7以下を使用すると
java.lang.RuntimeException: Stub!
が発生
-> 解決方法:supportlib.jar
を追加し、gradle dependenciesに追加
IDEのAdd as library機能を使用する場合、以下に注意
: Knox SDKとsupportlibの2つのjarファイルを以下のように変更する必要があり、ランタイムエラーが発生しなくなります -
上記が成功した後、ライセンスキーをアクティベートする際に、admin権限を有効にしないと
internal error
が返されます
- ここに罠があります。ライセンスをアクティベートする際には、Boardcastを使用して結果を受け取る必要があります
- しかし、現在の公式ドキュメントでは、Knoxのライセンスアクティベーションのブロードキャストアクションは以下のように表示されています しかし、旧版のKnox APIレベル19 (Knox 2.6)では、実際にはKnoxは上記のアクションを発行せず、以下のようになります
-
ここで公式が言っているのは2.xから3.xへのアップグレード時にnameSpaceが変更されたということです (Knox API 30から変更されました)
- そこで彼は方法を提供しています:参考
supportlib.jar
を追加し、上記リンク内の関連レシーバーをManifest.xml
に追加します。
-
Android 12 Samsung A52s、テスト
Knox 3.8
knox3.7.1 higher
とknox2.7 lower
の方法を使用してライセンスキーを有効にすることができます。
- その他の動作
- 開発者バックエンドで現在ダウンロード可能なKnox SDKは3.3〜3.8です。
上記のテストケースはすべてKnox 3.8でコンパイル可能ですが、
一部の動作は対応するバージョンのみをサポートしている可能性があります。
後にAndroid 12でKnox 3.3をテストしましたが、
この時にknox3.7.1 higher
をアクティブにするとクラッシュします。
Android 6.0.1でKnox 3.8を使用してknox3.7.1 higher
をアクティブにしても同様にクラッシュします。
- 開発者バックエンドで現在ダウンロード可能なKnox SDKは3.3〜3.8です。
- Vpn開発
- 開発ドキュメントによると、2つのVpnソリューションが提供されています。
-
以前研究したネイティブのAndroid Vpn Serviceに似ています。 Knoxはこれを基に関連機能を拡張しています:参考
-
もう一つはGenericVpnPolicy APIです。
createVpnProfile
では、対応するJSON形式を提供してvpnプロファイルを設定します。
異なるJSON形式が異なるモードに対応します。
参考:vpn JSON形式 -> 現在のKnoxドキュメントと以前の要件に類似しているものには、
ipsec Hybrid RSA、PSK、xauth RSA、IKE2 PSK、IKE2 RSAなどがあります。
また、ドキュメントにはKnox api level 35 Deprecated
と記載されています ->Android 12
に対応。
-
- 開発ドキュメントによると、2つのVpnソリューションが提供されています。
- ロック画面のパスワード
- 生体認証の設定、指紋認証や顔認証:こちらをクリック
実際にKnoxを有効にする方法は、公式ドキュメントの方法を参照するだけで十分です。
ここでは、私が計画した思考を皆さんに提供します。以下の通りです:
- 現在、これをdagger2モジュールとしてパッケージ化しています。
- 構造は以下の図の通りです:
ExampleKnoxActivity
はデモ用で、他のクラスの実装例を含みます。- その後、
KnoxManager
をインジェクトし、KnoxModule
を初期化するだけで使用できます。
KnoxLicense
にはいくつかの定数とキー値が含まれており、後で変更可能です。将来的にキーをアップロードしない場合も調整可能です。- 実際の使用では
KnoxManager
を理解するだけで十分です。 - 主にKnoxのブロードキャストの登録/解除、ライセンスの有効化/無効化などの機能を追加しました。
今後は主に
KnoxManager
から関連する機能を追加します。 KnoxLicenseReceiver
は、公式のKnox 3.7以下ではボードキャスト方式のみでアクティベーションの成否を受信します。
ここではKotlinの特性を利用してパッケージ化しています。
実際の使用では、knoxManager内のメソッドを使用して登録し、結果を返します。
理論的にはKoinをDIとして使用することも可能で、個人的にもKoinが好きです。後ほど、KoinでのDIについての記事を書く予定です。
- Knoxのパーミッションを追加
- パーミッション宣言をmanifestに追加
-
Knox API 30は新旧パッケージ名の境界線です。
今回の実験では、Knox API 19では新しいパーミッションリクエストは使用できませんでした。例えば:
com.samsung.android.knox.permission.KNOX_APP_MGMT
com.example.supportlibclient.SUPPORT_PERMISSION
を使用して成功しました。 - ランタイムパーミッション
- その他の関連事項
一部のAPI操作には対応するURIの解析が必要です。ここでは共通のものを取り上げます。