但是还有其他用例吗?通常,加密存储使数据可检索似乎是一种规范。
#1 楼
数据完整性是另一种用法。例如,当您要发送/下载数据时,您要确保未正确修改或传输/下载数据。为了实现此目的,将数据散列,并将散列值发送/下载到另一个通道上。在Linux ISO下载页面上可能会看到此文件验证的示例。当然,哈希还不足以保护您免受某些攻击。因此,您需要数字签名。
另一个,在对文档进行数字签名时,我们首先对文档进行哈希处理,然后对哈希值进行签名。这比签名整个文档更有效。
键控哈希消息认证码(HMAC)是一种消息认证码(MAC),其中涉及加密哈希函数和加密密钥。
密钥派生函数还使用哈希函数从您的密码以及各种随机源中派生密钥。
密钥派生:弱密码更能抵御暴力攻击。 PNKDF2,bcrypt和Argon2使用密钥扩展。
Ratcheting:正向密钥链,没有向后可用性。
哈希使用的一种特殊情况是Merkle-Tree来验证低带宽数据的完整性。
在区块链中:哈希是区块链的基本组成部分。
工作量证明系统:
工作量证明(PoW)系统(或协议或功能)是一种经济手段,可以阻止拒绝服务攻击和其他服务滥用(例如垃圾邮件)。通过要求服务请求者进行一些工作来建立网络,通常意味着由计算机处理时间。
比特币挖掘和Hashcash使用工作量证明系统。
>如TLS 1.3中的ChaCha2中那样构造流密码。此构造使用CTR操作模式。
公钥密码术:Trapdoor单向函数很容易计算,没有特殊信息也很难反转。大多数公钥密码系统都基于Trapdoor单向功能。
承诺方案允许提交值,同时隐藏其他值,并提供以后显示的功能。
Lamport签名或Lamport一次性签名方案可以使用单向函数,通常首选加密散列函数。
安全随机数生成器例如Hash_DRBG使用哈希函数来改善和扩展真实随机数生成器的输出
评论
$ \ begingroup $
数据完整性不需要不可逆的加密。例如,CRC被广泛用于错误检测,但易于逆转。
$ \ endgroup $
–nwellnhof
18/12/5在17:44
$ \ begingroup $
@nwellnhof CRC和校验和用于检测传输错误,但通常认为其强度不足以检测到故意修改的情况,可以通过保留完整性代码的方式轻松完成。
$ \ endgroup $
– Barmar
18/12/5在18:03
$ \ begingroup $
所有这些,预计可能会有一些“安全随机数生成器,棘轮系统,工作量证明系统”似乎是“密码”的变体。仍然是一个不错的清单。
$ \ endgroup $
–chux-恢复莫妮卡
18/12/7在6:36
$ \ begingroup $
@chux我不确定谁将“复仇者的完整副本:无限战争”用作“密码”:这就是您通过“数据完整性”验证的事情。 OP的“密码”侧重于不泄露实际密码;在这里,这是“不必两次发送实际文件”,这是非常不同的事情。
$ \ endgroup $
– ak牛-亚当·内夫罗蒙特
18/12/7在19:05
$ \ begingroup $
我们还应该为跨链原子交换添加哈希时间锁定合同(HTLC)(尽管可以将其视为承诺方案)。此外,散列函数(即zkStark和Ligero)提供的零知识证明,还请注意Lamport的方案具有多次更改,例如XMSS,BPQS和Sphincs。
$ \ endgroup $
– Kostas Chalkias
18/12/7在23:46
#2 楼
单向函数在密码学中的应用在极少数情况下可能会发生哈希冲突,但在这里大多不予考虑。
数据完整性数据将比较两个散列,其中一个是先前计算的散列,另一个是新计算的数据散列,假定是未修改的。如果先前的哈希与新的哈希匹配,则实际上数据没有更改。
与大数据的“逐位”比较相比,比较两个哈希在计算上非常有效。
对于同一发布的文件,可下载文件通常也具有校验和(通常为SHA256)。这样,您还可以在下载文件后计算校验和。如果校验和匹配,那么您就知道文件没有被修改,即添加后门,病毒,蠕虫等。应用程序比密码哈希。与密码有关的单向功能的主要优势显然是,您不必将密码存储为纯文本格式,并且仍然可以对用户进行身份验证。
数字签名
数字签名的功能基本上是与使用墨水在纸上的签名相同。它们确保源而不是文件的真实性。它们在电子邮件中非常常用,通过这种方式,邮件的接收者可以验证发件人实际上是撰写电子邮件的人。 -work是对比特币的挖掘,矿工必须在其中计算特定的哈希值。这样,验证某个值相对容易(在挖比特币的示例中,您“验证” P2P比特币网络中分散节点的完整性),但是对于可能的攻击者却很难做同样的工作。 >具有密码安全性的伪随机数生成器
CSPRNG在密码学中具有相对广泛的用途,即:
与“普通” PSNG相比,密钥生成
盐
CSPRNG必须具有单向功能的要求(如果存在这样的生成器,这还没有得到证明)。 >密钥派生功能
KDF用于从主密钥中获取多个(至少一个)秘密密钥。密钥加密哈希函数是用于密钥派生的伪随机函数的流行示例。
评论
$ \ begingroup $
小小麻烦:CSPRNG无法生成OTP。
$ \ endgroup $
–Paul Uszak
18/12/5在21:40
$ \ begingroup $
@PaulUszak是绝对正确的。将CSPRNG用于OTP时,您只有流密码。
$ \ endgroup $
–森林
18/12/7在4:16
#3 楼
有大量定理表明,单向函数足以构建许多种类型的对称密码学方案。正如链接所指出的那样:单向函数的存在意味着还存在许多其他有用的概念,包括:
伪随机生成器
伪随机函数族
位承诺方案
私钥加密方案可防止自适应选择密文攻击
消息认证码
数字签名方案(针对自适应选择的安全消息攻击)
单向函数的存在还意味着$ \ mathrm {P}≠\ mathrm {NP} $没有自然证据。
是的,很有用。
#4 楼
哈希函数在密码学中无处不在。甚至尝试列出所有应用程序都无济于事...仅举一个例子:仅由哈希函数构造的签名方案(https://en.wikipedia.org/wiki/Hash -based_cryptography)
#5 楼
散列还具有许多非加密用途。它们仍被用作避免索引和表不平衡,队列分配和调度以及校验位计算和指纹识别的一种方法(mda5仍常用于下载验证)。均匀分布,因此我们在搅拌混合以使事物均匀时使用“哈希”一词,以避免出现热点并平衡资源。
评论
$ \ begingroup $
对于这种类型的“哈希”,单向性不是必需的,因此我认为这不能回答所提出的问题。
$ \ endgroup $
– Maeher
18/12/7在13:20
$ \ begingroup $
OP明确要求“其他”用例,而这不是“不是”要求。
$ \ endgroup $
–mckenzm
18/12/8在21:27
评论
邮件签名。...棘轮,承诺计划,工作证明,Lamport签名...
您可以在计数器模式下使用它来构建流密码。在某些方面,这只是其他人关于使用它来创建CSPRNG的答案的回应,因为流密码答案正是以这种方式使用了这种不可逆的密码。
@WDS enc(Mi,k)= Mi ^ hash(i && k)?
对于那些对评论进行回答的人,我可以帮个忙:请留下他们作为回答。评论将被删除,而不是为此目的。