第五十一个知识点:什么是基于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方案的更多相关文章

  1. Gradle 1.12用户指南翻译——第五十一章. 发布构件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

  2. 第三十一个知识点:Game Hopping证明

    第三十一个知识点:Game Hopping证明 关于安全证明, 目前主流的方法有安全归约证明 (由 single game 实现) 和 Game Hopping (由 game sequence 实现 ...

  3. Java进阶(五十一)Could not create the view: An unexpected exception was thrown

    Java进阶(五十一)Could not create the view: An unexpected exception was thrown 今天打开Myeclipse10的时候,发现server ...

  4. Java进阶(五十一)必须记住的Myeclipse快捷键

    Java进阶(五十一)必须记住的Myeclipse快捷键 在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当 ...

  5. SQL注入之Sqli-labs系列第五十关,第五十一关,第五十二关,第五十三关(ORDER BY堆叠注入)

    0x1第五十关 源码中使用的mysqli_multi_query()函数,而之前使用的是mysqli_query(),区别在于mysqli_multi_query()可以执行多个sql语句,而mysq ...

  6. 第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中

    第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中 1.爬虫文件 dispatcher.connect()信号分发器,第一个参数信 ...

  7. “全栈2019”Java第五十一章:继承与final关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 《剑指Offer》题五十一~题六十

    五十一.数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.例如,在数组{7, 5, 6, 4}中,一共存 ...

  9. 孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库

    孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服 ...

随机推荐

  1. 学习java 7.25

    学习内容: 特殊边框 1. TitledBorder:它的作用并不是直接为其他组件添加边框,而是为其他边框设置标题,创建该类的对象时,需要传入一个其他的Border对象; 2. CompoundBor ...

  2. A Child's History of England.19

    The King was at first as blind and stubborn as kings usually have been whensoever [每当] they have bee ...

  3. 关于java中的安全管理器

    最近再查看java的源码的时候看见了这一类代码 final SecurityManager sm = System.getSecurityManager(); 想要了解这个是为了做什么,查看资料之后发 ...

  4. 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式

    0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...

  5. Sharding-JDBC 实现水平分表

    1.搭建环 (1) 技术: SpringBoot2.2.1+ MyBatisPlus + Sharding-JDBC + Druid 连接池(2)创建 SpringBoot 工程

  6. 【Linux】【Services】【Cache】使用Sentinel搭建高可用Redis

    1. 简介 1.1. 一些基础概念请参考 http://www.cnblogs.com/demonzk/p/7453494.html 1.2. 几种常用的集群方式. -- Redis Sentinel ...

  7. OceanBase 2.x体验:推荐用DBeaver工具连接数据库

    Original MQ4096 [OceanBase技术闲谈](javascript:void(0) 2020-01-15 OceanBase 2.x体验:推荐用DBeaver工具连接数据库 Ocea ...

  8. 【C/C++】二维数组的传参的方法/二维字符数组的声明,使用,输入,传参

    [问题] 定义了一个子函数,传参的内容是一个二维数组 编译提示错误 因为多维数组作为形参传入时,必须声明除第一位维外的确定值,否则系统无法编译(算不出偏移地址) [二维数组的传参] 方法一:形参为二维 ...

  9. netty系列之:性能为王!创建多路复用http2服务器

    目录 简介 多路复用的基础 多路复用在server端的使用 配置TLS处理器 配置clear text upgrade 总结 简介 在之前的文章中,我们提到了在netty的客户端通过使用Http2Fr ...

  10. 🔥🔥🔥Flutter 字节跳动穿山甲广告插件发布 - FlutterAds

    前言 Flutter 已成为目前最流行的跨平台框架之一,在近期的几个大版本的发布中都提到了 Flutter 版本 Google 广告插件 [google_mobile_ads] .对于"出海 ...