变色龙哈希函数Chameleon Hash Functions

  • 一、哈希函数
    • 1.1 哈希函数定义
    • 1.2 哈希函数性质
    • 1.3 哈希函数存在的问题
  • 二、 变色龙哈希函数
    • 2.1 变色龙哈希函数定义
    • 2.2 变色龙哈希函数算法
    • 2.3 变色龙哈希安全需求
    • 2.4 变色龙哈希函数分析
    • 2.5 变色龙哈希函数构造

一、哈希函数

1.1 哈希函数定义

哈希函数Hash()是密码学中经常用到的一个函数(记住它并不是加密技术,独立于非对称加密和对称加密之外的函数),任意大小的输入消息m 经过哈希函数H ( ) 映射成一个固定长度的输出值h,通常称h 为哈希值或哈希摘要,即 h = H ( m )

1.2 哈希函数性质

具有三个特别重要的性质:

1)单向性:从输入到输出的计算过程较为容易,而由输出值推出输入值是不可能的(计算上几乎不可能实现);

2)抗碰撞性:一般分为弱抗碰撞性和强抗碰撞性(一般很容易搞混,注意区分)

  • 弱抗碰撞性:任意给定消息m ,寻找m ′ ( m ′ ≠ m ) 使得H ( m ′ ) = H ( m )在计算上是不可能的;
  • 强抗碰撞性:找到任意两个相同哈希值H ( m ) = H ( m ′ ) 的不同消息对( m , m ′ )在计算上是不可能的。

3)高灵敏性:输入若发生非常非常微小的变化(甚至加个标点符号或空格),则输出值会发生巨大的变化(至少一半长的比特位变化)。

一句话概括哈希函数:将任意长度、类型或大小的字符串输入到哈希函数中,输出固定长度的字符串。

1.3 哈希函数存在的问题

如果使用普通的哈希哈希函数,对于基于区块链的版权保护系统而言,可能会有这样一种场景:原作者创作了数字作品之后,并没有将自己的作用上链,而是以其他方式公布到了网上,Evil可能在网上或者其他地方看到这个作品,然后在未经作者的应允的情况下,将作品以自己的身份上链。如果上链成功,此后,当原作者要求改变区块链上该作品的版权的时候,由于区块链的不可篡改性,这时候就难以解决。

因此,我们考虑引入变色龙哈希。

二、 变色龙哈希函数

变色龙哈希函数非常有意思。传统加密哈希函数是很难找到碰撞的。变色龙哈希函数可以人为设下一个“弱点”:掌握了它就能轻松找到碰撞。就好比一扇上锁的门,有对应的钥匙就能通过。

但是有谁吃饱了撑的故意设计弱化的哈希函数呢?这就要涉及到一个伴随因特网自始至终的信任问题,电子签名。传统电子签名过程是先用哈希函数把文件过一遍生成摘要,再用非对称加密里的私钥对摘要进行签名,这样其他人就能用对应的公钥验证文件的哈希有没有变化。如果哈希没变化,那么文件就没被更改。

但是这种设计有它的不足。假设小明和小红达成协议,小明将家族产业10%股份转让给小红。签了合同小名很担心啊,如果小红把这件事告诉别人怎么办?这时候就可以用变色龙函数进行签名。小红生成一个只有她才能找到碰撞的函数交给小明,小明再用这个函数来签电子文档。这下小红把签名后的文件丢给大家也没人相信她了。为什么呢?她掌握着哈希函数的弱点,可以随便生成哈希碰撞啊。她把10%股份改成99%都能保证哈希不会变,进而创造出新文件本来就是小明签的这种假象。因此出自小红之手的文件可信度为零。这个特性叫non-transferability,即两者之间达成的信任不能转到第三方。

“你知道的太多了” 此时此刻成了真正的包袱。

问题来了,小明抵赖怎么破?如果小明死死咬定转让10%股份是小红伪造,事实上只有1%呢?事实上小明也不能信口开河,他得提供对应的证据。证据就是哈希碰撞。假设双方达成的最初合同是A,而小红将其篡改成了相同哈希的A’,那么小明看到A’这份伪证之后一定能拿出最早那个A来并表明A和A’形成哈希碰撞,否则A’就是真货了。因为正常情况下小明无论如何也找不到碰撞,他就不能抵赖。这个特性叫non-repudiation。

  • 首先, 变色龙签名具有不可传递性: 其合法性只能由签名者所指定的接收者来验证, 而其他任何人都不能确定该签名是由签名者所签的,还是由指定接收者伪造的.

  • 其次,变色龙签名具有不可伪造性: 对于一个伪造的变色龙签名,合法的签名者能够提供证据表明该伪造签名的不合法性.

  • 再者, 变色龙签名具有不可否认性: 对于合法的变色龙签名, 其签名者并不能提供此类证明以开脱责任.

