我可以在iPhone/iPad上找到對「硬件加速的AES加密」的參考。但是我可以找到的用於執行AES加密的API(CCCrypt)根本不談論硬件加速。iPhone是否支持硬件加速的AES加密?
有沒有人有任何想法,如果這些API是硬件加速或有其他的?
我可以在iPhone/iPad上找到對「硬件加速的AES加密」的參考。但是我可以找到的用於執行AES加密的API(CCCrypt)根本不談論硬件加速。iPhone是否支持硬件加速的AES加密?
有沒有人有任何想法,如果這些API是硬件加速或有其他的?
是的。
從4.3開始,如果消息具有> 64個塊(即1024個字節),則AES的CCCrypt函數將使用硬件加速實現。 (這是通過ioctl
/dev/aes_0
,順便說一句來完成的)。
除了AES,當輸入大於4096字節時,SHA-1也是硬件加速的。
您是否有任何指向Apple文檔的鏈接? – Bala 2011-03-24 14:55:38
API的重點在於您無需關心支持它的實現細節。實現者(在這種情況下,蘋果公司)將使用任何實現方式,在任何正在使用的硬件上提供最佳的性能和能量使用特性。這可能是一個硬件實現,或者它可能是一個軟件實現,它可能取決於您調用該函數的塊大小。
iPhone支持硬件加速的AES加密嗎?
這取決於iPhone版本和硬件,但大多是在2015年
蘋果使用它的快速「遠程擦除」功能爲管理的設備。這個想法是一切都加密,鑰匙存儲在一個鑰匙包,由可消除存儲(「effaçable」是法語爲「可擦除」)。欲瞭解更多信息,請參閱Jean-BaptisteBédrune和Jean Sigwald iPhone data protection in depth;和Dino Zavi的Apple iOS 4 Security Evaluation。
該電路放置在存儲器和內存之間的DMA數據路徑上,因此任何遍歷該路徑的內容都將被加密或解密。
如果設備丟失或被盜,則可以向設備發送命令以擦除保存用於加密和解密的密鑰的密鑰包。由於鑰匙包由可擦除存儲支撐,鑰匙不會因損耗均衡而移動。
看起來蘋果提供了來自iOS設備上至少兩個來源的硬件加速AES。兩者都被Apple的CommonCrypto框架包裝。至少有一個似乎可供程序員使用,而不需要使用CommonCrypto。
第一硬件加速源
第一個來源是在ARMv8和上述可用標準的ARM加密。當被定義__ARM_FEATURE_CRYPTO
所述指令可作爲兩個C/C++ intinsics和組件:
$ 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,也。
第二硬件加速源
第二源似乎是自定義的,其在ARMv7s和下面存在。我不知道怎麼去這個加密(也許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
一個相關的問題是Which hardware chip/vendor does Apple use for its hardware-accelerated AES/SHA-1 encryption?
下面是一些代碼we are using for 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.
我的理解是蘋果公司不會告訴你它是否是硬件加速與否,但將只提供CommonCryptor東西對你來說...我想它會在支持它的設備上進行硬件加速,如果沒有的話,計劃軟件。 – Romain 2011-03-21 09:29:36
值得注意的是,以下注釋出現在CryptoExercise代碼(SecKeyWrapper.h:60-62)中: __ //爲此示例選擇的所選對稱密鑰和摘要算法是AES和SHA1。 //這背後的原因是因爲iPhone和iPod touch具有 //這些特定算法的硬件加速器,因此節能.__ – 2012-07-24 16:22:57