Поддерживает ли 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. 
  • Для AES128 с использованием CCCrypt () ключ может быть длиннее 128 бит?
  • Как шифровать / расшифровывать куски / блоки больших файлов с помощью AES, CCrypt на iOS?
  • Строка шифрования AES128 не похожа на строку .net
  • AES Decryption имеет другое поведение в iOS 7, чем iOS 8/9
  • iOS и .NET производят разные результаты AES256
  • iOS: безопасно ли использовать код AES в коде с жестким кодом?
  • Строковое шифрование в RubyMotion
  • Objective-C расшифровывать AES 128 cbc hex string
  • Почему увеличение количества раундов для CCKeyDerivationPBKDF повышает безопасность?
  • Когда нужно проверить поле «Это приложение использует шифрование»?
  • Расшифровка AES в iOS: заполнение PKCS5 и CBC
  • Расшифровка видеофайла в iOS
  • Interesting Posts

    Как установить уровень масштабирования для местоположения пользователя в MapView

    Цель c – Показывать буферизацию при воспроизведении звука с удаленного сервера

    Как заполнить OTP из окна сообщения пользователя на приложение прямо в iPhone?

    Перезагрузка ViewController

    Мое приложение часто, но случайно разбивает весь телефон на загрузку приложения

    Невозможно получить эффект 3D-звука для skAudioNode в SpriteKit

    Почему панель вкладок будет скрываться, когда Push to another View в объекте c

    UINavigationbar закрывается сверху

    CADisplayLink и drawRect

    AppStore – статус приложения готов к продаже, но не в магазине приложений.

    Ошибка при попытке запуска скрипта автоматизации пользовательского интерфейса от jenkins

    Тестирование Swift Unit и AVFoundation: как проверить наличие / отсутствие действительного устройства захвата?

    Как уловить «Индекс вне диапазона» в Swift?

    Несбалансированные вызовы UIViewController при запросе разрешений HealthKit

    SLComposeViewController

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