既然变色龙签名能够同时提供不可否认性, 不可伪造性和不可传递性, 所以变色龙签名是一种比较理想的指定验证者签名.

构造变色龙签名的主要工具是变色龙哈希函数. 更具体地讲, 变色龙签名的构造遵循了著名的先哈希再签名的范例(hash-and-sign paradigm), 但是稍有不同.

也就是说, 用来计算消息摘要的是变色龙哈希函数, 而不是普通的哈希函数; 用来计算签名的则是一个安全的数字签名算法.

变色龙哈希函数是一种带陷门的抗碰撞哈希函数: 对于知道其陷门的用户来说, 寻找该哈希函数的碰撞是非常容易的; 而对于不知道其陷门的用户来说, 这种哈希函数与一个标准的哈希函数一样是抗碰撞的.

既然变色龙签名是作用到消息摘要的一个函数, 而此消息摘要又是一个变色龙哈希值, 且陷门属于指定接收者, 所以指定验证者可以把一个变色龙签名变成是其他消息的签名.

2.1 变色龙哈希函数定义

一个变色龙哈希函数由四个部分组成:cham_hash=(Setup,KeyGen,Hash,Forge)

  1. Setup(λ ):输入安全性参数λ ,输出公共参数p;

  2. KeyGen(p): 输入公共参数p,输出公私钥对(HK,CK),HK为公钥,CK为私钥,又称门限;

  3. Hash(HK,m,r):输入公钥HK,消息m和随机数r,输出变色龙的哈希值CH;

  4. Forge(CK,m,r,m’):输入私钥CK,消息m,随机数r,消息m’,输出另一个随机数r’,满足CH=Hash(HK,m,r)=Hash(HK,
    m’,r’)。

2.2 变色龙哈希函数算法

变色龙哈希函数具有4个主要的算法:

1)密钥生成算法C h _ G e n ( 1^ λ ) = ( p k , s k ) :给定一个安全常数λ ,输出变色龙哈希的公钥pk和私钥sk(陷门);

2)哈希生成算法C h _ H a s h ( p k , m , r ) = ( h , p ) :输入公钥pk 、随机数r 和任意消息m,生成哈希值h 和随机数p;

3)哈希验证算法Ch _ Ver ( pk , m , ( h , p ) ) :输入公钥pk、任意消息m 和哈希值h 、随机数p ,若( h , p )是正确的哈希值,则输出1,否则输出0;

4)哈希碰撞算法Ch _ Cld ( sk , m , m ′ , ( h , p ) ) :输入私钥sk (陷门)、消息m、新消息m ′ 和哈希值h、随机数p ,输出新随机数r ′
使得Ch _ Ver( pk , m , ( h, p ) , r ) = Ch _ Ver ( pk , m ′ , ( h , p ) ,r ′ )=1。

2.3 变色龙哈希安全需求

  • 抗碰撞:不存在一个有效算法在输入公钥HK,可以找到(m1,r1)和(m2,r2),其中m1≠m2 ,满足Hash(HK,m1,r1)=
    Hash(HK,m2,r2)
  • 陷门碰撞:存在有效算法,在输入门限CK后,对于任意的m1,r1,给定m2,可以计算出r2,满足Hash(HK,m1,r1)=
    Hash(HK,m2,r2)。
  • 语义安全:对于任意消息m1 m2,Hash(HK,m1,r1)与
    Hash(HK,m2,r2)的概率分布是不可区分的,特别的,当r为随机选择时,从Hash(HK,m,r)无法得到关于m的任何信息。

2.4 变色龙哈希函数分析

相比于传统哈希函数的难以找到碰撞,变色龙哈希可以人为的设一个“弱点”或者“后门”:掌握了这个后门就可以轻松的找到哈希碰撞。

这种设计在一定程度上破坏了哈希函数的两个碰撞性的特点,同时,也破坏了基于哈希函数的区块链的不可篡改的特性,但是也扩大了区块链的应用场景,而且对于不知道门限的普通用户来说,想要找到碰撞依然是不可行的,也就是说,变色龙哈希的安全性也是可以保障的,对于持有“后门”的管理人员,如果其随意篡改区块,也是可以通过验证两个区块的哈希是否相等来验证。

