Identity Credential(一)
関連参考リンク
注: 以下のリンクは壁越しにアクセスする必要があります
モジュールの説明: android がこのモジュールについて説明します
インターフェイス定義: Android HAL 層インターフェイス定義
参考実装: SE ベースの HAL 層実装
参考実装: SE ベースのアプレット実装
参考実装: APP アプリケーション実装
リファレンス実装 : TEE ベースの HAL 層実装 - 完成予定
リファレンス実装 : TEE ベースの TA 実装 - 完成予定
モジュールの説明
CDD リンク: Google Android 13 CDD を参照してください。
[C-SR-1] ID 認証システムを実装することが強く推奨されます。アップストリームの Android オープンソース プロジェクトは、ID 資格情報システムの実装に使用できる信頼できるアプリケーションライブラリ
のリファレンス実装を提供します。
Android 13では、Googleはデバイスメーカーにこの機能の実装を強く推奨しており、Android 14の新しいチップや新しいランチデバイスにもこの機能の実装を強制することが予想されます。Google は、ソースコード libeic でリファレンス実装を行っています。 libeic モジュールを TEE に移植し、libeic と接続するための CA を実装すれば、この機能を実現できます。
モジュールの移植と実装
注: TEE 側で libeic をサポートする必要がある場合、TEE は libc++ または libcxx サポートを提供する必要があります (現在、オープンソース TEEOS では、trusty OS は libcxx をサポートしていますが、optee はそれをサポートしていません。そのため、libeic をoptee の場合、EicOpsImpl を書き換える必要があります。cc が提供するメソッドです。商用 TEE OS では、libc++ がサポートされているかどうかを確認するために TEE の供給元を探す必要があります)
cc_library_static {
name: "android.hardware.identity-libeic-library",
vendor_available: true,
srcs: [
"libeic/EicCbor.c",
"libeic/EicSession.c",
"libeic/EicPresentation.c",
"libeic/EicProvisioning.c",
"EicOpsImpl.cc",
],
export_include_dirs: [
"libeic",
],
cflags: [
"-DEIC_COMPILATION",
"-Wall",
"-Wextra",
"-DEIC_DEBUG",
// Allow using C2x extensions such as omitting parameter names
"-Wno-c2x-extensions",
],
shared_libs: [
"libbase",
"libcrypto",
],
static_libs: [
"android.hardware.identity-support-lib",
],
}
Android.bp によってコンパイルされたファイルから、libeic を移植するには次のサポートが必要であることがわかります。
- libc++ または libcxx をサポートする必要がある場合、コンパイラーは次の構文をサポートします。 c++17 (c++14 または c++11 でソース コードの定義と実装の一部を変更する必要がある場合)。
- openssl をサポートする必要があります (libcrypto は share_libs で参照され、libcrypto は Android ソースの external/boringssl からコンパイルされます)。
- 乱数の実装など、オペレーティング システムに基づいて一部の API 呼び出しを変更する必要があります。
- ここはkeymasterクラスに依存しすぎて移植が面倒なので、identityCredentialSupport.cppを修正する必要があるので、ここのkeymasterに依存する箇所を修正し、keymaster TAを直接呼び出して実現します。
- キーマスター TA に接続して認証操作を実行する必要があります。
まずは libc++ をサポートする TEE OS を選択することが重要です。そうしないと、やるべきことが非常に多くなります。
移行作業を始めましょう。
。。。