第五十一个知识点:什么是基于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. ORACLE 按逗号拆分字符串为多行

    with t as (select '1,2,3,10,11,12' a from dual) select substr(a, decode(level - 1, 0, 0, instr(a, ', ...

  2. 【Linux】【Services】【Project】Haproxy Keepalived Postfix实现邮件网关Cluster

    1. 简介: 1.1. 背景:公司使用exchange服务器作为邮件服务器,但是使用Postfix作为邮件网关实现病毒检测,内容过滤,反垃圾邮件等功能.原来的架构非常简单,只有两台机器,一个负责进公司 ...

  3. ssm动态查询向前台传json

    1.数据协议层 public User selectById(Integer id);//通过id值查询用户 2.数据层 <select id="selectById" re ...

  4. markDodn使用技巧

    markdown 标题 一级标题书写语法: 井符(#)加上空格加上标题名称 二级标题书写语法: 两个井符(#)加上空格加上标题名称 三级标题书写语法: 三个井符(#)加上空格加上标题名称 字体 字体加 ...

  5. .NET6使用DOCFX自动生成开发文档

    本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...

  6. seata服务端和客户端配置(使用nacos进行注册发现,使用mysql进行数据持久化),以及过程中可能会出现的问题与解决方案

    seata服务端和客户端配置(使用nacos进行注册发现,使用mysql进行数据持久化),以及过程中可能会出现的问题与解决方案 说明: 之所以只用nacos进行了注册与发现,因为seata使用naco ...

  7. [BUUCTF]PWN——mrctf2020_easyoverflow

    mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...

  8. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

  9. vue3官网介绍,安装,创建一个vue实例

    前言:这一章主要是vue的介绍.安装.以及如何创建一个vue实例. 一.vue介绍 vue3中文官网:建议先自己看官网. https://v3.cn.vuejs.org/ vue是渐进式框架,渐进式指 ...

  10. CF60A Where Are My Flakes? 题解

    Content 有人发现他的麦片不见了,原来是室友把它藏在了 \(n\) 个盒子中的一个,另外还有 \(m\) 个提示,有两种: \(\texttt{To the left of }x\):麦片在第 ...