2011-02-18 70 views
1

我打算用这种方法来存储我的密码:用盐渍密码加密这个程序有多安全?

  1. 用户用随机数输入密码
  2. 申请盐密码
  3. 然后用一些加密算法随机选取的数组的数据(由从字符/字节预定表)
    • 为简单起见,可以使用刚刚的数字表,所以在数字情况下,随机阵列将被简单地足够长整数/ BigInteger的。
  4. 然后我存储在DB盐(修改值)和加密的阵列

要检查密码有效期:

  1. 入门给定的密码从DB
  2. 阅读盐和计算解密密钥
  3. 尝试解密加密阵列
  4. 如果全成(在数学米EAN)比较由字节
    • 做它包含来自已知表只字符/字节解密值字节。例如它是整数/大整数?如果是这样的 - 为有效

,你怎么看待这个程序密码计数?

几句话,这是一种替代使用散列函数的...

在这种方法加密算法要被用于非可逆值计算。

编辑

# Encrypt/decrypt function that works like this: 
KEY=HASH(PASSWORD) 
CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY) 
PLAINTEXT = DECRYPT(CYPHERTEXT, KEY) 

# Encrypting the password when entered 
KEY=HASH(PASSWORD)+SALT or HASH(PASSWORD+SALT) 
ARRAY={A1, A2,... AI} 
SOME_TABLE=RANDOM({ARRAY}) 
ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, KEY + SALT) 

# Checking validity 
DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE 
if(SOME_TABLE contains only {ARRAY} elements) = VALID 
else INVALID 
+0

为什么?使用散列函数+盐有什么问题? – 2011-02-18 15:42:54

+0

没有错......只是试图发明轮子:) – barmaley 2011-02-18 16:21:47

回答

1

提出的方案充其量只是比简单地存储密码和salt的散列安全性稍低。

这是因为加密步骤只是增加一小段恒定时间来检查每个散列值是否正确;但同时它也引入了等效散列的类别,因为有多种可能的ARRAY排列将被认为是有效的。

0

你将不得不蛮力每个密码在每次有人登录加密。

阅读从DB盐和计算解密密钥

除非你知道密码是前手这不能做。

只是盐(和多个散列)的口令。

+0

不正确。我猜他想从salt和需要检查的密码中计算解密密钥。也就是说,如果用户输入的密码可以正确解密“表”,则授予访问权限。 – averell 2011-02-18 14:56:44

+0

>然后用一些加密算法随机选择一些加密算法加密算法数据(由预定义的字符表/字节组成) – 2011-02-18 14:59:14

2

从你写我什么假设你要做到以下几点:

# You have some encryption function that works like this 
CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY) 
PLAINTEXT = DECRYPT(CYPHERTEXT, KEY) 

# Encrypting the password when entered 
ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, PASSWORD + SALT) 

# Checking validity 
DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE 

第一关:任何有理智的人会在生产系统中使用这种自制的方案。所以如果你正在考虑在真实世界中真正实现这一点,请回去。甚至不要尝试自己编写的代码,使用实现广泛接受的算法经过验证的软件库。现在

,如果你要想想作为一个智力练习,你可以这样开始:

如果您应该假设攻击者会知道的公式,除了实际的密码,所有的部件,。因此,想要检索密码的攻击者已经知道加密文本,明文和部分密码。

成功的机会将取决于实际的加密方案,也可能是链接模式。

我自己并不是密码分析师,但是没有太多考虑,我觉得可能会出现许多攻击角度。