Поддерживает ли iPhone аппаратное ускорение AES?

Я мог найти ссылки на «аппаратное ускорение AES-шифрования» на iPhone / iPad. Но API-интерфейсы, которые я мог бы найти для шифрования AES ( CCCrypt ), вообще не говорят об аппаратном ускорении.

Кто-нибудь есть идеи, являются ли эти API-интерфейсы аппаратными ускорениями или есть другие?

3 Solutions collect form web for “Поддерживает ли iPhone аппаратное ускорение AES?”

Да.

Начиная с версии 4.3, если сообщение имеет> 64 блока (т.е. 1024 байта), функция CCCrypt для AES будет использовать аппаратно-ускоренную реализацию. (Это делается путем ioctl ing с /dev/aes_0 , BTW.)

Помимо AES, SHA-1 также аппаратно ускоряется, когда вход составляет> 4096 байт.

Весь смысл API заключается в том, что вам не нужно заботиться о деталях реализации, которые его поддерживают. Разработчик (в данном случае Apple) будет использовать любую реализацию, обеспечивающую лучшие характеристики производительности и энергопотребления для любого используемого оборудования. Это может быть аппаратная реализация, или это может быть программная реализация, она может зависеть от размера блока, для которого вы вызываете функцию.

Поддерживает ли iPhone аппаратное ускорение AES?

Это зависит от версии iPhone и аппаратного обеспечения, но в основном ДА в 2015 году.

Apple использует его для быстрой «удаленной очистки» для управляемых устройств. Идея заключается в том, что все зашифровано, а ключи хранятся в keybag, поддерживаемом стираемым хранилищем («effaçable» является французским для «erasable»). Для получения дополнительной информации см. Подробную информацию о защите данных iPhone от Jean-Baptiste Bérrune и Jean Sigwald; и оценка безопасности Apple iOS 4 от Dino Zavi.

Схема помещается в Datapath между хранилищем и памятью, поэтому любое перемещение по пути зашифровывается или дешифруется.

Если устройство потеряно или украдено, на устройство может быть отправлена ​​команда для стирания клавиатуры, содержащей ключи, используемые для шифрования и дешифрования. Так как в багажном отделении поддерживается сбрасываемое хранилище, ключи не перемещаются из-за износа.

Похоже, Apple предоставляет аппаратное ускорение AES из по меньшей мере двух источников на устройствах iOS. Оба они обернуты инфраструктурой CommonCrypto от Apple. По крайней мере, один из них доступен для программиста без необходимости использования CommonCrypto.


Первый аппаратный ускоренный источник

Первым источником является стандартная кривая ARM, доступная в ARMv8 и выше. Инструкции доступны как для Cins и C ++, так и для сборки при определении __ARM_FEATURE_CRYPTO :

 $ clang++ -arch arm64 -dM -E - < /dev/null | sort | egrep -i '(arm|aarch|neon)' #define __AARCH64EL__ 1 #define __AARCH64_SIMD__ 1 #define __ARM64_ARCH_8__ 1 #define __ARM_64BIT_STATE 1 #define __ARM_ACLE 200 #define __ARM_ALIGN_MAX_STACK_PWR 4 #define __ARM_ARCH 8 #define __ARM_ARCH_ISA_A64 1 #define __ARM_ARCH_PROFILE 'A' #define __ARM_FEATURE_CLZ 1 #define __ARM_FEATURE_CRYPTO 1 #define __ARM_FEATURE_DIV 1 #define __ARM_FEATURE_FMA 1 #define __ARM_FEATURE_UNALIGNED 1 #define __ARM_FP 0xe #define __ARM_FP16_FORMAT_IEEE 1 #define __ARM_FP_FENV_ROUNDING 1 #define __ARM_NEON 1 #define __ARM_NEON_FP 7 #define __ARM_NEON__ 1 #define __ARM_PCS_AAPCS64 1 #define __ARM_SIZEOF_MINIMAL_ENUM 4 #define __ARM_SIZEOF_WCHAR_T 4 #define __aarch64__ 1 #define __arm64 1 #define __arm64__ 1 

Кстати, когда определен __ARM_FEATURE_CRYPTO , вы также должны иметь доступ к аппаратным ускоренным SHA-1 и SHA-2.


Второй аппаратный ускоренный источник

Второй источник кажется обычным, и его присутствует в ARMv7 и ниже. Я не уверен, как добраться до этого криптографии (возможно, у opensource.apple.com есть ответ):

 $ clang++ -arch armv7s -dM -E - < /dev/null | sort | egrep -i '(arm|aarch|neon|crc|crypto)' #define __ARMEL__ 1 #define __ARM_ARCH 7 #define __ARM_ARCH_7S__ 1 #define __ARM_ARCH_EXT_IDIV__ 1 #define __ARM_NEON 1 #define __ARM_NEON__ 1 #define __ARM_SIZEOF_MINIMAL_ENUM 4 #define __ARM_SIZEOF_WCHAR_T 4 #define __ARM_VFPV4__ 1 #define __arm 1 #define __arm__ 1 

