博客
关于我
密码学中的sponge函数
阅读量:273 次
发布时间:2019-03-01

本文共 1479 字,大约阅读时间需要 4 分钟。

Hash函数特性

Hash函数是一种将任意长度的输入映射为固定长度的输出的函数。其常见的数学表示为:

[ h: \mathbb{Z}^* \rightarrow \mathbb{Z}_2^n ]

其中,(\mathbb{Z}_2^*)表示非零整数集合,(\mathbb{Z}_2^n)表示一个由n个二进制位组成的固定长度输出。


Hash函数的特性

Hash函数需要具备以下几个关键特性:

1. Pre-image resistant(前映像抵抗性)

已知Hash函数的输出为(y),则找到满足(h(x) = y)的输入(x),通常需要(2^n)次尝试。

2. 2nd pre-image resistance(二阶前映像抵抗性)

已知消息(M)及其Hash值(h(M)),需要找到另一个消息(M'),使得(h(M') = h(M)),通常需要(2^n)次尝试。

3. Collision resistance(碰撞抵抗性)

找到两个不同的输入(x_1)和(x_2)((x_1 \neq x_2)),使得(h(x_1) = h(x_2)),通常需要(2^{n/2})次尝试。


Random Oracle(随机随机命运)

Random Oracle是一种将任意长度的消息映射为无限长度的输出字符串的随机化函数。其输入参数为((M, l)),其中:

  • (M)是输入的消息
  • (l)是期望输出字符串的长度

输出为长度为(l)的随机均匀分布的字符串,且输出具有自洽性(相同输入必定输出相同结果)。

Random Oracle的主要特点是没有内部碰撞,并且在安全性上接近于随机函数。


Traditional Construction——Merkle-Damgård构造

Merkle-Damgård构造是最早的多次哈希函数构造方法之一。其基本思想是通过多次哈希运算来增强安全性。该方法分为以下几个步骤:

  • 初始哈希:将消息(M)通过一个单次哈希函数(h_1)映射为一个中间结果。
  • 中间哈希:将初始哈希结果通过多次哈希函数(h_2, h_3, ..., h_n)进一步处理。
  • 最终哈希:将中间结果通过一个安全的哈希函数(h_f)生成最终的Hash值。
  • 这种构造方式通过多次哈希层来提高抵抗性,例如,2nd pre-image resistance和collision resistance。


    Sponge Construction(海绵构造)

    Sponge构造是一种基于可扩展输出函数(XOF)的构造方法。其核心是通过一个排列函数(f)将输入数据进行吸收和压缩,生成固定长度的输出。

    Sponge函数的定义

    Sponge函数由两个阶段组成:

  • 吸收阶段(Absorbing Phase):将消息(M)中的数据通过哈希函数(h)逐步吸收,直到达到固定长度。
  • 压缩阶段(Squeezing Phase):将吸收的数据通过排列函数(f)进行压缩,生成最终的固定长度输出。
  • Sponge函数的安全性依赖于排列函数(f)的设计,其中:

    • (r)表示速率参数(rate)
    • (c)表示容量参数(security parameter)

    Duplex Construction(双重构造)

    Duplex构造是一种结合Sponge构造和其他哈希函数的方法,旨在同时增强安全性和性能。其核心思想是通过双向处理数据,使得哈希函数既能在吸收阶段提高安全性,又能在压缩阶段提供高效率的输出。

    这种构造方法在多个安全性场景下表现优异,例如预防前映像攻击和数据泄露。


    参考资料

  • [1]
  • [2]
  • [3]
  • [4] 博客
  • 转载地址:http://bemx.baihongyu.com/

    你可能感兴趣的文章
    Openlayers实战:绘制图形,导出geojson文件
    查看>>
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers实战:非4326,3857的投影
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>