数字签名
举个例子
Alice一个私钥,所有人都有一个公钥。
Alice发布自己的消息,并给自己的消息签名,用她的私钥去加密。
每个人都可以根据公钥去判断Alice消息的正确性。
这样Alice的签名就不能抵赖,不能反悔。
具体场景案例
Alice和Bob想知道对方是否爱着自己。
有以下场景
Alice 发送0或1,0表示不爱,1表示爱。
Bob也一样,发送0或1,0表示不爱,1表示爱。
现在的问题就转换成了双方想知道一个函数f的结果
函数f的定义如下:f(A,B)=A&B;
存在问题
这样看似完美解决了问题,实际产生了新的问题。
如果双方互相喜欢,那当然皆大欢喜。如果双方不互相喜欢呢,那么被“拒绝”的一方岂不是很尴尬。
传统方案
比较简单的方法,建立一个第三方,我每次把消息发给第三方,让第三方把最后的结果发给双方,这样就避免了尴尬,但是还是需要反思,能不能不存在第三方。
安全多方计算
主要是针对无可信第三方的情况下,如何安全地计算一个约定函数的问题。
当然所有安全都有前提条件
一个安全多方计算协议,如果对于拥有无限计算能力攻击者而言是安全的,则称作是信息论安全的或无条件安全的;如果对于拥有多项式计算能力的攻击者是安全的,则称为是密码学安全的或条件安全的。
已有的结果证明了在无条件安全模型下,当且仅当恶意参与者的人数少于总人数的1/3时,安全的方案才存在。而在条件安全模型下,当且仅当恶意参与者的人数少于总人数的一半时,安全的方案才存在。
也就是说,这个最终的需求是为了满足在没有第三方的条件下,达到和有第三方一样的效果。
茫然传输协议(OT协议)
A向B发送消息,B有可能收到A的消息,也可能没收到B的消息。
而发送者A对于发送消息的两种可能性是不知道的,也就是说是茫然的。
为了清晰的说明,换回上面的案例。
Alice向Bob表示爱意,M0表示不爱,M1表示爱。如果Bob不爱,那么输出C变为M0,如果Bob爱,那么C变为M1,此时Alice对Bob的心意是茫然的。用数学公式表达
C:=OT((A0,A1),B),注意接受方且能仅能获取A0和A1.
下面就是如何产生这个OT函数。
实现方法一:
1.Alice写好两条消息即爱与不爱,随机生成两对密钥(sk0,pk0),(sk1,pk1),用sk0和sk1分别加密,把pk0和pk1发送给Bob,Bob接受时,根据爱与不爱的选择pk0或pk1,同时生成一个随机的对称密钥K,将结果x:Enc(pkx,K)加密发送给Alice。
2.分析以上情景,不难分析出两个情况。
当Bob的选择为0时,K0=K,当选择为1时K1=K,
然后Alice接受方计算有:
K0:=Dec(sk0,X),K1:=Dec(sk1,X)
C0:=E(K0,A0),C1:=E(K1,A1)
从而Ab=D(K,Cx),x=0或1。
实现方法二:
利用OT协议:
Alice消息设置为(A0,A1)即为(0,A),Bob发送自己的消息,即为1/2-OT协议,当且仅当A=B=1时,Bob所得的结果才会为1,所以Bob的所得同比特与运算A&B的结果相等,Bob输出自己的所得与运算作为运算结果。
为A&B=OT((0,A),B),即实现了上述功能。