В этой статье в основном представлены состав и функции решения безопасности Allwinner. Безопасное и комплексное решение основано на обычном расширении решения, охватывающем аппаратную безопасность, безопасную загрузку (Secure Boot), безопасную систему (Secure OS), безопасные приложения (Надежные приложения) и т. д. В этой статье рассказывается об аппаратной безопасности, безопасной загрузке (Secure Boot), системе безопасности (Secure OS), разработке приложений безопасности (руководства по разработке TA/CA), хранении ключей прошивки и зашифрованном хранении систем безопасности на флэш-памяти.
Соответствующий технический персонал программной платформы Allwinner.
Программная платформа Allwinner.
Allwinner использует аппаратные платформы с версией ядра 4.9 или выше.
Система безопасности представляет собой защитное решение, основанное на аппаратном и программном обеспечении. Его основная цель — обеспечить целостность, конфиденциальность и доступность системных ресурсов, тем самым обеспечивая надежную рабочую среду для системы.
а. Простой текст П. Подготовьте зашифрованный текст, называемый открытым текстом.
б. Шифрованный текст Y. Зашифрованный текст называется зашифрованным текстом.
в) Алгоритм шифрования и дешифрования E(D). Используется для достижения отношения преобразования открытого текста в зашифрованный текст или из зашифрованного текста в открытый текст.
д. Кей К. Ключи являются критическими параметрами в алгоритмах шифрования и дешифрования.
Рисунок 2-1: Процесс зашифрованного взаимодействия
а. Симметричный алгоритм шифрования: для шифрования и дешифрования используется один и тот же ключ. Например, алгоритм AES.
б. Алгоритм асимметричного шифрования: при шифровании и дешифровании используются разные ключи. Один ключ является «открытым», то есть открытым, а другой ключ является секретным. Один используется для шифрования, а другой — для дешифрования. Например, алгоритм RSA.
c. Алгоритм хеширования: алгоритм дайджеста, который вычисляет фрагмент данных любой длины для получения выходных данных фиксированной длины, но исходные рассчитанные данные не могут быть получены с помощью этих выходных данных.
Рисунок 2-2: Симметричное и асимметричное шифрование
Рисунок 2-3: Сводный расчет
Цифровая подпись: Цифровая подпись — это применение технологии шифрования с асимметричным ключом и технологии цифрового дайджеста. Цифровые подписи гарантируют, что информация подписана и отправлена самим подписавшим, и подписавшее лицо не может отрицать или ему трудно это отрицать, оно гарантирует, что информация не была каким-либо образом изменена с момента ее выдачи до момента ее предоставления; получено и что подписанный документ является подлинным документом.
Рисунок 2-4: Цифровая подпись
Рисунок 2-5: Проверка подписи
Цифровой сертификат: это файл, содержащий информацию о владельце открытого ключа и открытый ключ, подписанный цифровой подписью центра сертификации. Это авторитетный электронный документ.
Рисунок 2-6: Структура сертификата
efuse: технология одноразового программируемого предохранителя. Некоторые SoC интегрируют электрически программируемый предохранитель efuse в качестве памяти OTP (одноразово программируемая, одноразовая программируемая). Внутренние данные efuse могут изменяться только с 0 на 1, а не с 1 на 0, и могут быть записаны только один раз.
TrustZone — это решение безопасности, предложенное ARM, целью которого является предоставление независимой безопасной операционной системы и технологии виртуализации оборудования, а также предоставление доверенной среды выполнения (Trust Execution Environment). Модель системы TrustZone представлена на рисунке ниже.
Рисунок 2-7: Модель системы TurstZone
Многие компании запустили свои собственные безопасные операционные системы на основе TrustZone, каждая со своими методами реализации, но в основном следуют стандарту GP (GlobalPlatform). GlobalPlatform — это межотраслевая международная организация по стандартизации, занимающаяся разработкой, формулированием и публикацией технических стандартов для микросхем безопасности для содействия управлению многопрофильными промышленными средами и их безопасному и совместимому бизнес-развертыванию. OPTEE — это решение TEE, основанное на технологии ARM TrustZone, разработанное Linaro и несколькими другими компаниями и соответствующее стандарту GP.
• SMC:Secure Monitor Call,ARM дано указание, могу позволить CPU от Linux (небезопасно) переходите непосредственно к Мониторинг выполнения (безопасного) режима.
• RPC:Remote Procedure Control Protocol。OPTEE середина, для работы Linux Механизм освобождения ресурсов. Например, ОПТИЭ Невозможно читать или записывать файлы в Просто пройди RPC вызов Linux для завершения файловой системы.
• REE:Rich Execution Среда. Как следует из названия, Это богатая ресурсами среда выполнения, Такие как общие Linux,Android система и т. д.
• TEE:Trusted Execution Environment。Доверенная среда выполнения, То есть безопасная среда выполнения, В пределах этой области, весь код, Ресурсы заслуживают доверия пользователей.
• TA:Trusted Apps, существовать TEE заявки, выполняемые под Выполняйте задачи, которые пользователи должны защитить, Например, защита паролем.
• CA:Client Apps, существовать REE заявки, выполняемые под полный обычный, Задачи, не требующие защиты, Например, посмотреть обычные видеоролики.
• UUID:Universally Unique Identifier, Универсальный уникальный идентификатор. с текущей даты и времени, последовательность часов, Идентификационный номер машины (например. МАК).
Технология TrustZone требует использования отдельных периферийных ресурсов для обеспечения безопасности и небезопасности. На платформе allwinner изоляция безопасных и незащищенных ресурсов контролируется с помощью назначенных периферийных устройств, а именно следующих трех:
• spc(Secure Peripherals Control)
Укажите атрибуты безопасности периферийного устройства, После того как периферийное устройство настроено как безопасное, Должен Только периферийные устройствасуществовать Безопасностьмировой талантнормальныйдоступ, Писать в небезопасном мире недопустимо, читать как 0。
• sid(Secure ID)
Контролируйте доступ к efuse. Доступ к efuse возможен только через модуль sid. Сам sid не является безопасным, и к нему могут получить доступ как защищенные, так и незащищенные пользователи. Однако при доступе к efuse через sid доступ к безопасному efuse возможен только в безопасном мире, а результат области доступа в незащищенном мире фиксируется равным 0.
• smc(Secure Memory Control)
Управляет доступом к адресному пространству памяти. После того, как память в определенном адресном пространстве станет безопасной, Доступ к памяти в этом пространстве возможен только из безопасного мира. Писать в небезопасном мире недопустимо, читать как 0。
secure boot Процесс запуска середина,чипсуществоватьзапускатьчас, Сначала система будет проверена на безопасность. Загружайте систему только после прохождения теста. Если проверка не удалась, система считается модифицированной. Отказывается загружать систему и переходит в режим записи.
Проверка безопасности в основном выполняется по двум проектам:
Прошивка будет содержать сертификат, В сертификате записан хеш прошивки. После того, как сертификат проверки чипа действителен, Будет использоваться хэш прошивки, записанный с помощью сертификата. По сравнению с фактическим рассчитанным значением хеш-функции прошивки, Если они совпадают, считается, что прошивка проверена. OK。твердыйкуски Зависит от多个ребеноктвердыйкуски Группастановиться,brom->sboot->atf(64 битовая платформа, 32 битовая платформа пропускается)->OPTEE->uboot->boot.img из Процесс запуска середина, Каждая субпрошивка имеет соответствующий сертификат, используемый для проверки хэша субмикропрограммы. Обеспечьте безопасный запуск всего решения.
Конкретный процесс проверки каждой субпрошивки в прошивке следующий:
Рисунок 4-1: Процесс проверки прошивки
Прошивка будет содержать номер версии для проверки против отката, и чип сравнит номер версии, хранящийся внутри, с номером версии прошивки. Когда номер версии встроенного ПО больше или равен номеру версии, записанному чипом, тест против отката встроенного ПО считается пройденным.
Чип будет обновлять внутренний номер версии по мере необходимости. Обязательно сохраните все пропуска проекта. Безопасностьтвердыйкускисередина, Максимальное значение номера версии.
Ниже описано, как настроить два элемента проверки, создать безопасную прошивку и включить безопасную загрузку.
Сертификатизрожденныйстановитьсяи Упаковка интегрирована в Безопасностьтвердыйкускииз Процесс упаковкисередина, Никакой дополнительной настройки не требуется, Вам нужно только настроить пару ключей, используемую при подписании сертификата. Существует два метода настройки, Первый — использовать предоставленный инструмент генерации пары ключей для создания ключа, второй — использовать ранее сгенерированный ключ; Конкретные инструкции для двух методов следующие:
а. Сгенерировать ключ
Запустите инструмент build/createkeys и выберите соответствующую платформу, чтобы автоматически сгенерировать пару ключей.
Сгенерированные ключи расположены в каталоге out/$(platform)/common/keys.
в rotpk.bin для Сжечь,чтобычипсередина, Открытый ключ,используемый для проверки корневого сертификата. Ротпк.bin нуждатьсясуществоватьгореть Записано Безопасностьтвердыйкускииз Навыки использования оборудования Сжечь,чтобычипсередина, Способ использования описан ниже, Посмотреть подробности rotpk Сожгите и напишите. Остальные — это закрытые ключи, используемые для подписи пакета прошивки при упаковке прошивки. Прошивка состоит из нескольких частей, Каждая часть использует отдельную пару ключей для аутентификации подписи.
! предупреждать
Эти ключи связаны друг с другом** и должны использоваться вместе. Пожалуйста, храните сгенерированные ключи в надежном наборе.
б. Используйте существующий ключ.
Если ключ был сгенерирован ранее, просто поместите файл ключа в каталог longan/out/$(platform)/common/keys.
! предупреждать
ключиздокументчислоколичествоиимя Позвони в столицудакорень соответствии сплатформатвердыйкуски Пакетиз Процесс был адаптированиз。A Ключи, сгенерированные платформой, недоступны для B Упаковка прошивки безопасности платформы. В противном случае процесс упаковки может завершиться неудачей, поскольку указанный ключ не может быть найден.
чипсуществовать引导твердыйкускиизкогда, Номер версии прошивки сравнивается с номером версии, хранящимся в памяти чипа.
Версия с защитой от откатакнига Числосуществовать Настройте в longan/devices/configs/chips/${chip}/configs/default/version_base.mk, В файле можно настроить два основных свойства:
# define the verions of the image
# format: main
# such as 1, 2
# NOTICE: the range of main version is from 0 to 31,
# ROOT_ROLLBACK_USE ---0:not used,1:used
# when you change the version, you must increase main version, and never reduce the
versions.
# the default version is 0
ROOT_ROLLBACK_USED = 1
MAIN_VERSION = 1
ROOT_ROLLBACK_USED
Необходимо ли заполнять номер версии отката, используемый BROM, он зависит от платформы и настроен. Просто используйте значение по умолчанию.
• MAIN_VERSION
Номер версии прошивки для защиты от отката. Доступный диапазон: 0–31. Если настроены другие значения, чип сразу посчитает проверку номера версии прошивки неудавшейся.
существовать longan Запустите ./build.sh в каталоге. pack_secure Безопасная прошивка может быть упакована.
рожденныйстановитьсяизтвердыйкускисуществовать longan/out/ в каталоге, использовать phoneSuit Инструмент для выжигания.
Ротпк прожигается с помощью ПК-инструмента DragonSN. Инструмент DragonSN связывается с устройством через USB и управляет устройством для записи указанной информации rotpk. Если она не настроена явно, она будет обработана как burn_key=0. Конкретные этапы сжигания следующие:
После установки значения атрибута burn_key равным 1, устройство будет получать информацию, передаваемую DragonSN через USB, и выполнять соответствующую работу по записи. Существует три способа изменить это свойство.
• Метод 1: Этот метод используется для uboot Совместное использование дерева устройств с ядром, v853 направление направления не поддерживается,существоватьдокументdevices /config/chips/
{board}/sys_config.fexсередина,[target] элемент, Как показано ниже. Если не настроено явно набор, в соответствии с burn_key=0 иметь дело с.
Рисунок 4-2: Настройка метода записи ключевых атрибутов 1
• Метод 2: Этот метод используется для uboot В случае независимого дерева устройств существует документlongan/device/config/chips/v853/. в конфигах/perf1/uboot-board.dts &target элемент, Как показано ниже.
Рисунок 4-3: Способ 2 настройки записи ключевых атрибутов
• направление Формула 3:этотнаправление Режимизвысший приоритет,существоватьдокументlongan/device/config/chips/v853/configs/default/env.cfg в burn_key элемент, Как показано ниже.
Рисунок 4-4: Настройка третьего метода записи атрибутов ключа
• rotpk Процесс обработки на маленьком компьютере во время записи.
Чтобы гарантировать, что неправильный случайно не сгорит rotpk, Небольшой компьютер выполнит дополнительную обработку при записи. Конкретный процесс выглядит следующим образом: ПК rotpk и uboot, выдаваемые инструментом Подтвердит существование и текущий твердый кускииз rotpk Запрос только после сопоставления Monitor Сожгите ротпк. для 64 Для платформы, Монитор для ATF, для 32 битовая платформа, монитор для OPTEE。
Рисунок 4-5: Небольшая машинная обработка во время записи rotpk
Allwinner Внедрение программной платформы OPTEE делатьдля secure os реализация это строго следует ARM Trust-Zone и TEE/GP и другие отраслевые стандарты. проходить OPTEE Приходитьиспользовать TrustZone технология. присоединиться OPTEE назад, Общая структура системы выполнения показана на рисунке ниже: Вот как присоединиться OPTEE назад, Новые ключевые компоненты в системе.
Рисунок 5-1: Общая архитектура OPTEE
длябегатьсуществовать TEE относящийся к окружающей среде о.с. Основная ответственность за:
REE запрос среды TEE относящийся к окружающей Программа среды обеспечивает сервисное обслуживание,нужно пройти TrustZone назначенный smc Форма запроса на изготовление. ОПТИЕ linux driver Инкапсулирует эти запросы. РЗЭ верно TEE относящийся к окружающей средепросить不直接操делатьжесткийкуски, проходитьверноOPTEE linux driver из IO ctrl Доставка интерфейса.
Клиент OPTEE преследует две цели:
a. о REE верно TEE изпросить,GP Предусмотрены стандартные интерфейсы,сказатьдля TEE client API。OPTEE client Реализуйте эти интерфейсы, REE Приложению Environment Viziz требуются только булавки верно TEE client API интерфейс может быть запрограммирован на завершение TEEизпросить。
b. OPTEE OS существоватьбегатьчаснуждатьсясуществоватьпросить REE Окружающая среда помогает выполнять файловые операции. ОПТИЕ client Получите эти просить и сделайте иметь дело с. TA(trusted apps, существовать TEE Приложение "Среда проектиз") изнагрузка. ТА хранилищесуществовать REEотносящийся к окружающей СИСТЕМА СЭД-документов, бегать TA Когда, ОПТЭЭ OS просить REE читать TA изчислов соответствии спродолжить позженагрузка (Уже нужно верноREE Вниз TA фальсификация из превентивных мер).
TA:Trusted apps, бегатьсуществовать TEE относящийся к окружающей применение окружающей среды, Конфиденциальная информация обрабатывается напрямую TA руководить.
CA:Client apps, Также называется для NA(Normal apps)。существовать REE Приложение «Окружающая среда Внизпроектировать», Это традиционное изприложение.
TrustZone Реализована технология изиспользовать базу книг данной формы: REE Приложение Внизиз просить TEE Приложение Внизиз выполняет определенные операции с конфиденциальной информацией:
Например, при проверке пароля пользователя REE Запросить у пользователя ввод пароля, TEE Затем, если пользователь вводит пароль и изменяет пароль, последовательный ответ отсутствует.
чем веренпроходить/не проводить. Таким образом, существование REE остается полностью нетронутым при настройке пароля в условиях искусственного интеллекта. Вниз достигается правильный ввод пароля при проверке. Гарантированно сохраненный пароль из Безопасность.
Эти функции требуют TA/CA Скоординированная реализация,Калифорния делатьдля client инициироватьпросить,TA иметь дело с.
для了 TA/CA Умеют нормально работать вместе, Удовлетворение потребностей продукта. нужна гарантия TA/CA бегатьчас,TEE Окружение подготовлено. Бетондля OPTEE OS、OPTEE linux driver、OPTEE client уже经Конфигурация妥当инормальныйбегать。Внизлапша逐个Группакускииллюстрироватькак Конфигурация
Безопасностьтвердыйкускисуществоватькомпилировать Пришло время включено OPTEE OS, и Безопасностьтвердыйкускисуществоватьруководить secure boot изпроцесссередина будет направлять OPTEE ОС. Никакой дополнительной настройки не требуется.
а. Конфигурация компиляции ядра.
Добавляется при компиляции ядра linuxdriver, Конфигурациянаправление Режимнравиться Вниз:
Рисунок 5-2: Введите конфигурацию драйвера
Рисунок 5-3: Включите драйвер TEE для Linux.
и введите TEE drivers —–> Проверять:
картина 5-4: давать возможность TEE driver середина OP-TEE из driver
a. Присоединиться верно следует из динамической библиотеки и tee-supplicant приложение.
Волялиствдокументскопировать в longan/out/${platform}/linux/common/rootfs_def/верноотвечатьдокументпапка Вниз:
имя файла | скопировать в |
---|---|
tee-supplicant | bin/ |
libteec.so libteec.so.1 libteec.so.1.0 | lib/ |
предупреждать
После копирования**,** существовать longan глаззаписывать Внизбегать**./build.sh** Только тогда Воля сможет соответствовать динамической библиотеке и supplicant Приложение упаковывается в корневую систему документов середина.
b. бегать tee-supplicant приложение.
существовать linux Окружающая среда Вниз,Вырезать до tee-supplicant Местосуществоватьглаззаписывать (/bin), осуществлять:
./tee-supplicant &
! предупреждать
tee-supplicant run будет слушать в бесконечном цикле TEE изпросить**,** Не вернусь. пожалуйста, не пропустите это ``&‘’。
Измените процесс инициализации Linux, чтобы он автоматически запускался при загрузке.
a. TEE относящийся к окружающей среде Памятьиспользовать。
TEE EnvironmentuseizMemory имеет 3 часть,каждыйчастьразмерсуществовать optee os Указывается во время компиляции,3.7 версиякнигаиз optee Поддержка через uboot из fdt Исправлять memory планировка, укажите share memory и ta memory из размера. Закрыто по умолчанию, требуется после открытия uboot Поддержка (uboot Внизволосы fdt из Адрес optee читать fdt)。каждыйчастьэффектнравиться Вниз:
i. Общая память: для REEиTEEизчислов соответствии с Exchange,TrustZone Technology серединаREEиTEEизInteractive проводитsmcруководить,smc использует только Register Exchange Limited из числа соответствии с,Больше изчислов соответствии спроходить общую память для подкачки.
ii. Optee Память ОС: выделенная память optee_os. optee_osнагрузка сюда, проектируете.
iii. Куча памяти TA: нагрузкаTA, размещение кучи TA, стек из пространства памяти. Зависит отoptee_os выделен. Память, выделенная для определенного ТАиз, может быть выделена только для Зависит отTAилиoptee_osдоступ, другие ТА не могут получить доступ.
“‘ diff –git a/core/arch/arm/plat-sun50iw12p1/conf.mk b/core/arch/arm/plat-sun50iw12p1/conf.mk
index 2ea4602…46192f5 100644 — a/core/arch/arm/plat-sun50iw12p1/conf.mk +++
b/core/arch/arm/plat-sun50iw12p1/conf.mk @@ -35,3 +35,5 @@ CFG_NUM_THREADS
= 2 CFG_SUNXI_KL_SUPPORT = y CFG_SUNXI_MIPS_SETUP = y +CFG_SUNXI_FDT
= y +CFG_EXTERN_DEFINED_MM_LAYOUT = y diff –git a/core/arch/arm/plat
sun50iw12p1/main.c b/core/arch/arm/plat-sun50iw12p1/main.c index c182a6b…1683318
100644 — a/core/arch/arm/plat-sun50iw12p1/main.c +++ b/core/arch/arm/plat
sun50iw12p1/main.c @@ -83,7 +83,6 @@ sunxi_hash_install(); /sboot did not use
all sram, clean part of it should be enough/ memset((void *)sunxi_sram_base, 0,
SRAM_SIZE); - sunxi_smc_config(TA_RAM_START, TA_RAM_SIZE); }
void console_init(void) diff –git a/core/arch/arm/plat-sun50iw12p1/platform_config.h
b/core/arch/arm/plat-sun50iw12p1/platform_config.h index c58e8b5…80e5358
100644 — a/core/arch/arm/plat-sun50iw12p1/platform_config.h +++ b/core/arch/arm/plat
sun50iw12p1/platform_config.h @@ -71,9 +71,6 @@
#define CFG_TEE_CORE_NB_CORE 2
-/* Full GlobalPlatform test suite requires TEE_SHMEM_SIZE to be at least
2MB / -#define TEE_SHMEM_SIZE 0x400000 -#define TEE_SHMEM_START
*(TZDRAM_BASE - TEE_SHMEM_SIZE) /1M for ATF/
#define HEAP_SIZE (128 * 1024)
@@ -94,10 +91,6 @@ /* TA: 1M */ #define TEE_RAM_PH_SIZE TEE_RAM_VA_SIZE
#define TEE_RAM_START TZDRAM_BASE -#define TA_RAM_START ROUNDUP((TZDRAM_BASE
+ TEE_RAM_VA_SIZE),
- CORE_MMU_PGDIR_SIZE)
-#define TA_RAM_SIZE ROUNDDOWN((TZDRAM_SIZE - TEE_RAM_VA_SIZE),
- CORE_MMU_PGDIR_SIZE)
/devices area:0x100 0000 ~ 0xA00 0000/ #define DEVICE0_PA_BASE 0x02000000
“‘
“‘ 1) проходить uboot из fdt обозначение。существоватьверноотвечатьиз defconfig Откройте соответствующий макрос, включите uboot существоватьбегать Во время встречи Воляоборудование
Размер выделенной памяти в дереве должен быть передан в optee, а параметры должны быть переданы ядру для резервирования соответствующей памяти.
“‘
diff –git a/configs/sun50iw12p1_defconfig b/configs/sun50iw12p1_defconfig index
670a2ef…d1d6fc4 100644 — a/configs/sun50iw12p1_defconfig +++ b/configs/-
sun50iw12p1_defconfig @@ -96,5 +96,6 @@ CONFIG_SUNXI_IMAGE_VERIFIER=y
CONFIG_SUNXI_KEYBOX=y CONFIG_SUNXI_DRM_SUPPORT=y +CONFIG_SUNXI_EXTERN_SECURE_MM_LAYOUT=y
CONFIG_SUNXI_MIPS=y
“‘
fdt в Конфигурацияэлемент。
“‘
{ firmware { optee { shm_base = <0x48400000>; shm_size = <0x00200000>;
ta_ram_base = <0x48700000>; ta_ram_size = <0x00500000>; }; } }
“‘
:::note
b. Ядро для TEE Резервная память.
Ядро с общей памятью TEE все имеют права доступа, этотчастьсодержаниесейчассуществовать Зависит от TEE Управлять. Если ядро также выделяет эту память, это приведет к неправильному использованию памяти REE. и TEE Исключение взаимодействия. другой os Управлять и контролировать память REE Нет прав доступа,REE После того, как существование применяется к этим воспоминаниям, любая операция может быть прочитана только благодаря 0 ибегатьаномальный。поэтому, Ядро необходимо настроить так, чтобы оно могло резервировать TEE среда используетиз физического адресного пространства, Избегайте конфликтов памяти. Конкретный метод Конфигурациянаправление такой же, как Вниз: Исправлятьдокумент arch/arm64/boot/dts/sunxi/${platform}.dtsi, Присоединяйтесь как Внизсодержание. SDK средний выход Конфигурация завершена, Нет необходимости в Исправлять. существует новая версия книги, когда середина зарезервировала память из узла дерева устройств, имя вызвало некоторые изменения, Зависит от оригинала bl31 Изменить для optee_reserve, размер этого узла обычно для SHARED MEM+TEE MEM+TA МЕМ, если uboot из Обновлено дерево устройств SHARED MEM и TA MEM, ядру нужно только зарезервировать TEE MEM из Памяти, ОБЩИЙ MEM и TA MEM из Памятьсуществовать uboot запустить процесс середина Воля Эта информация Исправлять записывается в ядро из дерева устройств.
linux-5.4:
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
bl31 {
reg = <0x0 0x48000000 0x0 0x01000000>;
};
};
Другие версии Linux:
/memreserve/ 0x48000000 0x01000000;
:::note часть linux-4.9 Платформа такжеиспользоватьтакой же linux-5.4 То же, что и изнаправление, например v853 на платформе. :::
TEE Запланировать После завершения подготовки среды вы можете подать TA/CA использовать基В TrustZone Техническая функция. ТА/КА 开волосы Посмотреть подробности TA/CA Рекомендации по разработке.
Среда разработки находится по адресу longan/tee_kit, глаззаписывать结构нравиться Вниз:
Файл (папка) | иллюстрировать |
---|---|
build.sh | скомпилировать сценарий |
dev_kit | Зависимости компиляции (зависят от платформы) |
demo | demo |
platform_config.mk | Информация о платформе |
tools | Цепочка инструментов компиляции |
a. бегать./build.sh -t, Разархивировать Цепочка инструментов компиляции。
b. бегать./build.sh скомпилировать все DEMO。
Заказ Функция
-h Отображение справочного сообщения.
-t Распаковать tools Каталог в Цепочка инструментов компиляции。
clean очистить все demo компилироватьвыход。
config Выберите платформу компилирования.
копировать Вниз списка документов на устройство:
• TA/CA бегать Должен изобщественныйдокумент。
документ | скопировать в |
---|---|
./dev_kit/arm-plat-${platform}/export-ca/bin/tee-supplicant | Не ограничивается местоположением |
./dev_kit/arm-plat-${platform}/export-ca/exportlib/libteec.so | /lib |
./dev_kit/arm-plat-${platform}/export-ca/exportlib/libteec.so.1 | /lib |
./dev_kit/arm-plat-${platform}/export-ca/exportlib/libteec.so.1.0 | /lib |
• Действительный TA/CA программа.
demo верноотвечатьизвыходдокумент (Посмотреть подробностикаждый demo изиллюстрировать)。
${Supp_dir}/tee-supplicant &
Supp_dir для размещения тройника-соискателя из каталога.
tee-supplicant Что касается демона запуска, не вернется, 必须带"&"бегать。
книга demo выставка CA Как вызвать TA,кикакпроходитьобщийсодержание К TA Перенести данные.
a. копироватьиздокумент
документ | скопировать в |
---|---|
./demo/optee_helloworld/na/hello_world_na | Не ограничивается местоположением |
./demo/optee_helloworld/ta/12345678-4321-8765-9b74f3fc357c7c61.ta | /lib/optee_armtz |
b. бегать
Заказ | выход |
---|---|
hello_world_naNA:init context | NA:open session |
TA:creatyentry! | |
TA:open session! | |
NA:allocate memory | |
NA:invoke command | |
TA:rec cmd 0x210 | |
TA:hello world! | |
NA:finish with 0 | |
hello_world_na | NA:init context |
1234 | NA:open session |
Примечание:{1234} | TA:creatyentry! |
Вы можете использовать любое слово | TA:open session! |
нить | NA:allocate memory |
NA:invoke command: hello 1234 | |
TA:rec cmd 0x210 |
b. бегать
жизнь
делать
искусство
куски
имя
к
test
для
пример выход
demo
-c
test
создаватьдокументстановиться Гонг не особенныйвыход
demo
-w
test
Писать
из
число
в соответствии с
Зависит от
demo
Следовать
машина
рожденный
становиться
—- Write file:test with 256 Bytes data: —-
99 9c 9b 66 88 2c c8 c9 19 55 72 10 f7 c3 70 7f
1a 51 56 74 35 03 e4 6f 1b 40 4d 64 29 b5 ba c2
52 56 a8 db 03 f1 25 1c 47 97 ac bf da 1d 3f f4
ed 15 69 a3 18 cd 92 33 0f df 98 b7 15 d2 fa 67
a8 23 c2 ab 15 68 48 dc 00 f4 9c db 91 5b d0 80
70 ba a3 88 08 36 3b 96 16 53 ce aa 26 c9 12 4f
ec 55 fa 82 bd c2 5f 3d b7 7b 98 4a 56 e9 4a c6
a4 ed ce 2c 24 89 c3 b9 dd 92 64 83 db f5 d2 48
ca 4e ca 08 11 a9 46 49 a4 de 93 fa c8 5d c1 ec
4b 10 1a ee 9a 5d 28 f7 6f 8c fa 4b 02 ce 13 cd
9c de d5 ad 08 9b 76 ad 7b 0a a8 c3 e6 ea 31 b1
7a 4b a0 94 28 c8 8c 97 d4 08 62 d7 56 75 25 f2
d3 7a 20 5c 17 97 0a 12 21 32 55 09 1d 86 ba 18
51 db ac 79 a4 b9 90 f9 c1 72 51 18 68 76 8a 3c
70 aa 98 07 c1 22 19 63 55 ee 6c f1 75 a6 89 c7
02 37 c0 27 f0 d1 21 32 c3 72 c9 2c 68 54 e8 d8
—- Write file:test end! —-
жизнь
делать
искусство
куски
имя
к
test
для
пример выход
demo
-r
test
—- Read file:test 256 Bytes data: —-
99 9c 9b 66 88 2c c8 c9 19 55 72 10 f7 c3 70 7f
1a 51 56 74 35 03 e4 6f 1b 40 4d 64 29 b5 ba c2
52 56 a8 db 03 f1 25 1c 47 97 ac bf da 1d 3f f4
ed 15 69 a3 18 cd 92 33 0f df 98 b7 15 d2 fa 67
a8 23 c2 ab 15 68 48 dc 00 f4 9c db 91 5b d0 80
70 ba a3 88 08 36 3b 96 16 53 ce aa 26 c9 12 4f
ec 55 fa 82 bd c2 5f 3d b7 7b 98 4a 56 e9 4a c6
a4 ed ce 2c 24 89 c3 b9 dd 92 64 83 db f5 d2 48
ca 4e ca 08 11 a9 46 49 a4 de 93 fa c8 5d c1 ec
4b 10 1a ee 9a 5d 28 f7 6f 8c fa 4b 02 ce 13 cd
9c de d5 ad 08 9b 76 ad 7b 0a a8 c3 e6 ea 31 b1
7a 4b a0 94 28 c8 8c 97 d4 08 62 d7 56 75 25 f2
d3 7a 20 5c 17 97 0a 12 21 32 55 09 1d 86 ba 18
51 db ac 79 a4 b9 90 f9 c1 72 51 18 68 76 8a 3c
70 aa 98 07 c1 22 19 63 55 ee 6c f1 75 a6 89 c7
02 37 c0 27 f0 d1 21 32 c3 72 c9 2c 68 54 e8 d8
—- Read file:test end! —-
demo
-d
test
Delete file:test !
demo
-h
Показать справочную информацию
книга demo выставканестидляиз base64 мягкий实сейчаскакиспользовать。
a. копироватьиздокумент
документ | скопировать в |
---|---|
./demo/base64-usage/na/base64_demo | Не ограничивается местоположением |
./demo/base64-usage/ta/b0e8fef8-b857-4dd4-bfa6088373069255.ta | /lib/optee_armtz |
b. бегать
Заказ | выход |
---|---|
base64_demo | input bytes: |
-e 123456 | 0x12 0x34 0x56 |
-e необходимо отредактировать после для | NA:open session |
код из байтовой строки, два | TA:creatyentry! |
символы верно должны быть одни | TA:open session! |
байты | NA:allocate memory |
TA:rec cmd 0x221 | |
input size:3 | |
encode result: | |
base64_demo | NA:open session |
-d EjRW | TA:creatyentry! |
-d необходимо решить после для | TA:open session! |
кодиз Характернить | NA:allocate memory |
TA:rec cmd 0x222 | |
input size:4 | |
decode result: | |
0x12 0x34 0x56 | |
NA:finish with 0 |
• предоставлено TA из base64 Реализуйте внешний интерфейс
интерфейс | иллюстрировать |
---|---|
size_t EVP_EncodeBlock(uint8_t *dst, const* uint8_t* src,size_t src_len); | верно src Начни расти src_len из u8 группа чисел для кодирования,выходприезжать dst, выходиз Характернитьиспользовать’\0’ Конец. получить значение длины закодированного символа, Не содержит окончания из’\0’ |
int EVP_EncodedLength(size_t out_len, size_t len); | вычислить len Длина из ввода существует извыход длины после кодирования/декодирования,Писатьприезжать out_len середина。вычислитьстановитьсядостижениевозвращаться 1, вычислить Возврат в случае неудачи 0 |
int EVP_DecodedLength(size_t out_len, size_t len); | |
int EVP_DecodeBase64(uint8_t out, size_t out_len,size_t max_out, const uint8_t *in,size_t in_len); | верно in Начни расти in_len из входа для декодирования,выходприезжать out, После декодирования длина заполняется out_len, max_out для out верноотвечатьиз buffer изразмер。становитьсядостижениевозвращаться 1, Возврат в случае неудачи 0。 |
Внизлапшапредставлять开волосы新из TA/CA Как настроить зависимости, Пространство ограничено, Вот лишь некоторые ключевые моменты, Подробную информацию см. demo из源код。
a. существовать TA Исходный код создания корневого каталога Makefile, Содержит к Внизсодержание.
содержание | иллюстрировать |
---|---|
BINARY=$(UUID) | финальныйрожденныйстановитьсяиз.ta документизимя файла,TEE нагрузка TA Пришло время UUID дляимя файлачитатьдокумент, Должен и TA из UUID последовательный |
include${DIR}/ta_dev_kit.mk | TA Бинарный код, компилируемый в двоичном виде, имеет специальную обработку, использовать dev_ki/arm-plat-${chip}/export-ta_arm32/mk/ta_dev_kit.mk компилировать |
b. существовать Исходный код создания корневого каталога sub.mk, Предоставьте информацию о компиляции:
Заказ | эффект |
---|---|
srcs-y += filename | имя файла добавлено в компиляцию |
subdirs-y += dirname | include dirname Внизиз sub.mk |
global-incdirs-y += dirname | компилировать TA Каталог поиска документов часов |
cflags-/-y += c | документкомпилировать flagfilename длярожденныйэффектиздокумент,cflags-y действительноall c документ действителен |
aflags-/-y += s | документкомпилировать flag |
cppflags-/-y += c | и s документкомпилировать flag |
TA_PRIVATE_FLAGS += | соединятьрожденныйстановиться TA из elf часиспользоватьиз flag |
a. Содержит описание TEE client API изголовадокумент。
b. вызов TEE client API и TA взаимодействие, Посмотреть подробности demo。
в. Добавьте dev_kit/arm-plat-${platform}/export-ca/include в каталог включения.
d. Добавьте dev_kit/arm-plat-${platform}/export-ca/exportlib в каталог поиска библиотеки.
e. использовать реализация подключения опции "-lteec" TEE client API из динамической библиотеки libteec.so。
a. открыть/закрыть TA шифрованиедляподдерживать TA шифрованиеизплатформа, существоватьиспользовать./build.sh config Вам будет предложено это сделать после выбора платформы середина Должен. encrypt TA(y/n): ,y、n верноотвечатьданетверно TA Шифрование, безопасность os нагрузка TA автоматически определит, когда TA Требуется ли расшифровка.
b. Настройка ключей шифрования TA шифрованиеиспользоватьпроходить aes руководить,ключдлинадля 128bit(16 байт),магазинсуществовать dev_kit/arm-plat-${platform}/export-ta_arm32/keys/ta_aes_key.bin документсередина。нравиться果нуждаться Исправлять TA шифрованиеиспользоватьизключ,пожалуйста Исправлятьэтот bin документ。
чиписпользовать efuse в ssk key верно TA Расшифровать. Пожалуйста, убедитесь в этом aes key чипиз efuse в ssk keyпоследовательный。
Какой бы даиспользоватьключ ни выполнял расшифровку шифрования, Также даиспользовать хэш-проверку твердых куски. Все, что связано с верным ключом, верным хешем сохранено. Эта информация к key из形Режим Сжечь, чтобыоборудованиесередина。горетьзаписыватьпроцесспроходить dragonSN инструментруководить.key Есть несколько способов сохранить изнаправление, Каждый тип консервации имеет свои особенности. Внизлапшакорень соответствии с key Хранение типа изнаправление осуществляется правительством.
держатьсуществоватьчип内из efuse начальство,Не стираемый。проходить sid доступ к модулю. изливать всодержаниеточкастановитьсядвачасть, Безопасностьи Нет Безопасность。доступ efuse прочитать ПРОСМОТР РЕЗУЛЬТАТОВ Статус чип зависит, В частности, Вниз:
Статус чипа | Доступ не защищен | efuse |
---|---|---|
Безопасность | нормальный | нормальный |
Нет Безопасность | нормальный | Возврат 0 |
• Записать конфигурацию
картина 7-1: DragonSN горетьзаписывать Безопасность efuse Конфигурация
• efuse map
efuse Пространство существования разделено при проектировании чипа, Могут быть записаны только конкретные имена ключ. каждый key наличие каждого чипа efuse Из Пожалуйста, обратитесь к чипу для определения места хранения efuse map。
Сохраните чип снаружи flash начальство, корень соответствии сохранитьиз flash областьиздоступнаправление Режим, точкадля Безопасность key ичастный key двадобрый。
держатьсуществовать flash начальство, Сектора использования не сопоставляются с логическими секторами. Обычно flash Операцию невозможно выполнить. нормальное массовое производство не сотрётся.
• Записать конфигурацию
картина 7-2: DragonSN горетьзаписывать Безопасность key Конфигурация
особенныйиз Безопасность key, Сохранить здесь key Искусство Мин не будет спасено, идадержать Зависит от secure os шифрование тоже измиискусство. Обратите внимание, что ОПТЭЭ OS использовать efuse в SSK key Приходитьшифрованиеяркийискусствочислов соответствии с,для Гарантированочислов соответствии с Безопасность,пожалуйстасуществоватьгоретьзаписывать SSK продолжить позже keybox числов соответствии сизгоретьзаписывать、использовать。
а. список ящиков для ключей
keybox роды secure storage середина。dragonSN Инструмент записи может указать только key Сжечь,чтобы secure storage。 key данет Сжечь, чтобы keybox середина, Зависит от uboot корень соответствии с key изимя называется решением. uboot использовать переменные среды keybox_list Определить текущую запись гореть из key да Нетдлянужно сохранить в keybox из key,даносуществоватьгоретьзаписывать、нагрузкачас做相отвечатьизиметь дело с.
keybox_list Переменные среды родные devides/config/chips/${chip}/configs/default/env.cfg середина,использовать逗Числоточкакаждый key. Внизлапшаизпримерребеноксередина,горетьзаписыватьчасимясказатьдля rsa_key или ecc_key или testkey из key будет сохранен в keybox для secure os Расшифроватьиспользовать。
keybox_list=rsa_key, ecc_key, testkey
б. сжечь
проходить dragonSN Инструменты для выжигания
картина 7-3: key Сжечь, чтобы keybox изпроцесс
в. Включение питания.
uboot читать key Отправить secure os。secure os Кэш после расшифровки, для TA проходитьинтерфейсдоступ。
картина 7-4: key от keybox серединанагрузкаизпроцесс
7.2.2 Закрытый ключ (частное хранилище)
держатьсуществовать private Раздел. Во время массового производства этот раздел будет перемещен в память. После завершения массового производства память будет восстановлена до flash середина, достичь После массового производстваточка区содержаниебронироватьизглазиз。добавить вчастныйточка区нуждатьсясуществовать sys_partition.fex Добавить конфигурацию Внизсодержание。
[partition]
name = private
size = 1024
user_type = 0x8000
key Сохранить в имя файладля key имясказатьиздокументсередина,Можеткпроходитьдокументсистемадоступприезжать key изсодержание。
• Записать конфигурацию
картина 7-5: DragonSn Сжечь личное key Конфигурация
• Форматирование раздела
После массового производства private Содержимое раздела остается неизменным. Поэтому private Раздел не может быть отформатирован для массового производства. для неформатированного из раздела, гореть key Форматирование требуется, когда раздела。
картина 7-6: Форматировать частный раздел
• документпуть
key Сохранить в имя файладля key имясказатьиздокументсередина,документпуть Можетксуществоватьгоретьзаписыватьчас Конфигурация。
картина 7-7: частный key горетьзаписыватьпуть
:::warning частьплатформа Может能встречачитатьидентификациячастный key, читатьчасиспользоватьизпутьдля Сжечь личное key Путь по умолчанию. Если Исправит пройдет key изгореть путь записи, Обратите внимание, что синхронизация Исправлять с элементами конфигурации. :::
существовать sys_config.fex серединаиспользовать
(path_to_key_file)" из обозначения формы key изчитать。
TrustZone Требовать Безопасностьи Нет Безопасностьресурссуществоватьжесткийкускиначальстворуководить隔离, Его набор ресурсов Безопасности должен быть заменен внутри чипа. Атаки нечиповых элементов на печатную плату. Но Зависит от Встановитьсякнигапричина, Большая часть устройств не интегрирована в чип, большая емкость не будет потеряна после сбоя питания, а стираемые носители данных (например, nand), поэтому TEE середину необходимо выключить, чтобы сохранить изцифры соответствии все необходимо сохранить на внешнем носителе данных середина. правда это TrustZone Технические характеристики также имеют соответствующее изнаправлениеслучай, тройник. извчислов соответствии с Необходимо сохранить на внешнем носителе данных, Необходимость удовлетворения определенных требований. опти Предлагается для удовлетворения требований Должена к поставке. Может использоваться для TEE средасерединачислов соответствии сиз Сохранить после выключения.
OPTEE Secure Storage с программной архитектурой, такой как Вниз:
картина 8-1: OPTEE Secure Storage мягкийкуски Архитектура
TA вызов GP Trusted Storage API дляиз Писатьинтерфейс, этотинтерфейсвстречавызов TEE Trusted Storage Service в Похожие syscall Реализация попадает в OPTEE из kernel space середина, Должен syscall Вызову серию из TEEFile Operation Interface интерфейс Приходитьхранилище Писатьвходитьизчислов соответствии с。TEE система документов «Воля Писат» существует соответствии сруководитьшифрование, Затем провести серию из RPC сообщение для TEE supplicant отправлять REE документ操делать Заказкиужешифрованиеизчислов соответствии с。TEE supplicant верно разобрать эти сообщения, в соответствии с определением расчетов соответствии с Депозит на вер должен из Linux документсистемасередина(по умолчаниюда/data/tee глаззаписывать)。кначальстводаверно Писатьчислов соответствии сизпроцессинг, верночитатьчислов соответствии сиз обрабатывается аналогично.
Конфигурация TA длясервервызов OPTEE OS дляизмагазинногоинтерфейса,могу позволить REE такжеиспользоватьэтотинтерфейс, надстановитьсячислов соответствии сизшифрование памяти. Подробную информацию см. demo в encrypt_file_storage。
a. TrustZone
b. GlobalPlatform
c. OPTEE