1 out of n 不经意传输协议 的 基本理解

文章讨论了如何在满足特定安全要求的前提下,让A将n个秘密中的一个(s_i)安全地发送给B,同时确保A不知道B选择的索引i。通过使用对称密钥、公钥加密和冗余项策略,实现了在不泄露其他秘密的情况下传输指定秘密。
摘要由CSDN通过智能技术生成

事件

  • A有n个秘密 {s_1,s_2,…,s_n},B想要获得秘密s_i,A有公钥pk和私钥sk

要求

  1. B获得秘密s_i,除此之外没有获得其他秘密;
  2.  A不知道B选择的索引值 i。

思考:

  1. A在怎样才能在不知道确切索引值的情况下将秘密发送给B
  2. B不能得到其他信息,仅仅得到s_i
  3. B如何区分s_i和其他消息

分析:

首先,发送方A在不知道确切索引值的情况下肯定无法确定地发送单一秘密给接收方B,这是“要求2”要求的,所以,我们思考,是否可以让A把所有的秘密发送给B,但这又违背了“要求1”。

那我们可以怎样操作完成这一事件呢?

根据之前所学习的密码学知识:

        加密:c = Ek(m),加密方一定是知道明文m

        解密:m = Dk(c),解密方最后一定能得到明文m

综上,如果随机选择一个对称密钥k_i,那么拥有此密钥的人就可以使用此密钥加密或解密秘密s_i。

在本事件中,接收方B是最终得到秘密s_i的人,所以B一定执行解密操作,但是B不知道s_i,所以执行加密操作的应该是发送方A。

分析到这里,我们发现,加解密执行方是两方,那么k_i是否是两方共享的?如果不是又应该谁来生成随机密钥k_i呢?

如果k_i两方共享,那么A会解密得到秘密s_i,进而知道索引号i,这不符合“要求2”,所以应该是B来生成随机密钥。

接收方B生成随机密钥k_i后怎么传递给A(A仅执行解密操作而不知道具体的密钥)呢?

这是我们想到,可以添加冗余项使真正的密钥隐藏在其中。B将含有冗余项的信息发送给A就完成了密钥的传递。在这个过程中,由于A未知序列号i,所以A也不知道密钥k_i。

之后,A依次对应执行加密,将加密后的信息发送给B。

B使用密钥k_i一次对应解密(只有序列号为i的位置可以得到正确解密结果),找到序列号为i的位置的结果就是秘密s_i。

又由于在传递过程中,为了保证消息的安全性,我们需要用A的公钥加密消息。(消息不能以明文方式传递)

过程:

  • 接收方B:1.采用A的公钥pk对消息m进行加密,表示为E(m);2.随机生成一个密钥k_i,用A的公钥进行加密,表示为E(k_i);3.生成与E(m)等长的随机数{ R_1, R_2, ..., R_i-1, R_i+1, ..., R_n} ; 4.发送{ R_1, R_2, ..., R_i-1, E(k_i),  R_i+1, ..., R_n}给A
  • 发送方A:1. 使用私钥sk一一对应依次解密接收到的数据得到{r_1, r_2, ..., r_i-1, k_i, r_i+1, ..., r_n};  2. 用解密得到的数据一一对应依次加密秘密{s_1, s_2,…,s_i-1, s_i, s_i+1,  ..., s_n}得到{E_{r_1}\left ( s_1 \right )E_{r_2}\left ( s_2 \right ), ..., E_{k_i}\left ( s_i \right ), ..., E_{r_n}\left ( s_{n} \right )};  3. 将加密数据发送给B
  • 接收方B:使用密钥k_i 依次解密接收到的消息,在序列号i的位置及为秘密s_i

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值