首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切断SHA-256熵?

切断SHA-256熵?
EN

Cryptography用户
提问于 2015-08-13 09:12:07
回答 1查看 1.5K关注 0票数 4

我有一个NoSQL键值数据库.我想在里面插入几百万条记录。

对于密钥生成,我使用前缀(类似于data-one-),然后将存储的值的SHA-256散列连接起来。所以结束键看起来就像

代码语言:javascript
复制
data-one-0000fdb60e164cf0bf07cef647354d26ed17c9492ca4bbf4114878325871fa1d

问题是,这个键有点大,它会影响DB性能。我想切掉一些哈希,得到一个64位字符串(所以,8个字符)。所以我会把上面的钥匙砍成

代码语言:javascript
复制
data-one-0000fdb6

但是它会给剩下的密钥留下足够的熵吗?数据库会变大,我不想碰撞,很明显。另一个哈希是否更适合这种使用,还是修整SHA-256很好?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2015-08-13 10:22:01

假设散列函数是好的,并且人们普遍认为SHA-256是这样的,那么k样本中没有碰撞到一个大小范围的n (例如,通过选择一个字符子集获得)的概率是由exp(-k^2/2n).所限制的。

对你来说,比如说k=2^{21}=2,097,152 (几百万)和n=2^{64},意味着你没有碰撞的可能性大概是

exp(-2^{42}/2^{65})=exp(-2^{-21})\approx 1-1.2\times 10^{-7}.

如果你有8倍多的投入(超过1600万),这将变成

exp(-2^{48}/2^{65})=exp(-2^{-17})\approx 1-7.6\times 10^{-6}

所以碰撞的概率将超过百万分之一。

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

https://crypto.stackexchange.com/questions/27458

复制
相关文章

相似问题

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