Replay
0 likes | 9 Vues
The 12th lesson in the series "Research Methodology of Public-Key Cryptography" delves into the fourth research paper focusing on surpassing existing cryptographic functionalities in a more intricate manner. The discussion spans from error detection to error correction, transitioning from static to dynamic systems, centralized to decentralized approaches, and personal involvement to authorization. The paper introduces innovative concepts like batch signature verification and blind signatures, addressing new challenges and proposing solutions to enhance security in cryptographic protocols.
E N D
公钥密码学研究方法论 第12课 Xiaohan Zhao 赵小涵 西安电子科技大学
内容回顾:第三篇论文 2/45 《公钥密码学研究方法论》第12课
Outline:密码学研究的第四篇论文(上) 密码学研究的第四篇论文——功能更详细地超越 • 第四篇论文 • 从出错到纠错 • 从静态到动态 • 从集权到分权 • 从亲为到授权 3/45 《公钥密码学研究方法论》第12课
第四篇论文 1/2 第一篇论文: 提出一个满足应用的新密码技术 第二篇论文:通过四大模型或设计起点实现超越 第三篇论文:从能到不能或从不能到能实现超越 第四篇论文 第四篇论文:对能和不能进行更详细地解析超越 4/45 《公钥密码学研究方法论》第12课
第四篇论文 2/2 说明:《Research Philosophy of Modern Cryptography》 里有不一样的逻辑,实现互补,辅助理解 5/45 《公钥密码学研究方法论》第12课
从出错到纠错 1/18 研究动机:在一些特殊应用里,本来合法用户可以 正常使用一些密码功能,但是现在出现了新的状况 (旧的密码技术没有考虑这种情况)。 一旦非法用 户跑过来参与捣蛋,那么会导致该密码技术一直出 错。 我们那该怎么办? 能不能通过更高级的密码技术纠正这类的错误? 6/45 《公钥密码学研究方法论》第12课
从出错到纠错 2/18 批量验证签名(Signatures with Batch Verification): 密钥算法:KeyGen(1^k) → (pk_i,sk_i) 签名算法:Sign(sk_i, m_i) → S^i_{m_i} 验证算法:Verify(pk_i, m_i, S^i_{m_i}) → T/F 批量验证:BVerify(pk_1, pk_2,....,pk_n, m_1,m_2,...,m_n S^1_{m_1},S^2_{m_2},....,S^n_{m_n}) → T/F 问题来了:假设一批签名有几个签名是无效的,那么批量验证算 法必然输出错误。为了应对这种情况,我们能不能构造一个高效 的算法快速找出那些无效的签名呢? 7/45 《公钥密码学研究方法论》第12课
从出错到纠错 3/18 新批量验证签名(Signatures with Batch Verification): 密钥算法:KeyGen(1^k) → (pk_i,sk_i) 签名算法:Sign(sk_i, m_i) → S^i_{m_i} 验证算法:Verify(pk_i, m_i, S^i_{m_i}) → T/F 批量验证:BVerify(pk_1, pk_2,....,pk_n, m_1,m_2,...,m_n S^1_{m_1},S^2_{m_2},....,S^n_{m_n}) → T/F 挑错算法:Find(pk_1, pk_2,....,pk_n, m_1,m_2,...,m_n S^1_{m_1},S^2_{m_2},....,S^n_{m_n}) → I 解决方法:有一个挑错算法可以输出签名为“无效”对应的index集 合, 比如 I={1,3,5} 8/45 《公钥密码学研究方法论》第12课
从出错到纠错 4/18 新批量验证签名(Signatures with Batch Verification): 密钥算法:KeyGen(1^k) → (pk_i,sk_i) 签名算法:Sign(sk_i, m_i) → S^i_{m_i} 验证算法:Verify(pk_i, m_i, S^i_{m_i}) → T/F 批量验证:BVerify(pk_1, pk_2,....,pk_n, m_1,m_2,...,m_n S^1_{m_1},S^2_{m_2},....,S^n_{m_n}) → T/F 挑错算法:Find(pk_1, pk_2,....,pk_n, m_1,m_2,...,m_n S^1_{m_1},S^2_{m_2},....,S^n_{m_n}) → I 问题又来了: 从旧到新,敌人多了什么新的攻击目标? 9/45 《公钥密码学研究方法论》第12课
从出错到纠错 5/18 盲签名(Blind Signatures): 密钥算法:KeyGen(1^k) → (pk,sk) 签名协议:Sign([sk], [m,pk]) → S_m 验证算法:Verify(pk, m, S_m) → T/F 问题来了:签名接收者可以和签名计算者交互从而获得 盲化后消息(签名者不知道消息m)的签名,然后用于 匿名的交易支付。假如有人正在利用盲签名的技术进行 洗钱犯罪活动,我们能不能构造特殊的方案,使得人类 可信任法院可以追踪匿名交易?即能够确认交易支付方 (签名接收者)的身份? 10/45 《公钥密码学研究方法论》第12课
从出错到纠错 6/18 新盲签名(Blind Signatures): 密钥算法:KeyGen(1^k) → (pk,sk) 签名协议:Sign([pk_F, ID, sk], [pk_F, ID, m,pk]) → (R_ID, S_m) 验证算法:Verify(pk, m, S_m) → T/F 打开算法:Open(sk_F, pk, R_ID, S_m) → ID 解决方法: 签名协议生成签名的时候,ID(接收者身份信息) 被嵌入在了协议里面。运行之后,签名者得到了R_ID, 而接收者 得到S_m。当打开算法输入匹配的R_ID和S_m之后,可信任第三 方可以通过sk_F打开ID,追踪到签名的接收者身份信息。 11/45 《公钥密码学研究方法论》第12课
从出错到纠错 7/18 新盲签名(Blind Signatures): 密钥算法:KeyGen(1^k) → (pk,sk) 签名协议:Sign([pk_F, ID, sk], [pk_F, ID, m,pk]) → (R_ID, S_m) 验证算法:Verify(pk, m, S_m) → T/F 打开算法:Open(sk_F, pk, R_ID, S_m) → ID 问题又来了: 从旧到新,敌人多了什么新的攻击目标? 12/45 《公钥密码学研究方法论》第12课
从出错到纠错 8/18 门限签名(Threshold Signatures): 密钥算法:KeyGen(1^k,n,t) → (pk_T,sk_1,sk_2,..,sk_n) 签名算法:Sign(sk_i, m) → S^i_m 合成算法:Comb(pk_T, {S^i_m: i\in T}) → S_m 验证算法:Verify(pk_T, m, S_m) → T/F 问题来了:在(n,t)门限签名里,签名接收者可以通过t份由子私钥 共享者对消息m的子签名恢复出私钥sk_T对消息m的签名。假如 有一部分私钥共享者被策反故意破坏正常签名秩序,签名接收者 现在收到t+2份子签名,但是这些子签名中有2份是无效的。如果 签名接收者不能判断哪些子签名是无效的,那么就难以得到正确 的最终签名。为了应对这种情况,我们能不能构造特殊的方案, 使得签名接收者在有人扰乱的情况下仍然可以恢复出完整的签名 ? 13/45 《公钥密码学研究方法论》第12课
从出错到纠错 9/18 新门限签名(Threshold Signatures): 密钥算法:KeyGen(1^k,n,t) → (pk_T,sk_1,sk_2,..,sk_n) 签名算法:Sign(sk_i, m) → S^i_m 确认算法:Confirm(pk_T, i, m, S^i_m) → T/F 合成算法:Comb(pk_T, {S^i_m: i\in T}) → S_m 验证算法:Verify(pk_T, m, S_m) → T/F 解决方法: 多了一个算法可以验证每一个子签名是否正确。而 且,这个多出的算法看不出有什么新的安全问题。 14/45 《公钥密码学研究方法论》第12课
从出错到纠错 10/18 群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → i/⊥ 问题来了:任何组成员都可以代表组对任意消息完成群签名的计 算。假如有一个叫小黑的组成员被离间策反了,有人打报告通知 了组管理员。为了应对这种情况,我们能不能构造方案,允许组 管理员把小黑踢出去?这种踢人的行为叫“撤销(Revocation)” ,是一个非常流行的研究动机。 15/45 《公钥密码学研究方法论》第12课
从出错到纠错 11/18 新群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 撤销算法:Revoke(tsk, RL_old, i) → RL_new 签名算法:Sign(gsk_i,RL_new, m) → S_m 验证算法:Verify(gpk, RL_new, m, S_m) → T/F 追踪算法:Open(tsk, m, S_m) → i/⊥ 解决方法: 多了一个算法可以进行撤销,得到一个revocation list。 这个 list只能是时时更新。在这个算法里,签名和验证都需要用 到这个最新的list。这种定义的好处是gpk不用每次都需要更新。 16/45 《公钥密码学研究方法论》第12课
从出错到纠错 12/18 新群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 撤销算法:Revoke(tsk, RL_old, i) → RL_new 签名算法:Sign(gsk_i,RL_new, m) → S_m 验证算法:Verify(gpk, RL_new, m, S_m) → T/F 追踪算法:Open(tsk, m, S_m) → i/⊥ 问题又来了: 和之前的group signatures的定义相比,为了能伪造 一个有效的群签名,敌人在这里允许额外知道什么? 17/45 《公钥密码学研究方法论》第12课
从出错到纠错 13/18 群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → i/⊥ 第二个问题来了:能打开一个群签名并看到签名者身份的只能是 组管理员。假如组成员小黑对一个有误导性的八卦消息m完成了 群签名,有间银行的全体工作人员要求把这个签名者的身份揪出 来并予以处罚,但是组管理员老马刚好在度假,暂时不处理工作 问题。为了应对这种情况,我们能不能构造一个特殊的方案,允 许无辜的组成员小白可以自证清白? 18/45 《公钥密码学研究方法论》第12课
从出错到纠错 14/18 新+群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, m, S_m) → T/F 证明算法:Prove(gsk_j, m, S_m) → Σ_m 清白算法:PVerify(gpk, m, S_m, j, Σ_m) → T/F 追踪算法:Open(tsk, m, S_m) → i/⊥ 第二个解决方法: 多了两个算法。第一个允许用户gsk_j 完成自 我证明,计算出一个公开的证据Σ_m。第二个算法允许所有用户 验证这个不是由index j 这个组成员计算的。 19/45 《公钥密码学研究方法论》第12课
从出错到纠错 15/18 新+群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, m, S_m) → T/F 证明算法:Prove(gsk_j, m, S_m) → Σ_m 清白算法:PVerify(gpk, m, S_m, j, Σ_m) → T/F 追踪算法:Open(tsk, m, S_m) → i/⊥ 第二个问题又来了: 在这个新定义里,敌人又有什么样新的攻 击目标? 20/45 《公钥密码学研究方法论》第12课
从出错到纠错 16/18 属性签名(Attribute-Based Signatures): 设置算法:Setup(1^k) → (mpk,msk) 密钥算法:KeyGen(msk, A)→ d_A, where pk=A 签名算法:Sign(A, d_A, f, m) → S_f iff f(A)=1 验证算法:Verify(mpk, m, f, S_f) → T/F 问题来了:验证者只能从签名中看到签名者身份的部分属性信息 ,如“银行职业”(上述算法里就是f),但无法确认谁是真正的签名 者。假如小黑被策反了,然后利用ABS散布谣言消息m,此时, 拥有相同属性的其他员工(符合身份信息f)的清白受到了质疑 。为了应对这种情况,我们能不能构造特殊的方案,使得超级管 理员可以通过该签名揪出真正的签名者?这种找人的行为叫“追 踪(Tracing)”,它借鉴了群签名的功能。 21/45 《公钥密码学研究方法论》第12课
从出错到纠错 17/18 新属性签名(Attribute-Based Signatures): 设置算法:Setup(1^k) → (mpk,msk) 密钥算法:KeyGen(msk, ID, A)→ d_A, where pk=A 签名算法:Sign(A, d_A, f, m) → S_f iff f(A)=1 验证算法:Verify(mpk, m, f, S_f) → T/F 追踪算法:Trace(msk, m, f, S_f) → ID/⊥ 解决方法:管理员private key generator在计算d_A的时候把d_A用 户的ID嵌在了私钥里。签名的时候ID仍然保留在S_f里,但只能 由管理员通过msk打开。 22/45 《公钥密码学研究方法论》第12课
从出错到纠错 18/18 新属性签名(Attribute-Based Signatures): 设置算法:Setup(1^k) → (mpk,msk) 密钥算法:KeyGen(msk, ID, A)→ d_A, where pk=A 签名算法:Sign(A, d_A, f, m) → S_f iff f(A)=1 验证算法:Verify(mpk, m, f, S_f) → T/F 追踪算法:Trace(msk, m, f, S_f) → ID/⊥ 问题又来了:从新到旧,多了什么安全需要考虑的? 23/45 《公钥密码学研究方法论》第12课
从静态到动态 1/7 研究动机:动态的形象比喻是盖房子时不需要等到 所有材料到齐才能开工,而是材料运输和盖房可以 同时进行。更新的目的是为了适应新应用和提高安 全性。 本次的功能升级涉及两个关键词:可动态(Dynamic) 和可更新(Updatable)。前者指的是某种计算可以 动态化(有先有后,不必一起),后者指的是某种 对象可以更新。 24/45 《公钥密码学研究方法论》第12课
从静态到动态 2/7 群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk,gsk_1, gsk_2, ...., gsk_n, tsk) 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → i/⊥ 问题来了:在这种签名技术里,组管理员选择组成员并创建 组。但是,在产生密钥(组公钥,组管理员的追踪私钥以及 组成员的组私钥)时,必须已经提前定好组成员而且不可更 改吗?假如目前现有的方案是这样的,那我们能不能构造出 更好的方案允许组管理员后期增加新成员? 25/45 《公钥密码学研究方法论》第12课
从静态到动态 3/7 新群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk, tsk) 参与算法:Join(tsk, ID_i) → gsk_i 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → ID_i/⊥ 解决方法:密钥算法只产生给组管理员用的。当某个 ID作为组成员要参与时,计算对应的组私钥。可以看 成密钥算法分离成2个算法。 26/45 《公钥密码学研究方法论》第12课
从静态到动态 4/7 属性签名(Attribute-Based Signatures): 设置算法:Setup(1^k) → (mpk,msk) 密钥算法:KeyGen(msk, A)→ d_A, where pk=A 签名算法:Sign(A, d_A, f, m) → S_f iff f(A)=1 验证算法:Verify(mpk, m, f, S_f) → T/F 问题来了:在这种签名技术里,每一位用户的公钥是一个属 性集合A,私钥是通过该主公钥和主私钥msk计算得来的。在 生成主公钥对(mpk,msk)时,超级管理员(PKG)是否必须提 前把所有的属性定下来?比如,可以允许后期添加新属性吗? 假如目前现有的方案是这样的,那我们能不能构造出更好的 方案允许超级管理员后期增加新属性? 27/45 《公钥密码学研究方法论》第12课
从静态到动态 5/7 属性签名(Attribute-Based Signatures): 设置算法:Setup(1^k) → (mpk,msk) 密钥算法:KeyGen(msk, A)→ d_A, where pk=A 签名算法:Sign(A, d_A, f, m) → S_f iff f(A)=1 验证算法:Verify(mpk, m, f, S_f) → T/F 解决方法:如果每一个属性att 在设置mpk时需要用到一 个group element h 作为att 的代表元素,那么mpk的设置 必须提前固定下来所有的attributes。 避免这种情况就行。 28/45 《公钥密码学研究方法论》第12课
从静态到动态 6/7 29/45 《公钥密码学研究方法论》第12课
从静态到动态 7/7 30/45 《公钥密码学研究方法论》第12课
从集权到分权 1/6 在密码学领域,拥有私钥就意味着拥有权力,而有权力就 有被策反的可能。本次升级考虑如何通过分权降低私钥拥 有者被策反后带来的风险,从而提高方案应用的安全性。 从集权到分权最经典的的功能升级是门限签名(Threshold Signatures)。这个签名技术允许把一个私钥以秘密共享的 方式分成多个子私钥。这是一种对称类的分权,因为每一 个子私钥都可以用于子签名的计算,且每个子私钥的功能 和权力相同。学术圈也存在着非对称类的分权,即子私钥 用于不同的计算功能。 31/45 《公钥密码学研究方法论》第12课
从集权到分权 2/6 群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk, tsk) 参与算法:Join(tsk, ID_i) → gsk_i 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → ID_i/⊥ 问题来了: 这个定义里的组管理员既负责拉人入群又负责追踪。组管 理员可以行使两个权力:第一个权力是批准(Grant)谁加入组;第二 个权力是打开(Open)签名看到签名者的身份。 那么,我们能不能把 组管理员的这两个权力分到两个组管理员手上?第一个管理员负责审 核组成员的加入,第二个组管理员负责追踪签名者的身份,两者谁也 影响不了谁。 32/45 《公钥密码学研究方法论》第12课
从集权到分权 3/6 新群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk, jsk, tsk) 参与算法:Join(jsk, ID_i) → gsk_i 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → ID_i/⊥ 解决方法: 产生2个不一样的key就行。当然了,从旧到新,对应 的解决方法不一定很容易构造解决。 33/45 《公钥密码学研究方法论》第12课
从集权到分权 4/6 新群签名(Group Signatures): 密钥算法:KeyGen(1^k,n) → (gpk, jsk, tsk) 参与算法:Join(jsk, ID_i) → gsk_i 签名算法:Sign(gsk_i, m) → S_m 验证算法:Verify(gpk, S_m) → T/F 追踪算法:Open(tsk, S_m) → ID_i/⊥ 问题又来了: 从一个key到两个key,多了什么新的安全问题? 34/45 《公钥密码学研究方法论》第12课
从集权到分权 5/6 35/45 《公钥密码学研究方法论》第12课
从集权到分权 6/6 36/45 《公钥密码学研究方法论》第12课
从亲为到授权 1/8 在密码学领域,能不能把需要用到私钥的计算能力 授权给某一方,但又不需要直接给私钥?(直接给 私钥就太没技术含量了) 比如,只能由董事长的计算,老马授权秘书来钱。 前面介绍的代理签名(Proxy Signatures)就属于该研 究系列。 凡是需要用到私钥才能完成的都能有“代理”的故事 37/45 《公钥密码学研究方法论》第12课
从亲为到授权 2/8 不可否认签名 (Undeniable Signatures) 密钥算法:KeyGen(1^k) → (pk,sk) 签名算法:Sign(sk, m) → S_m 确认协议:Confirm([sk,m] [pk, m, S_m]) → T/F 否决协议:Deny([sk,m] [pk, m, F_m]) → T/F 问题来了:在不可否认签名里,小明验证签名需要得到签名者老 马的帮助才可以完成。假如老马正在度假无法参与签名验证帮助, 为了应对这种情况,我们能不能构造特殊的方案,允许老马指定 一些人(比如秘书来钱)帮助验证? 38/45 《公钥密码学研究方法论》第12课
从亲为到授权 3/8 新不可否认签名 (Undeniable Signatures) 密钥算法:KeyGen(1^k) → (pk,sk) 签名算法:Sign(pk_D, sk, m) → S_m 确认协议:Confirm([sk_D,m] [pk, pk_D, m, S_m]) → T/F 否决协议:Deny([sk_D,m] [pk, pk_D, m, F_m]) → T/F 解决方法:假如(pk_D, sk_D)是指定的一方(来钱)。 在这个定义里,签名由sk完成,但是另外两个协议由 sk_D完成。 39/45 《公钥密码学研究方法论》第12课
从亲为到授权 4/8 新不可否认签名 (Undeniable Signatures) 密钥算法:KeyGen(1^k) → (pk,sk) 签名算法:Sign(pk_D, sk, m) → S_m 确认协议:Confirm([sk_D,m] [pk, pk_D, m, S_m]) → T/F 否决协议:Deny([sk_D,m] [pk, pk_D, m, F_m]) → T/F 问题又来了:从旧到新,有没有什么新的安全问题需要 我们考虑和注意的? 40/45 《公钥密码学研究方法论》第12课
从亲为到授权 5/8 公钥加密 (Publi-Key Encryption) 密钥算法:KeyGen(1^k) → (pk,sk) 加密算法:Enc(pk, m) → CT_m 解密算法:Dec(sk, CT) → m/⊥ 问题来了:当用户通过公钥加密把数据存储在云上面时,用户想 搜索某些数据(类似baidu, google搜索)时,云服务器不能为用 户服务,因为数据都被加密了。有一个做法是用户把私钥告诉云 服务器,但是这个危害太大——用户只想让云服务器帮忙搜索, 而不是看到数据。 41/45 《公钥密码学研究方法论》第12课
从亲为到授权 6/8 新公钥加密 (Publi-Key Encryption) 密钥算法:KeyGen(1^k) → (pk,sk) 加密算法:Enc(pk, m, w) → CT_m 符记算法:Token(sk, w)→ T_w 搜索算法:Search(CT_m, T_w) → T/F 解密算法:Dec(sk, CT) → m/⊥ 解决方法:用户加密的时候,不仅加密了数据m,还加密了和它 对应的关键词。 用户通过sk可以产生任意关键词的token,使得 云服务器可以搜索(检测)CT_m里面的关键词和T_w里面的关 键词是否相等。 42/45 《公钥密码学研究方法论》第12课
从亲为到授权 7/8 新公钥加密 (Publi-Key Encryption) 密钥算法:KeyGen(1^k) → (pk,sk) 加密算法:Enc(pk, m, w) → CT_m 符记算法:Token(sk, w)→ T_w 搜索算法:Search(CT_m, T_w) → T/F 解密算法:Dec(sk, CT) → m/⊥ 问题又来了:增加了这两个算法后,潜在的新危害又是什么? 如果敌人能询问任意w的token T_w, 会有什么潜在的问题? 43/45 《公钥密码学研究方法论》第12课
从亲为到授权 8/8 44/45 《公钥密码学研究方法论》第12课
第12课(完) 45/45 《公钥密码学研究方法论》第12课