2.5 变色龙哈希函数构造

同传统的密码学算法一样,变色龙哈希也都是基于数学难题的,比如:

  • 基于因式分解的变色龙哈希函数的有效构造
  • 基于格的变色龙哈希函数的构造
  • 基于离散对数的变色龙哈希函数的构造

Hugo Krawczky 和 Tal Rabin 在2000年提出了变色龙哈希方案,具体方案描述如下:

变色龙哈希函数Chameleon Hash Functions相关推荐

  1. 哈希函数(Hash Functions - 散列函数)的基本介绍(SHA-2,SHA-256,MD-5,Scrypt,BCrypt等)

    Table of Contents 哈希函数的基本介绍(SHA-256,MD-5等) 为什么要使用哈希函数? 确定性地加扰数据 输入无关紧要,输出大小相同 它们如何工作? 免责声明 什么是MD5哈希? ...

  2. 变色龙哈希函数-区块链

    变色龙哈希调研 1. 调研背景 1.1哈希函数定义 哈希函数是一类具有以下特征的函数:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原 ...

  3. 密码学小知识(6):变色龙哈希函数(Chameleon Hash)

    本篇博文将介绍变色龙哈希函数. 在介绍变色龙哈希函数之前,我们先简单回顾一下经典的哈希函数,这样就能对比它们之间的差别. 文章目录预览 本篇博文将介绍变色龙哈希函数. 一.哈希函数 二.变色龙哈希函数 ...

  4. 散列函数(哈希函数,Hash Function)

    说明 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术.在理想情况下,查找的期望时间为O(1). 简单的说,hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数.输 ...

  5. 哈希函数(Hash Function)

    哈希函数(散列函数) 说明 应用 解释 Q:冲突是不是可以避免的? hash函数的构造准则:简单.均匀 hash函数的构造方法: 处理冲突的方法: 参考 说明 散列的概念属于查找,它不以关键字的比较为 ...

  6. 哈希函数(hash函数)

    hash,-般译为"散列",也可以直接音译为"哈希",是对输入的任意长度(又称预映射),通过哈希算法,转换成固定长度的哈希值输出.这种转换是一种压缩映射,即,哈 ...

  7. python哈希函数_python hash函数

    hash计算可以把任意数据变成一段"摘要",只要这段数据中的任何字节变化都会引起hash值非常大的变化,所以hash值可以用来检查数据有没有被篡改.hash计算的另外一个特性是ha ...

  8. Hash+哈希+哈希函数

    Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...

  9. 密码学哈希函数_哈希函数在密码学中的应用

    密码学哈希函数 A Hash Function is a mathematical function that converts a numerical value into another comp ...

最新文章

  1. 奶牛异或(01字典树)
  2. 大型电商网站详情页是如何支撑亿级流量访问的?
  3. 亚洲诚信带你玩转[2018国家网络安全宣传周]上海地区活动!
  4. 聊聊技术、利基市场、激情与梦想
  5. 使用Capture画原理图
  6. Minionda3环境的迁移
  7. Unsupported major.minor version 51.0(jdk版本错误)
  8. 记住北京历史上的灾难
  9. fcntl函数(网络编程会用)
  10. python flask Blueprint搭建
  11. 如何在Linux上提高文本的搜索效率
  12. biztalk BLogs
  13. -------------初识----------动态规划。--------------------------------------------
  14. 【C51单片机】6-ESP8266——wifi模块联网、AT指令
  15. mysql中的聚集索引(聚簇索引)、非聚集索引、稀疏索引、稠密索引
  16. 手机联系人误删怎么恢复?如何找回被删除的电话联系人
  17. 在OpenCV里实现直方图反向投影算法
  18. 手机照片删除了还能找回来吗?高手就是高手,精彩
  19. c语言教程——简单易懂
  20. python根据IP判断地理位置

热门文章

  1. 软件众包平台排行最新
  2. 简单介绍盒子模型的原理以及用法
  3. android拒绝服务教程,[转帖][转帖]通用型安卓拒绝服务漏洞报告检测工具
  4. 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)
  5. 53、Gif 控件GifView 的使用,播放gif图片
  6. Access SQL语法(查询/插入/删除/连接/修改)
  7. 虚假可信根证书木马处理
  8. Servlet3.0实现的简单mvc框架
  9. 基于Echarts的销售企业经营数据分析-帕累托
  10. http(s)代理服务器与搭建