密码学系列之:海绵函数sponge function
简介
海绵函数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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
相关文章
- Linux C 中 fork() 函数详解
- C++虚函数解析(转)
- Django url 标签和reverse()函数的使用(转)
- 重学c#系列——委托和匿名函数[二十五]
- awk之随机函数rand()和srand()
- 谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 重学c#系列——委托和匿名函数[二十五]
- js es6系列——map函数
- [YOLOv7/YOLOv5系列算法改进NO.18]损失函数改进为Alpha-IoU损失函数
- [YOLOv7/YOLOv5系列算法改进NO.10]损失函数改进为SIOU
- 【YOLOv7/YOLOv5系列算法改进NO.47】改进激活函数为GELU
- 从零开始学_JavaScript_系列(20)——js系列<7>(函数原型的两种声明方式、函数的作用域)
- mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】
- Py之shap:shap.explainers.shap_values函数的简介、解读(shap_values[1]索引为1的原因)、使用方法之详细攻略
- C++虚函数表剖析
- C++函数返回右值引用
- linux下执行strlwr函数出错:ld returned 1 exit status
- fopenfreadfwritefscanffprintffseekfeofrewindfgetsfputc等系列函数使用总结
- Go语言精进之路自学系列 | 让自己习惯于函数是“一等公民”
- Go语言自学系列 | golang init函数
- Go语言自学系列 | golang 函数
- 【SQL开发实战技巧】系列(四十三):Oracle12C常用新特性☞转换函数的增强和不可见字段
- writev函数
- 【YOLOv7/YOLOv5系列算法改进NO.46】改进激活函数为ACON