首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rfc2898DeriveBytes中使用变量迭代计数明智吗?

在Rfc2898DeriveBytes中使用变量迭代计数明智吗?
EN

Stack Overflow用户
提问于 2014-01-29 15:28:10
回答 1查看 1.2K关注 0票数 1

这是个理论上的问题。假设您有一个要从中派生主密钥的密码。首先用SHA256散列密码,解析并截断计算出的字节为整数,然后使用模运算符,以便它包含在一个范围(即1000-3000)中,并使用这个整数作为Rfc2898DeriveBytes在.NET中的参数,这是安全的吗?

这样做的主要目的是使迭代计数变量。我这样做会失去熵吗?

下面是用于随机化迭代计数的C#代码:

代码语言:javascript
复制
        #region Constant Definitions
        private const int HASH_SIZE = 512;
        private const int ITERATIONS_LOWER_BOUND = 1000;
        private const int ITERATIONS_UPPER_BOUND = 2500; //must exceed lower bound
        private const uint SALT_SIZE = 256;
        #endregion

        public static int RandomizeIteration(byte[] Key) {
            if (ITERATIONS_UPPER_BOUND <= ITERATIONS_LOWER_BOUND) {
                throw new ArgumentOutOfRangeException("Iteration parameters are incorrectly configured.");
            }
            //Hash the key using SHA256 algorithm
            byte[] HashedKey = SHA256.ComputeHash(Key);
            long HashSum = Math.Abs((BitConverter.ToInt64(HashedKey, 0)));

            Console.WriteLine("Iterations: " + (HashSum % (ITERATIONS_UPPER_BOUND - ITERATIONS_LOWER_BOUND) + ITERATIONS_LOWER_BOUND));

            return (int) (HashSum % (ITERATIONS_UPPER_BOUND - ITERATIONS_LOWER_BOUND) + ITERATIONS_LOWER_BOUND);
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 16:42:33

使用变量迭代计数没有好处。为了验证,必须知道迭代的次数(这不是秘密),所以它也可以用于蛮力强制。您只需要改变计算哈希所需的时间,这是不可取的,应该根据服务器的性能来选择时间。

如果您的意图是向散列过程添加一个秘密(因此攻击者必须猜测迭代次数),那么有更好的方法。添加服务器端秘密的一个好方法是加密password_hash。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21435419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档