如果用户可以访问多个使用 AES 加密的加密数据,他们是否能够猜出加密密钥?
If a user has access to multiple encrypted pieces of data with AES encryption, would they be able to guess the encryption key?
我已经开始使用 RNCryptor,它自我描述为 "CCCryptor (AES encryption) wrappers for iOS and Mac"。
我的问题不是针对 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
}
我有一些顾虑:
- 如果用户无权访问加密密钥,但有多个字符串使用他们有权访问的相同加密密钥加密,他们能否找出加密密钥是什么?
- 如果用户知道其中一个字符串的内容,例如 "Test String",他们是否能够使用该知识计算出加密密钥,从而访问其他字符串?
- 如果对 2 的回答是肯定的,在每个字符串的末尾添加一系列随机字符(比如 20 个字符)是否可以使我免受此类攻击?如果有人知道这些知识,他们是否可以轻松删除最后 20 个字符并解密剩余的字符串?
攻击者所能做的就是暴力破解密钥,这不是一个现实的提议,并且在知道多条消息的情况下也不会变得更容易(除非 AES 中存在一些我们不知道的弱点)其中会产生 "patterns").
您可能想知道,如果攻击者能够访问许多被截获(甚至解密)的消息,是否还有其他优势。例如,猜测明文是否与先前的消息相似甚至相同的能力。
AES 包括设置 "initialization vector"。
通常,您会为每条消息设置一个随机 IV,并将其与加密消息一起发送。您的图书馆也在这样做。结果是没有两条消息以完全相同的方式加密。即使您将相同的明文发送三次,它也会以三个不同的密文结束(与三个不同的消息无法区分)。与 "salting".
相同的想法
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是一种分组密码。较早块的输出会影响后面块的输出,但反之则不然。所以末尾的随机填充只会改变最后一个块。如果有的话,你会想在开头填充你的字符串。但同样,算法本身(如果使用得当)具有处理这些问题的机制(以 IV、块链接和块填充的形式)。
我已经开始使用 RNCryptor,它自我描述为 "CCCryptor (AES encryption) wrappers for iOS and Mac"。
我的问题不是针对 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
}
我有一些顾虑:
- 如果用户无权访问加密密钥,但有多个字符串使用他们有权访问的相同加密密钥加密,他们能否找出加密密钥是什么?
- 如果用户知道其中一个字符串的内容,例如 "Test String",他们是否能够使用该知识计算出加密密钥,从而访问其他字符串?
- 如果对 2 的回答是肯定的,在每个字符串的末尾添加一系列随机字符(比如 20 个字符)是否可以使我免受此类攻击?如果有人知道这些知识,他们是否可以轻松删除最后 20 个字符并解密剩余的字符串?
攻击者所能做的就是暴力破解密钥,这不是一个现实的提议,并且在知道多条消息的情况下也不会变得更容易(除非 AES 中存在一些我们不知道的弱点)其中会产生 "patterns").
您可能想知道,如果攻击者能够访问许多被截获(甚至解密)的消息,是否还有其他优势。例如,猜测明文是否与先前的消息相似甚至相同的能力。
AES 包括设置 "initialization vector"。
通常,您会为每条消息设置一个随机 IV,并将其与加密消息一起发送。您的图书馆也在这样做。结果是没有两条消息以完全相同的方式加密。即使您将相同的明文发送三次,它也会以三个不同的密文结束(与三个不同的消息无法区分)。与 "salting".
相同的想法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是一种分组密码。较早块的输出会影响后面块的输出,但反之则不然。所以末尾的随机填充只会改变最后一个块。如果有的话,你会想在开头填充你的字符串。但同样,算法本身(如果使用得当)具有处理这些问题的机制(以 IV、块链接和块填充的形式)。