А также:

 $ clang++ -arch armv7 -dM -E - < /dev/null | sort | egrep -i '(arm|aarch|neon|crc|crypto)' #define __ARMEL__ 1 #define __ARM_ARCH 7 #define __ARM_ARCH_7A__ 1 #define __ARM_ARCH_PROFILE A #define __ARM_NEON 1 #define __ARM_NEON__ 1 #define __ARM_SIZEOF_MINIMAL_ENUM 4 #define __ARM_SIZEOF_WCHAR_T 4 #define __ARM_VFPV3__ 1 #define __arm 1 #define __arm__ 1 

Связанный с этим вопрос: какой аппаратный чип / поставщик использует Apple для своего аппаратного ускорения AES / SHA-1?


Вот код, который мы используем для iOS . Он проверяет поддержку команд ARM Crypto во время выполнения. Поскольку код встроен, один и тот же код используется для iOS, Linux, Windows Phone и Windows Store. В случае iOS его используется, когда -arch arm64 .

 #if (BOOL_ARM32 || BOOL_ARM64) && (/* other support tests */) # define BOOL_ARM_CRYPTO_INTRINSICS_AVAILABLE 1 #endif ... static bool TryCrypto() { #if (BOOL_ARM_CRYPTO_INTRINSICS_AVAILABLE) # if defined(_WIN32) || defined(_WIN64) __try { // AES encrypt and decrypt static const uint8x16_t data = vdupq_n_u8(0), key = vdupq_n_u8(0); uint8x16_t r1 = vaeseq_u8(data, key); uint8x16_t r2 = vaesdq_u8(data, key); } __except (EXCEPTION_EXECUTE_HANDLER) { return false; } return true; # else // longjmp and clobber warnings. Volatile is required. volatile bool result = true; SigHandler oldHandler = signal(SIGILL, SigIllHandlerCrypto); if (oldHandler == SIG_ERR) result = false; if (setjmp(s_jmpNoCrypto)) result = false; else { // AES encrypt and decrypt static const uint8x16_t data = vdupq_n_u8(0), key = vdupq_n_u8(0); uint8x16_t r1 = vaeseq_u8(data, key); uint8x16_t r2 = vaesdq_u8(data, key); } signal(SIGILL, oldHandler); return result; # endif #else return false; #endif } 

И вот как это выглядит из командной строки во время компиляции:

 clang++ -DNDEBUG -g2 -O3 -fPIC -pipe -Wall -miphoneos-version-min=7 -arch arm64 -stdlib=libc++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk -c cpu.cpp cpu.cpp:438:14: warning: unused variable 'r1' [-Wunused-variable] uint8x16_t r1 = vaeseq_u8(data, key); ^ cpu.cpp:439:14: warning: unused variable 'r2' [-Wunused-variable] uint8x16_t r2 = vaesdq_u8(data, key); ^ 2 warnings generated. 
  • Шифрование данных с помощью AES
  • Как шифровать / расшифровывать куски / блоки больших файлов с помощью AES, CCrypt на iOS?
  • iOS: безопасно ли использовать код AES в коде с жестким кодом?
  • Шифрование строки AES PBKDF2
  • Работа с AES-шифрованием в IOS
  • Как воспроизвести зашифрованное HLS-видео AES-128 в AVPlayer
  • Можно ли использовать AES128 с режимом GCM на iOS?
  • Шифрование iOS AES128 / CBC / nopadding Почему не работает?
  • Расшифровка AES в iOS: заполнение PKCS5 и CBC
  • Когда нужно проверить поле «Это приложение использует шифрование»?
  • Шифрование / расшифровка для изображения на IOS
  • Interesting Posts

    выпадающий список не отображается в Xcode 4 при подшивке кода

    Отношения раскадровки в iOS

    Запросы CloudKit для зарегистрированных пользователей

    iOS didSelectTabBarItem, зная, какой элемент был выбран ранее

    Проблемы с производительностью при обрезке UIImage (CoreGraphics, iOS)

    Проблема IOS 8 Европа / Москва

    Google API Client GTMHTTPUploadFetcher дублируется

    UIAlertViews, UIActionSheets и keyWindow

    UIView autoresizingMask – Конструктор интерфейсов для кода – Программно создавайте распорки и пружины – Swift или Objective-C

    Есть ли способ открыть URL-адреса, полученные в push-уведомлении, без открытия приложения в ios 10?

    IOS сохранить изображение gif из выбранного изображения UIImagePickerController

    Нажатие данных из UITableViewCell в UINavigationController

    iPhone – Получить позицию UIView в пределах всего UIWindow

    Swift: сделать многоточие, повторяющееся на этикетке? Жесткая метка «анимация»?

    В чем разница между «атрибутом» и «свойством» в restkit

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.