مرجع ساختار keymaster2_device
#include < keymaster2.h >
توصیف همراه با جزئیات
تعریف دستگاه Keymaster2
تعریف در خط 28 فایل keymaster2.h .
مستندات میدانی
keymaster_error_t (* abort)(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle) |
عملیات رمزنگاری که با () شروع شده بود را لغو می کند، تمام منابع داخلی را آزاد می کند و operation_handle
باطل می کند.
تعریف در خط 415 فایل keymaster2.h .
keymaster_error_t (* add_rng_entropy)(const struct keymaster2_device *dev, const uint8_t *data, size_t data_length) |
آنتروپی را به RNG مورد استفاده توسط keymaster اضافه می کند. آنتروپی اضافه شده از طریق این روش تضمین میشود که تنها منبع آنتروپی مورد استفاده نیست، و تابع اختلاط باید ایمن باشد، به این معنا که اگر RNG (از هر منبعی) با هر دادهای پیوند داده شود، مهاجم نمیتواند پیشبینی کند (یا کنترل)، سپس خروجی RNG از تصادفی قابل تشخیص نیست. بنابراین، اگر آنتروپی از هر منبع خوب باشد، خروجی خوب خواهد بود.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] داده ها داده های تصادفی برای مخلوط کردن [که در] طول_داده طول data
تعریف در خط 74 فایل keymaster2.h .
keymaster_error_t (* attest_key)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_chain_t *cert_chain) |
یک زنجیره گواهی امضا شده X.509 ایجاد میکند که وجود key_to_attest
در keymaster را تأیید میکند (TODO(swillden): محتوای گواهی را با جزئیات بیشتر توضیح دهید. گواهی شامل یک پسوند با OID 1.3.6.1.4.1.11129.2.1.17 و مقدار تعریف شده در <TODO:swillden – insert link here> است که حاوی توضیحات کلید است.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] key_to_test کلید اصلی که گواهی تایید برای آن تولید می شود. [که در] attest_params پارامترهایی که نحوه انجام گواهی را تعیین می کنند. در حال حاضر تنها پارامتر KM_TAG_ALGORITHM است که باید KM_ALGORITHM_EC یا KM_ALGORITHM_RSA باشد. این انتخاب می کند که کدام یک از کلیدهای گواهی ارائه شده برای امضای گواهی استفاده شود. [خارج] cert_chain آرایه ای از گواهینامه های X.509 با کد DER. اولین مورد گواهی برای key_to_attest
خواهد بود. ورودی های باقی مانده به ریشه زنجیر می شوند. تماسگیرنده مالکیت را بر عهده میگیرد و باید با keymaster_free_cert_chain معامله کند.
تعریف در خط 239 فایل keymaster2.h .
keymaster_error_t (* start)(const struct keymaster2_device *dev, keymaster_purpose_t purpose, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation *_operhandle_dation) |
یک عملیات رمزنگاری را با استفاده از کلید مشخص شده آغاز می کند. اگر همه چیز خوب باشد، begin() KM_ERROR_OK را برمی گرداند و یک دسته عملیات ایجاد می کند که باید به فراخوان های بعدی برای update() , finish() یا abort() ارسال شود.
بسیار مهم است که هر فراخوانی برای start() با یک فراخوان بعدی به finish() یا abort() جفت شود تا به پیاده سازی keymaster اجازه دهد تا هر حالت عملیات داخلی را پاک کند. در صورت عدم انجام این کار ممکن است فضای داخلی حالت یا سایر منابع داخلی نشت پیدا کند و در نهایت ممکن است باعث شود که start() KM_ERROR_TOO_MANY_OPERATIONS را پس از اتمام فضا برای عملیات بازگرداند. هر نتیجه ای غیر از KM_ERROR_OK از begin() , update() یا finish() به طور ضمنی عملیات را لغو می کند، در این صورت abort() لازم نیست فراخوانی شود (و در صورت فراخوانی KM_ERROR_INVALID_OPERATION_HANDLE برمی گردد).
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] هدف هدف عملیات، یکی از KM_PURPOSE_ENCRYPT، KM_PURPOSE_DECRYPT، KM_PURPOSE_SIGN یا KM_PURPOSE_VERIFY است. توجه داشته باشید که برای حالتهای AEAD، رمزگذاری و رمزگشایی به ترتیب مستلزم امضا و تأیید است، اما باید بهعنوان KM_PURPOSE_ENCRYPT و KM_PURPOSE_DECRYPT مشخص شوند. [که در] کلید کلیدی که برای عملیات استفاده می شود. key
باید هدفی سازگار باpurpose
داشته باشد و تمام الزامات استفاده از آن باید برآورده شود، در غیر این صورت () begin یک کد خطای مناسب را برمی گرداند.[که در] in_params پارامترهای اضافی برای عملیات این معمولاً برای ارائه دادههای احراز هویت با KM_TAG_AUTH_TOKEN استفاده میشود. اگر KM_TAG_APPLICATION_ID یا KM_TAG_APPLICATION_DATA در طول تولید ارائه شده باشد، باید در اینجا ارائه شود، در غیر این صورت عملیات با KM_ERROR_INVALID_KEY_BLOB ناموفق خواهد بود. برای عملیاتی که نیاز به nonce یا IV دارد، روی کلیدهایی که با KM_TAG_CALLER_NONCE تولید شدهاند، in_params ممکن است حاوی برچسب KM_TAG_NONCE باشد. [خارج] out_params پارامترهای خروجی برای برگرداندن داده های اضافی از مقداردهی اولیه عملیات، به ویژه برای بازگرداندن IV یا nonce از عملیاتی که یک IV یا nonce ایجاد می کنند، استفاده می شود. تماس گیرنده مالکیت آرایه پارامترهای خروجی را می گیرد و باید آن را با keymaster_free_param_set() آزاد کند. اگر هیچ پارامتر خروجی مورد انتظار نباشد out_params ممکن است روی NULL تنظیم شود. اگر out_params NULL باشد و پارامترهای خروجی تولید شوند، () begin KM_ERROR_OUTPUT_PARAMETER_NULL را برمی گرداند. [خارج] عملیات_دسته دسته عملیات تازه ایجاد شده که باید به update() , finish() یا abort() ارسال شود. اگر operation_handle NULL باشد، begin() KM_ERROR_OUTPUT_PARAMETER_NULL را برمی گرداند.
تعریف در خط 332 فایل keymaster2.h .
struct hw_device_t مشترک |
روش های رایج دستگاه کی مستر این باید اولین عضو keymaster_device باشد زیرا کاربران این ساختار در زمینههایی که مشخص است hw_device_t به keymaster_device اشاره میکند، نشانگر hw_device_t را به keymaster_device ارسال میکنند.
تعریف در خط 35 فایل keymaster2.h .
keymaster_error_t (* configure) (const struct keymaster2_device *dev, const keymaster_key_param_set_t *params) |
کی مستر را پیکربندی می کند. این روش باید یک بار پس از باز شدن دستگاه و قبل از استفاده از آن فراخوانی شود. برای ارائه KM_TAG_OS_VERSION و KM_TAG_OS_PATCHLEVEL به keymaster استفاده میشود. تا زمانی که این متد فراخوانی نشود، همه متدهای دیگر KM_ERROR_KEYMASTER_NOT_CONFIGURED را برمی گرداند. مقادیر ارائه شده توسط این روش تنها یک بار توسط keymaster در هر بوت پذیرفته می شود. تماسهای بعدی KM_ERROR_OK را برمیگرداند، اما کاری انجام ندهید.
اگر اجرای Keymaster در سختافزار امن باشد و نسخه سیستمعامل و مقادیر سطح وصله ارائهشده با مقادیر ارائهشده به سختافزار امن توسط بوتلودر مطابقت نداشته باشد (یا اگر بوتلودر مقادیری را ارائه نکرده باشد)، این روش KM_ERROR_INVALID_ARGUMENT، و همه را برمیگرداند. روشهای دیگر KM_ERROR_KEYMASTER_NOT_CONFIGURED را باز میگردانند.
تعریف در خط 58 فایل keymaster2.h .
متن خالی* |
تعریف در خط 37 فایل keymaster2.h .
keymaster_error_t (* delete_all_keys) (ساختار keymaster2_device *dev) |
تمام کلیدهای موجود در فروشگاه کلید سخت افزار را حذف می کند. زمانی استفاده می شود که ذخیره کلید به طور کامل بازنشانی شود. پس از فراخوانی این تابع، استفاده از حباب های کلیدی که قبلاً تولید یا وارد شده اند برای هر عملیاتی غیرممکن خواهد بود.
این تابع اختیاری است و در صورت اجرا نشدن باید روی NULL تنظیم شود.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر
تعریف در خط 288 فایل keymaster2.h .
keymaster_error_t (* delete_key) (const struct keymaster2_device *dev, const keymaster_key_blob_t *key) |
کلید یا جفت کلید مرتبط با حباب کلید را حذف می کند. پس از فراخوانی این تابع، استفاده از کلید برای هر عملیات دیگری غیرممکن خواهد بود. ممکن است برای کلیدهایی از ریشه های اعتماد خارجی اعمال شود (کلیدهایی که تحت ریشه اعتماد فعلی قابل استفاده نیستند).
این تابع اختیاری است و در صورت اجرا نشدن باید روی NULL تنظیم شود.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] کلید کلیدی که باید حذف شود.
تعریف در خط 276 فایل keymaster2.h .
keymaster_error_t (* export_key)(const struct keymaster2_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t * maapp_export key_data_, |
یک کلید عمومی یا متقارن را صادر می کند و یک آرایه بایت را در قالب مشخص شده برمی گرداند.
توجه داشته باشید که صدور کلید متقارن تنها در صورتی مجاز است که کلید با KM_TAG_EXPORTABLE ایجاد شده باشد، و تنها در صورتی که تمام الزامات استفاده از کلید (مانند احراز هویت) برآورده شود.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] فرمت_export قالب مورد استفاده برای صادرات کلید. [که در] کلید_برای_صادرات کلید صادرات [که در] شناسه مشتری لکه شناسه مشتری، که باید با لکه ارائه شده در KM_TAG_APPLICATION_ID در طول تولید کلید (در صورت وجود) مطابقت داشته باشد. [که در] اطلاعات برنامه حباب داده برنامه، که باید با حباب ارائه شده در KM_TAG_APPLICATION_DATA در طول تولید کلید (در صورت وجود) مطابقت داشته باشد. [خارج] export_data مواد کلیدی صادر شده تماس گیرنده مالکیت را به عهده می گیرد.
تعریف در خط 213 فایل keymaster2.h .
keymaster_error_t (* finish)(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, const keymaster_blob_t *_signature, keymaster_paramster_t قرار دادن) |
یک عملیات رمزنگاری که با () شروع شده است را نهایی می کند و operation_handle
باطل می کند.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] عملیات_دسته دسته عملیات توسط start() برگردانده شد. این دسته باطل خواهد شد. [که در] in_params پارامترهای اضافی برای عملیات برای حالتهای AEAD، از این برای تعیین KM_TAG_ADDITIONAL_DATA استفاده میشود، اما تنها در صورتی که هیچ داده ورودی برای بهروزرسانی () ارائه نشده باشد. [که در] ورودی داده هایی که باید پردازش شوند، بر اساس پارامترهای ایجاد شده در فراخوانی () start . finish() باید تمام داده های ارائه شده را مصرف کند یا KM_ERROR_INVALID_INPUT_LENGTH را برگرداند. [که در] امضا اگر هدف مشخص شده در فراخوانی () fill KM_PURPOSE_VERIFY باشد، امضایی که باید تأیید شود. [خارج] خروجی داده های خروجی، در صورت وجود. تماس گیرنده مالکیت بافر اختصاص داده شده را به عهده می گیرد.
اگر عملیات در حال تکمیل تأیید امضا یا رمزگشایی و تأیید در حالت AEAD باشد ، () finish KM_ERROR_VERIFICATION_FAILED را برمیگرداند.
تعریف در خط 405 فایل keymaster2.h .
پرچم های uint32_t |
پرچم های تعریف شده برای keymaster0_devices:: flags را در keymaster_common.h ببینید. فقط برای سازگاری با عقب استفاده می شود. دستگاه های سخت افزاری keymaster2 باید این را روی صفر تنظیم کنند.
تعریف در خط 43 فایل keymaster2.h .
keymaster_error_t (*gene_key)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *characteristics) |
یک کلید یا جفت کلید ایجاد می کند و یک حباب کلید و/یا شرحی از کلید را برمی گرداند.
پارامترهای تولید کلید بهعنوان جفتهای برچسب/مقدار keymaster، ارائه شده در params
تعریف میشوند. برای لیست کامل به keymaster_tag_t مراجعه کنید. برخی از مقادیری که همیشه برای تولید کلیدهای مفید مورد نیاز هستند عبارتند از:
- KM_TAG_ALGORITHM؛
- KM_TAG_PURPOSE؛ و
- (KM_TAG_USER_SECURE_ID و KM_TAG_USER_AUTH_TYPE) یا KM_TAG_NO_AUTH_REQUIRED.
KM_TAG_AUTH_TIMEOUT به طور کلی باید مشخص شود مگر اینکه KM_TAG_NO_AUTH_REQUIRED وجود داشته باشد، یا کاربر باید برای هر استفاده احراز هویت کند.
KM_TAG_BLOCK_MODE، KM_TAG_PADDING، KM_TAG_MAC_LENGTH و KM_TAG_DIGEST باید برای الگوریتمهایی که به آنها نیاز دارند، مشخص شوند.
برچسب های زیر ممکن است مشخص نشده باشند. ارزش آنها توسط اجرا ارائه خواهد شد.
- KM_TAG_ORIGIN،
- KM_TAG_ROLLBACK_RESISTANT،
- KM_TAG_CREATION_DATETIME
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] پارامترها آرایه ای از پارامترهای تولید کلید [خارج] key_blob کلید تولید شده را برمی گرداند. key_blob
نباید NULL باشد. تماسگیرنده مالکیت key_blob->key_material را بر عهده میگیرد و باید آن را آزاد کند.[خارج] مشخصات اگر NULL نباشد، ویژگی های کلیدی را که تولید شده است، برمی گرداند. اگر NULL نباشد، تماسگیرنده مالکیت را بر عهده میگیرد و باید با keymaster_free_characteristics() معامله کند. توجه داشته باشید که KM_TAG_ROOT_OF_TRUST، KM_TAG_APPLICATION_ID و KM_TAG_APPLICATION_DATA هرگز برگردانده نمیشوند.
تعریف در خط 112 فایل keymaster2.h .
keymaster_error_t (* get_key_characteristics) (const struct keymaster2_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_characteristics ) |
ویژگیهای کلید مشخصشده یا KM_ERROR_INVALID_KEY_BLOB را در صورت نامعتبر بودن key_blob برمیگرداند (پیادهسازیها باید به طور کامل یکپارچگی کلید را تأیید کنند). client_id و app_data باید شناسه و دادههایی باشند که هنگام تولید یا وارد کردن کلید ارائه میشوند، یا اگر KM_TAG_APPLICATION_ID و/یا KM_TAG_APPLICATION_DATA در طول تولید ارائه نشدهاند خالی باشند. این مقادیر در ویژگی های برگشتی گنجانده نشده اند. تماسگیرنده مالکیت شیء مشخصههای اختصاصیافته را میپذیرد که باید با keymaster_free_characteristics() تخصیص داده شود.
توجه داشته باشید که KM_TAG_APPLICATION_ID و KM_TAG_APPLICATION_DATA هرگز برگردانده نمی شوند.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] key_blob کلید بازیابی ویژگی ها از. [که در] شناسه مشتری دادههای شناسه مشتری یا NULL اگر هیچکدام مرتبط نباشد. [که در] app_id دادههای برنامه یا NULL اگر هیچکدام مرتبط نباشد. [خارج] مشخصات ویژگی های کلیدی نباید خالی باشد. تماسگیرنده مالکیت محتویات را بر عهده میگیرد و باید با keymaster_free_characteristics() سروکار داشته باشد.
تعریف در خط 139 فایل keymaster2.h .
keymaster_error_t (* import_key)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blobistict, key_charactermacacter |
یک کلید یا جفت کلید را وارد می کند و یک حباب کلید و/یا شرحی از کلید را برمی گرداند.
اکثر پارامترهای وارد کردن کلید به عنوان جفت برچسب/مقدار keymaster که در «params» ارائه شدهاند، تعریف میشوند. برای لیست کامل به keymaster_tag_t مراجعه کنید. مقادیری که همیشه برای وارد کردن کلیدهای مفید مورد نیاز هستند عبارتند از:
- KM_TAG_ALGORITHM؛
- KM_TAG_PURPOSE؛ و
- (KM_TAG_USER_SECURE_ID و KM_TAG_USER_AUTH_TYPE) یا KM_TAG_NO_AUTH_REQUIRED.
KM_TAG_AUTH_TIMEOUT به طور کلی باید مشخص شود. اگر مشخص نباشد، کاربر باید برای هر استفاده احراز هویت کند.
تگ های زیر در صورت نامشخص بودن مقادیر پیش فرض را خواهند گرفت:
- KM_TAG_KEY_SIZE به طور پیش فرض به اندازه کلید ارائه شده خواهد بود.
- KM_TAG_RSA_PUBLIC_EXPONENT به طور پیشفرض به مقدار موجود در کلید ارائه شده (برای کلیدهای RSA) خواهد بود.
برچسب های زیر ممکن است مشخص نشده باشند. ارزش آنها توسط اجرا ارائه خواهد شد.
- KM_TAG_ORIGIN،
- KM_TAG_ROLLBACK_RESISTANT،
- KM_TAG_CREATION_DATETIME
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] پارامترها پارامترهای تعیین کننده کلید وارد شده [که در] params_count تعداد ورودی ها در params
[که در] فرمت_کلیدی فرمت داده های کلیدی را در key_data مشخص می کند. [خارج] key_blob برای برگرداندن حباب کلید مات استفاده می شود. باید غیر NULL باشد. تماس گیرنده مالکیت key_material موجود را به عهده می گیرد. [خارج] مشخصات برای بازگرداندن ویژگی های کلید وارد شده استفاده می شود. ممکن است NULL باشد، در این صورت هیچ مشخصه ای برگردانده نخواهد شد. اگر NULL نباشد، تماسگیرنده مالکیت محتویات را به عهده میگیرد و باید با keymaster_free_characteristics() سروکار داشته باشد. توجه داشته باشید که KM_TAG_APPLICATION_ID و KM_TAG_APPLICATION_DATA هرگز برگردانده نمی شوند.
تعریف در خط 186 فایل keymaster2.h .
keymaster_error_t (* به روز رسانی)(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, size_t *input_consumed, keymaster_out, keymaster_out , keymaster_out, keymaster_out |
داده ها را برای یک عملیات رمزنگاری در حال انجام که با start() آغاز شده است، ارائه می دهد و احتمالاً خروجی را از آن دریافت می کند.
اگر operation_handle نامعتبر باشد، update() KM_ERROR_INVALID_OPERATION_HANDLE را برمی گرداند.
update() ممکن است تمام داده های ارائه شده در بافر داده را مصرف نکند. update() مقدار مصرف شده در *data_consumed را برمی گرداند. تماس گیرنده باید داده های مصرف نشده را در تماس بعدی ارائه دهد.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] عملیات_دسته دسته عملیات توسط start() برگردانده شد. [که در] in_params پارامترهای اضافی برای عملیات برای حالتهای AEAD، از این برای تعیین KM_TAG_ADDITIONAL_DATA استفاده میشود. توجه داشته باشید که ممکن است داده های اضافی در چندین تماس برای به روز رسانی() ارائه شود، اما فقط تا زمانی که داده های ورودی ارائه شود. [که در] ورودی داده هایی که باید پردازش شوند، بر اساس پارامترهای ایجاد شده در فراخوانی () start . توجه داشته باشید که update() ممکن است تمام داده های ارائه شده را مصرف کند یا نکند. input_consumed
ببینید.[خارج] ورودی_مصرف شده مقدار داده ای که توسط update() مصرف شده است. اگر این مقدار کمتر از مقدار ارائه شده باشد، تماس گیرنده باید باقیمانده را در یک فراخوان بعدی برای update() ارائه دهد. [خارج] out_params پارامترهای خروجی برای برگرداندن داده های اضافی از عملیات استفاده می شود. تماس گیرنده مالکیت آرایه پارامترهای خروجی را می گیرد و باید آن را با keymaster_free_param_set() آزاد کند. اگر هیچ پارامتر خروجی مورد انتظار نباشد out_params ممکن است روی NULL تنظیم شود. اگر out_params NULL باشد و پارامترهای خروجی تولید شوند، () begin KM_ERROR_OUTPUT_PARAMETER_NULL را برمی گرداند. [خارج] خروجی داده های خروجی، در صورت وجود. تماس گیرنده مالکیت بافر اختصاص داده شده را به عهده می گیرد. خروجی نباید NULL باشد.
توجه داشته باشید که update() ممکن است هیچ خروجی ارائه ندهد، در این صورت output->data_length صفر خواهد بود و output->data ممکن است NULL یا صفر طول داشته باشد (بنابراین تماس گیرنده باید همیشه آن را آزاد کند).
تعریف در خط 376 فایل keymaster2.h .
keymaster_error_t (* upgrade_key) (const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key) |
یک کلید قدیمی را ارتقا می دهد. کلیدها می توانند به دو صورت "قدیمی" شوند: Keymaster را می توان به نسخه جدید ارتقا داد، یا سیستم را می توان به روز کرد تا نسخه سیستم عامل و/یا سطح وصله را باطل کند. در هر صورت، تلاش برای استفاده از یک کلید قدیمی منجر به بازگرداندن کیمستر KM_ERROR_KEY_REQUIRES_UPGRADE می شود. سپس این روش باید برای ارتقای کلید فراخوانی شود.
- مولفه های
[که در] توسعه دهنده ساختار دستگاه کی مستر [که در] key_to_upgrade کلید اصلی برای ارتقا. [که در] upgrade_params پارامترهای مورد نیاز برای تکمیل ارتقاء. به ویژه، اگر KM_TAG_APPLICATION_ID و KM_TAG_APPLICATION_DATA برای کلید تعریف شده باشند، مورد نیاز خواهند بود. [خارج] upgraded_key حباب کلید ارتقا یافته.
تعریف در خط 260 فایل keymaster2.h .
مستندات این ساختار از فایل زیر تولید شده است:
- hardware/libhardware/include/hardware/ keymaster2.h