这个XOR加密系统在哪些方面容易受到攻击?

时间:2014-11-05 07:53:09

标签: security encryption xor password-encryption

我正在寻找简单的方法来保护我在线帐户的许多密码。经过一番思考后,我提出了这个想法:

  1. 将我当前的所有密码更改为ASCII字符的随机流。
  2. 使用记忆的主密钥,使用简单的XOR(密码^密钥)加密每个密码。
  3. 将加密结果存储在某处(可能是攻击者可以访问)。
  4. 当我想要检索密码时,请使用我的主密钥重复XOR操作。
  5. 我想知道这个系统中是否有任何漏洞。主密钥长度至少是最长随机密码的长度,因此在单个密码中不会重复密钥,但每个加密密码的密钥都是相同的。从本质上讲,这是一种反向的Vernam Cipher;关键不是随机的,而是"明文" (密码)是。攻击者如何利用这个系统?有可能打破吗?

3 个答案:

答案 0 :(得分:3)

这称为OTP方案,其中密钥被重用。这些方案很容易被破解:XOR两个加密密码相互之间,你得到P1 ^ P2。现在,如果P1或P2的字符相同,则输出为0。如果它们几乎相同,则会得到只有一个位设置的东西(等等)。一旦猜到一个密码,就可以使用加密密码对其进行异或,以获取密钥。唯一安全的位是最长密码末尾的字符(如果不重复密钥)。

这个密码分析是大多数教科书中新密码学家的第一次练习。这完全不安全。

答案 1 :(得分:1)

这是边缘无用的。攻击者必须做的就是获取您的一个密码,并且他拥有您的所有密码。因此,您可以像使用此方案的最不安全的系统一样安全。从没有SSL的公共WiFi网络登录,您已完成

答案 2 :(得分:1)

不要发明自己的加密功能......密码存储问题并不新鲜。

XOR加密非常容易破解,请查看SANS blog

这是一个更好的选择:

保护密码的最着名方法是使用salted密码哈希。我建议您使用SHA256函数,这是在大多数现代编程语言中实现的。

散列算法是单向函数。这意味着您无法解密存储的密码。

基于散列的系统中帐户注册和身份验证的一般工作流程如下:

  1. 用户创建帐户
  2. 您将密码+ salt哈希并将结果存储在数据库中
  3. 在nextLogin尝试时,您将输入的密码+ salt哈希并将其与数据库中的值进行比较
  4. 现在我们唯一需要做的就是定义Salt:

    1. 盐不需要秘密!它只能防止彩虹袭击
    2. 每个用户每个密码的盐必须是唯一的。随机生成的足够长度的字符串将完成这项工作。
    3. 每次用户创建帐户或更改密码时,都应使用新的随机盐对密码进行哈希处理。
    4. salt可以与哈希一起存储在用户帐户表中。