ios - 如果用户可以访问多个使用 AES 加密的加密数据,他们是否能够猜出加密 key ?

标签 ios encryption aes rncryptor

我已经开始使用 RNCryptor ,它将自己描述为“适用于 iOS 和 Mac 的 CCCryptor(AES 加密)包装器”。

我的问题不是针对 iOS 的,而是更笼统的。

这是我可能用来加密字符串的一些代码:

func encryptText(text: String, encryptionKey: String) -> NSData? {
    let textData = text.dataUsingEncoding(NSUTF8StringEncoding)

    if textData == nil { 
        return nil 
    } 

    let encryptedTextData = RNCryptor.encryptData(textData!, password: encryptionKey)

    return encryptedTextData
}

我有几个担忧:
  • 如果用户无权访问加密 key ,但有多个字符串使用他们有权访问的相同加密 key 加密,他们是否能够弄清楚加密 key 是什么?
  • 如果用户知道其中一个字符串的内容,例如“测试字符串”,他们是否能够使用该知识找出加密 key ,从而访问其他字符串?
  • 如果是 2,是否会在每个字符串的末尾添加一系列随机字符(比如说 20 个字符)来保护我免受这种类型的攻击?如果有人知道这些知识,他们会很容易删除最后 20 个字符并解密剩余的字符串吗?
  • 最佳答案

    攻击者所能做的就是暴力破解 key ,这不是一个现实的提议,而且在知道多条消息的情况下也不会变得更容易(除非 AES 中存在一些我们不知道会产生的弱点)模式”)。

    您可能想知道,如果攻击者能够访问许多截获(甚至解密)的消息,他是否还有其他优势。例如,猜测明文是否与先前的消息相似甚至相同的能力。

    AES 包括设置“初始化向量”。

    通常,您为每条消息设置一个随机 IV,并将其与加密消息一起发送。您的图书馆也在这样做。结果是没有两条消息以完全相同的方式加密。即使您发送相同的明文三次,它也会以三个不同的密文结束(与三个不同的消息无法区分)。与“盐渍”相同的想法。

    would adding a series of random characters to the end of each string (lets say 20 characters) secure me from that type of attack?



    随机 IV 机制使这变得不必要。

    至于它是否有效,AES 是一种分组密码。早期 block 的输出会影响后面 block 的输出,但反之则不然。所以最后的随机填充只会改变最后一个 block 。如果有的话,你会想在开头填充你的字符串。但同样,算法本身(如果使用得当)具有处理这些问题的机制(以 IV、 block 链接和 block 填充的形式)。

    关于ios - 如果用户可以访问多个使用 AES 加密的加密数据,他们是否能够猜出加密 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938942/

    相关文章:

    encryption - pkcs#11 内存错误 - 常见原因可能是什么?

    在 C 中使用 AES-256 和 openssl 计算 CBC-MAC

    ios - Segue 目标返回 SWRevealViewController 而不是 UIViewController

    encryption - 加密指定的备用数据流 - NTFS、XP

    ios - Xcode 6 刷新 NSUserDefaults

    python - 如何编写加密单元测试?

    Android 4.2 破坏了我的 AES 加密/解密代码

    Android keystore 初始化

    iOS 重置授权访问提醒

    ios - 为什么我的 UIButton 的背景层会出现动画,我该如何停止它?