写点什么

密码学系列之: 海绵函数 sponge function

发布于: 20 小时前

简介

海绵函数 sponge function 是密码学中使用的一种函数,它接收一定长度的输入,然后输出一定长度的输出,中间包含了有限个内部状态。

因为海绵函数的强大功能,所以可以用来建模和实现许多密码原语,包括密码散列,消息身份验证码,生成掩码,流密码,伪随机数生成器等。

本文将会讲解海绵函数的结构。

海绵函数的结构

我们先看一个海绵函数的结构图:



这个函数被分成了两部分,左边部分叫做吸收部分,右边部分叫做输出部分,一吸一出,像是海绵一样,所以叫做海绵函数。

P 表示的是输入的字符串,Z 表示的时候输出字符串。

一个海绵函数由三部分组成,分别是 state, 函数 f 和填充函数 pad。

state 就是上图的 r+c 部分,r 被称为 Bitrate, c 被称为 Capacity

P 被分成 n 份,每一份都会跟 Bitrate 进行异或操作,如果 P 的长度不是 Bitrate 的整数倍,那么需要使用 Pad 函数进行填充。

每一轮,Bitrate 跟 P 进行异或操作的结果作为最新的 Bitrate, 然后生成新的 state,然后这个 state 又被 f(state)来替换。

其中函数 f 是 从 n 个{0,1} 到 n 个{0,1}的映射。

就这样一轮一轮进行下去,直到所有的 P 都参与了运算。

输出部分是将最终生成的 state 进行 f 运算,每次运算都取 Bitrate 部分作为输出,从而得到最终的输出。

海绵函数的应用

因为海绵函数的优秀的特性,所以被用在很多方面。比如 SHA-3 的实现算法 Keccak 就是使用的海绵函数。

通过替换 f 和多轮置换,海绵函数可以生成非常安全的密码算法,所以得到了广泛的使用。

本文已收录于 http://www.flydean.com/36-sponge-function/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 20 小时前阅读数: 4
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
密码学系列之:海绵函数sponge function