第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案
第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案
在公钥密码学中,如果Alice想要给Bob发送一条消息,她需要Bob的公钥,一般来说公钥都很长,就像一个随机的字符串。
假设Alice可以不用公钥而是使用Bob的名字或者邮件地址作为他的公钥。实际的来说,这会很方便,Alice不必记住很长的公钥,也不用验证这个类似于随机串的公钥是否真的属于Bob。为了让这变得容易,我们需要基于身份的加密(IBE)。
在IBE中,存在一个实体叫做私钥生成器(PKG)。PKG能够通过Bob的ID和一个主密钥来计算Bob的私钥。一旦Bob已经对PKG认证过自己,那么他就可以向PKG请求他的私钥,一旦他获得了自己的私钥,那么他就可以对任何通过他的ID加密的消息进行解密。
但是这里有一个问题,通过主密钥,PKG可以对任何ID都生成一个私钥,因此PKG可以对任何消息进行解密,这叫做密钥托管,意思就是说你必须信任PKG不会读取你的消息或者你不在乎PKG会读取你的消息。在公司中,高级管理者一般都有权限读取你的邮件,因此IBE方案在这种情况下是很恰当的。
正式的,一个IBE方案包含四个算法:setup,extract,encrypt和decrypt。
setup:采用一个安全参数然后输出主密钥和系统参数,例如明文和密文的消息空间。
Extract:接收一个ID和主密钥,然后返回一个针对ID的私钥。
Encrypt:接收一个消息和ID,然后返回密文。
Decrypt:接收一个密文和公钥,然后返回一个消息。
Boneh和Franklin在2003年给出了一个IBE方案。他们证明了,在一个类似CDH问题的假设情况下,他们的方案在随机oracle模型中是IND-ID-CCA安全的。这意味着任何攻击者在多项式时间内赢得下面的游戏的概率最多比1/2多可忽略的概率。
首先,攻击者:
- 能够对任何ID请求一个私钥。
- 能够对任何ID的任何密文进行解密。
然后攻击者选择两个消息\(m_0\)和\(m_1\)和一个之前没有被问询过的ID---\(ID^*\)。攻击者会收到一个基于\(ID^{*}\)对消息\(m_b\)加密的消息\(c\),其中\(b \in {0,1}\)是随机选择的。然后攻击者:
- 能对任何不是\(ID^{*}\)的ID请求私钥。
- 能够除了\((c*,ID^{*})\)之外的对进行解密。
最后攻击者输出一位\(b^{'}\),如果\(b^{'}=b\),那么我们说攻击者赢得了游戏。
Boneh和Franklin给出的方案依赖于一个非退化的双线性映射$e:G_1 \times G_1 \rightarrow G_2 \(,其中\)G_1\(的阶是\)q$ ,我们将运算写成加法,而\(G_2\)的阶也是\(q\),我们将运算写成乘法。他们通过椭圆曲线上的Weil对对这个映射进行实例化,但是我们这里省略这个细节。所有双线性性质就是\(e(aP,bQ)=e(P,Q)^{ab}\),其中\(a,b \in Z_q\)。
没有足够的空间来描述所有的方案的细节,但是主密钥是一个非零的\(s \in Z_q\),然后ID的私钥是\(s \cdot H(ID)\),其中\(H\)是一个将比特流映射到\(G_1\)中元素的Hash函数。有两个公共参数\(P\)和\(P_{pub} = s \cdot P \in G_1\)。
为了加密消息\(m\),我们能选择一个随机的串\(\sigma\),然后将\(m\)和随机的串进行异或,得到密文\(C_m\)。然后\(m\)和\(\sigma\)一起进行hash运算获得一个\(Z_q\)中的非零元素\(r\)。最后我们能计算出对\(e(H(ID),P_{pub]})^r\)。然后hash得到的值与\(\sigma\)进行异或,得到\(c_{ID}\)。最后三元组\((r \cdot P,c_{ID},c_m)\)就是密文。
已经获得了私钥\(d = s \cdot H(ID)\)的Bob可以解密密文\((U,V,W)\):首先计算\(e(d,U)\),通过双线性的性质这个值等于\(e(H(ID),P_{pub})^r\)。因此将这个值和\(V\)进行异或得到\(\sigma\)。最后异或\(W\)得到消息\(m\)。最后一步是检查预定信息\(U = r \cdot P\),等式成立表明这就是预期的信息。
第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案的更多相关文章
- Gradle 1.12用户指南翻译——第五十一章. 发布构件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
- 第三十一个知识点:Game Hopping证明
第三十一个知识点:Game Hopping证明 关于安全证明, 目前主流的方法有安全归约证明 (由 single game 实现) 和 Game Hopping (由 game sequence 实现 ...
- Java进阶(五十一)Could not create the view: An unexpected exception was thrown
Java进阶(五十一)Could not create the view: An unexpected exception was thrown 今天打开Myeclipse10的时候,发现server ...
- Java进阶(五十一)必须记住的Myeclipse快捷键
Java进阶(五十一)必须记住的Myeclipse快捷键 在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当 ...
- SQL注入之Sqli-labs系列第五十关,第五十一关,第五十二关,第五十三关(ORDER BY堆叠注入)
0x1第五十关 源码中使用的mysqli_multi_query()函数,而之前使用的是mysqli_query(),区别在于mysqli_multi_query()可以执行多个sql语句,而mysq ...
- 第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中
第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中 1.爬虫文件 dispatcher.connect()信号分发器,第一个参数信 ...
- “全栈2019”Java第五十一章:继承与final关键字详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 《剑指Offer》题五十一~题六十
五十一.数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.例如,在数组{7, 5, 6, 4}中,一共存 ...
- 孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库
孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服 ...
随机推荐
- springcloud报Load balancer does not have available server for client: PROVIDER-SERVER
1.后台报错截图 这个的意思就是:负载均衡服务器中没有这个我自定义的PROVIDER-SERVER.开始我以为是Ribbon的原因,所以去折腾了一下,但是:最后不断往前推到之后发现本质是:在注册中心E ...
- 零基础学习java------day5------do....while循环、嵌套、方法(函数)
1 do...while循环 格式 初始化语句; do { 循环体语句; 控制条件语句; }while(判断条件语句); 流程: 先执行初始化语句 再执行循环体语句 再执行条件控制语句 再做条件的判 ...
- Gradle安装与配置
一.Gradle安装 1.Gradle安装 (1)先安装JDK/JRE (2)Gradle下载官网 Gradle官网 (3)解压安装包到想安装到的目录.如D:\java\gradle-5.2.1 (4 ...
- 数组实现堆栈——Java实现
1 package struct; 2 3 4 //接口 5 interface IArrayStack{ 6 //栈的容量 7 int length(); 8 //栈中元素个数(栈大小) 9 int ...
- spring注解-属性
一.@Value 基本数值 可以写SpEL: #{} 可以写${}取出配置文件[properties]中的值(在运行环境变量里面的值) @Value("张三") private S ...
- mysql锁相关讲解及其应用
一.mysql的锁类型 了解Mysql的表级锁 了解Mysql的行级锁 (1) 共享/排它锁(Shared and Exclusive Locks) 共享锁和排他锁是InnoDB引擎实现的标准行级别锁 ...
- 时间同步之pxe,cobbler,dhcp
ntpdate 时间同步 同步方法 ntpdate ntp服务器IP 例: ntpdate 192.168.37.11 自动运行同步时间脚本 crontab -e * */1 * * * /usr/s ...
- linux 加密安全之AWK
密钥 密钥一般是一串字符串或数字,在加密或者解密时传递给加密或者解密算法,以使算法能够正确对明文加密或密文解密. 加密算法 已知的加密算法有对称和非对称加密,也就是说你想进行加解密操作的时候需要具备密 ...
- XML(可拓展标记语言)基本概念
一.XML文档基本结构 <?xml version="1.0" encoding="utf-8"?> <students> <st ...
- 【经验分享】win10 cmake 构建 Tengine 工程
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本教程详细记录了在 win10 环境中 ...