根据这篇文章 http://blog.gdssecurity.com/labs/2013/3/5/retrieving-crypto-keys-via-ios-runtime-hooking.html
Apple 的 doCipher:key:context:padding 方法示例代码中存在“错误做法 http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Listings/Classes_SecKeyWrapper_m.html”。以下代码片段显示它将使用 16 字节 0x0 的静态 IV。
// Initialization vector; dummy in this case 0’s.
uint8_t iv[kChosenCipherBlockSize];
memset((void *) iv, 0x0, (size_t) sizeof(iv));
为什么通俗地说它真的很糟糕以及如何解决它?
我只知道可以 Hook 该代码以拦截对称 key 。但我不明白为什么以及如何防止这种情况。
最佳答案
那篇文章中概述的代码是不安全的,因为它不遵循关于初始化向量是随机值的规则。请注意,编写它的工程师评论道:
//... dummy in this case 0’s.
真正的固定大小的初始化向量(或 IV,正如博客中所说的那样)将从不分配一个缓冲区以一遍又一遍地传递给具有相同值的加密函数,它们会取而代之每次将缓冲区包含的数据随机化,这样就无法像作者那样通过查看提供的示例代码来推断其位置。只要切断对 memset()
的调用,那 block 内存就会被运行时填满“垃圾”。如果您想获得技术知识,请编写您自己的 memset()
版本,该版本生成伪随机数据以覆盖该本地内存。
关于ios - Apple 的 doCipher 示例代码中的不良做法 :key:context:padding method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627873/