より安全なAndroidアプリを作成する! Samsung Knox SDKの簡単な導入方法を学ぶ

Samsung Knox SDK はセキュリティソリューションです
さまざまなセキュリティ制御および管理オプションを提供し、企業が機密データやアプリケーションを簡単に保護できるようにします。 開発者はアプリケーションに以下の機能を実装できます:

セキュアコンテナ:企業データやアプリケーションを分離して保護し、不正アクセスを防止します。
VPN:安全なVPN接続を確立し、ネットワークトラフィックやデータを保護します。
暗号化:データを暗号化し、転送中のセキュリティを確保します。
ポリシー管理:パスワードルール、デバイスロック、データ消去などのデバイス設定やポリシーを管理します。
認証:生体認証やスマートカード認証などの強力な認証機能を実現します。
セキュリティアップデート:アプリケーションやオペレーティングシステムを安全に更新し、全体的なセキュリティを向上させます。

この記事では主に
Samsung Knox SDK 導入時の基本的な概念
および遭遇した問題を共有します

前導
  • 現在サポートされているSamsungの携帯電話とバージョン:参考
    • Knoxをサポートしていない場合、公式が提供する推奨方法:参考
    • 各Knoxサービス:参考
  • Knox SDKのダウンロードとインストール
    • 公式サイトに従ってSDKをインストールし、関連するSDKをプロジェクトに導入します
    • 導入時にどのバージョンを使用するかはmapping表を参照してください
    • ライセンスキーを取得する必要があります
      • Knox 2.7以前のバージョンを開発している場合、生成されたライセンスキーは後方互換のキーを「選択」できます
      • ライセンスキーは Development KeyCommercial 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が提供する機能の参考
    • 参考リンク
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 higherknox2.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をアクティブにしても同様にクラッシュします。
開発中に遭遇した事例と研究
  • Vpn開発
    • 開発ドキュメントによると、2つのVpnソリューションが提供されています。
      1. 以前研究したネイティブのAndroid Vpn Serviceに似ています。 Knoxはこれを基に関連機能を拡張しています:参考

      2. もう一つは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に対応。

  • ロック画面のパスワード
実際の開発でライセンスとKnox権限を有効にする方法の共有

実際にKnoxを有効にする方法は、公式ドキュメントの方法を参照するだけで十分です。
ここでは、私が計画した思考を皆さんに提供します。以下の通りです:

  • 現在、これをdagger2モジュールとしてパッケージ化しています。
  • 構造は以下の図の通りです:
    knox_module.png
    • ExampleKnoxActivityはデモ用で、他のクラスの実装例を含みます。
    • その後、KnoxManagerをインジェクトし、KnoxModuleを初期化するだけで使用できます。

    knox_inject_01.png

    knox_inject_02.png

    • KnoxLicenseにはいくつかの定数とキー値が含まれており、後で変更可能です。将来的にキーをアップロードしない場合も調整可能です。
    • 実際の使用ではKnoxManagerを理解するだけで十分です。
    • 主にKnoxのブロードキャストの登録/解除、ライセンスの有効化/無効化などの機能を追加しました。 今後は主にKnoxManagerから関連する機能を追加します。
    • KnoxLicenseReceiverは、公式のKnox 3.7以下ではボードキャスト方式のみでアクティベーションの成否を受信します。
      ここではKotlinの特性を利用してパッケージ化しています。
      実際の使用では、knoxManager内のメソッドを使用して登録し、結果を返します。
      knox_inject_03.png

理論的にはKoinをDIとして使用することも可能で、個人的にもKoinが好きです。後ほど、KoinでのDIについての記事を書く予定です。

  • Knoxのパーミッションを追加
    • パーミッション宣言をmanifestに追加 knox_permission.png
    • Knox API 30は新旧パッケージ名の境界線です。
      今回の実験では、Knox API 19では新しいパーミッションリクエストは使用できませんでした。例えば:
      com.samsung.android.knox.permission.KNOX_APP_MGMT
      com.example.supportlibclient.SUPPORT_PERMISSIONを使用して成功しました。

    • ランタイムパーミッション knox_run_time_permission_01.png
  • その他の関連事項
    一部のAPI操作には対応するURIの解析が必要です。ここでは共通のものを取り上げます。
    knox_constant.png

You might also enjoy