MASTG-TEST-0061:验证密码标准算法的配置
概述¶
静态分析¶
对于应用程序使用的每个库,需要验证所使用的算法和密码配置,以确保它们没有被弃用并被正确使用。
请注意如何定义待删除的密钥保存数据结构和纯文本数据结构。如果使用关键字let
,则会创建一个不可变结构,该结构更难从内存中擦除。确保它是父结构的一部分,该父结构可以很容易地从内存中删除(例如,临时存在的struct
)。
确保遵循“移动应用密码学”一章中概述的最佳实践。查看不安全和已弃用的算法以及常见的配置问题。
CommonCryptor¶
如果应用程序使用 Apple 提供的标准加密实现,那么确定相关算法状态的最简单方法是检查对 CommonCryptor
中函数的调用,例如 CCCrypt
和 CCCryptorCreate
。源代码包含 CommonCryptor.h 的所有函数的签名。例如,CCCryptorCreate
具有以下签名
CCCryptorStatus CCCryptorCreate(
CCOperation op, /* kCCEncrypt, etc. */
CCAlgorithm alg, /* kCCAlgorithmDES, etc. */
CCOptions options, /* kCCOptionPKCS7Padding, etc. */
const void *key, /* raw key material */
size_t keyLength,
const void *iv, /* optional initialization vector */
CCCryptorRef *cryptorRef); /* RETURNED */
然后,您可以比较所有 enum
类型,以确定使用哪种算法、填充和密钥材料。注意密钥材料:密钥应该安全地生成 - 要么使用密钥派生函数,要么使用随机数生成函数。请注意,在“移动应用密码学”章节中被标记为已弃用的函数,仍然在编程上得到支持。不应该使用它们。
第三方库¶
鉴于所有第三方库都在不断发展,这里不应该对每个库进行静态分析评估。仍然有一些需要注意的地方
- 查找正在使用的库:可以使用以下方法完成
- 确定正在使用的版本:始终检查正在使用的库的版本,并检查是否有新版本可用,其中可能已修补漏洞或缺点。即使没有库的较新版本,也可能存在加密函数尚未经过审查的情况。因此,我们始终建议使用经过验证的库,或者确保您有能力、知识和经验进行验证。
- 手工编写?:我们建议不要自己编写加密代码,也不要自己实现已知的加密函数。