第五十一个知识点:什么是基于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免费提供的这个数据库服 ...
随机推荐
- 【Android】修改快捷键,前一步默认是Ctrl + Z,修改后一步
我已经忘了,我什么时候已经习惯前一步是Ctrl + Z,后一步是Ctrl + Y Android Studio默认前一步快捷键是相同的,但是后一步就不是了 Ctrl + Y变成删除一行代码,就是下图D ...
- java设计模式—Decorator装饰者模式
一.装饰者模式 1.定义及作用 该模式以对客户端透明的方式扩展对象的功能. 2.涉及角色 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类. 具体构件角色:将要被附加功能的类,实现抽象 ...
- vue-cli安装记录
docker安装 docker network rm mydkdocker network create --subnet=192.168.1.0/24 mydk cat centos-7-x86_ ...
- 数据库系统相关SQL
杀进程 查出所有被锁住的表 select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINI ...
- jdk1.7源码之-hashMap源码解析
背景: 笔者最近这几天在思考,为什么要学习设计模式,学些设计模式无非是提高自己的开发技能,但是通过这一段时间来看,其实我也学习了一些设计模式,但是都是一些demo,没有具体的例子,学习起来不深刻,所以 ...
- 【C/C++】小红的字符串 / 中兴捧月
考试的时候想复杂了,其实直接一边写放进set里去重就可以了 很有意思 自己的理解就是cpp的map+set或者就是set可以完成大多数java的hashset操作 链接:https://ac.nowc ...
- 【JavaWeb】【MySQL】【edu01】jdbc.properties配置文件的编写
前提准备 导入 mysql-connector-java-版本号 的jar包 下面为大家提供几个jar包下载地址 点击进入下载界面 >>推荐 MySQL官方 多版本选择 点击进入下载界面 ...
- 【C#】【MySQL】C#连接MySQL数据库(三)登陆注册代码
项目结构 项目代码 WebForm_Login.aspx <%@ Page Language="C#" AutoEventWireup="true" Co ...
- SQL->Python->PySpark计算KS,AUC及PSI
KS,AUC 和 PSI 是风控算法中最常计算的几个指标,本文记录了多种工具计算这些指标的方法. 生成本文的测试数据: import pandas as pd import numpy as np i ...
- thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
最近项目中遇到引入PHPExcel第三方类库 但是下载的phpExcel类没有命名空间,而且所有接口文件的命名都是以.php结尾 而不是tp中的.class.php 解决办法很简单:在引入没有采用命 ...