ios - Apple 的 doCipher 示例代码中的不良做法 :key:context:padding method

标签 ios objective-c encryption

根据这篇文章 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/

相关文章:

ios - 在 App delegate swift 中获取 UIVIewController 的名称

iphone - 如何在视频上添加叠加文本,然后重新编码?

java - 从文件中读取加密数据

java - 加密属性文件和持久性 xml

java - 如何在 PGP key 环和 Java keystore 文件之间进行转换?

ios - 使用 LFLiveKit 在 iOS 应用程序中切换到后置摄像头

ios - 我们可以[ self 释放]吗?

ios - iOS 检查视网膜像素的工具或技术?

ios - 从 CFData : Arithmetic on a pointer to incomplete type 读取像素字节

ios - 添加 UICollectionView 作为 UICollectionReusableView reloadData 的 subview 不起作用,我想念什么?