欢迎光临散文网 会员登陆 & 注册

密码学中的转换

2023-06-22 19:32 作者:way_key  | 我要投稿

密码学中的转换

密码学的确很难,诸多概念都是昏昏然不知其所以然。远远望着那些方案为啥那么巧妙,只有无限地羡慕、崇拜和不懂。但,好在存在好多好多种转换。甚至可以武断地说,啥都能转换。我觉得,这个转换大约介于书上说的“通用构造”和“通用改装”之间。

一、在安全性概念中存在的转换。如安全目标定义中,不可区分性安全、语义安全之间,以及与攻击能力CPA、CCA纠缠在一起,就存在一些转换。语义安全是加密方案最基础的安全定义。只是在加密方案安全性判断里用IND安全代替了,虽然最早的安全据说是完善保密安全。IND目标加上CPA的攻击在对称加密那里还扭扭捏捏,不是那么利落。到了公钥加密就干脆多了,比如,和窃听安全,和IND-CPA安全都等价,甚至连多重加密都含着。等价真好,这样连转换也不需要了。语义安全,其实就是“啥也不泄露”,不过这个说法太感性,非要严格起来,那应该是ideal/real的模拟安全,有点扯远了,这里的确有点乱。不过因为在公钥加密中,加密密钥既是公开的,那就随便密,重点是,从密文里“啥也看不出来”,因此CPA的攻击能力就形同虚设。

但IND-CPA的安全就抵御不了攻击者对密文的主动攻击(什么是主动,其实费解了很久,现在想大概是延展性改造)。比如,竞拍中后面的竞价人虽然不知道前面出的什么价,可以保证自己的竞价比前面的高。——是的,CCA不过是抵御延展性改造。如果中间人硬要彻底改造发送方给接受者的信息,——这个安全不是CCA能抗的,那得用签密或是认证加密。所以,这里搬来两个从IND-CPA转换为IND-CCA的套路。

  1. 第一个转换是CPA向CCA1的转换。有名的Naor-Yung的方案,采用CPA安全的双加密系统(对同一消息加密),伴随给出两次加密的确是对同一消息进行 的零知识证明。因此需要的工具除了一个CPA的公钥加密方案,还需要一个适应性非交互式零知识证明系统。证明过程用了游戏转移。

  2.  第二种是从IND-CPA向IND-CCA2的转换。CCA2就是不仅给攻击者解密能力,还能针对性(适应性)地改造密文。有个改造的方法叫DDN(Dolev、Dword、Naor),基于一个IND-CPA安全的加密方案,一次性强签名方案,和适应性非交互式零知识证明方案,构造一个CCA2安全的方案。

    有关上述DDN构造的结论是,如果存在语义安全的公钥加密方案和适应性安全的零知识证明系统,那么存在CCA2安全的加密方案。又,如果存在陷门置换,那么存在适应性安全的零知识证明系统。故,如果存在陷门置换,那么存在CCA2安全的加密方案。

  3. 从IND-CPA转换到IND-CCA的办法应该不止一种,比如F和O的方法是将一般的弱的对称和非对称方案改造成一个CCA安全的非对称加密方案(RO模型下的)。形状是这样:。。。这个方法之前应该也有别的。


    二、加密体制中的对称加密到公钥加密的转换

    方法是用一个obfuscator,据说是“obfuscatorsthat can transform an arbitrary private-key encryption scheme into asecure public-key encryption scheme.” 好像是一个不太确定存在的神秘武器,可以把一个旧的程序转成新的程序,而功能保持不变。对称转公钥,只是该神器的功能之一。

    但是事情也不是那么顺利,要满足几个条件才可行。比如,如果是不可混淆的确定性的对称加密,那么私钥容易算出,就不合适。即使是sampling obfuscators,对概率性的对称加密也不能转成安全的公钥加密,如果加密程序有输入-输出的依赖性。一般意义的转换的混淆,如果存在的话,必须是一个不能有输入-输出依赖特性的sampling obfuscators.

    三、普通加密到同态加密的转换

    这种似乎玄之又玄,比上述神器还缥缈,没见具体的方法。大咖们认为,从一个密码学假设开始,构造一个公钥加密方案,然后试着让该方案变得同态(用加法和乘法造出Eval函数)。另一种思路称为数学方式,从一系列homomorphisms开始,构建一个同态方案,其中D(sk,.)=;试着使该同态方案变得安全(也就是让密文看上去跟随机数一样)。

    四、MPC中的转换

    就太多了,也有点老生常谈。

    1.半诚实模型到恶意模型的转换

    如果有一个半诚实安全的协议,面对恶意敌手,就在于敌手可能不听话,可能乱来。既然如此,就是强迫敌手没办法施展他的恶意行为。考虑两点,一个是输入,一个是随机带。所以,GMW compiler的做法是让对输入先作承诺(承诺是让参与方规矩输入的好办法),然后通过增强的掷币协议,使得双方(如果是两方)得到自己的随机分布的字符串(作为随机带)和对方的字符串的承诺。结果,每个参与方持有对方的输入和随机带的承诺。想象两个小孩掐架,一个揪着对方的头发,一个抓住对方的耳朵。但凡通过协议交互得到的消息一定是NP类型的(发消息的那一方知道证据),这样,参与方都可以用ZKP来证明他们确实没有作恶。除了承诺,零知识证明也是可以强迫参与方不能欺骗的有效手段。既然半诚实可以改恶意,那么隐蔽的也应该能行,只要不嫌麻烦。

    2. 两方计算中如果只有一方有输出,另一方没输出的协议,可以轻易改装成两方都得到输出的安全协议。

    3. 从一个具备特殊的正确性和诚实验证者的sigma协议,加一个完美隐藏的承诺,就造出一个零知识证明ZKP,如果这个承诺是带陷门的,就可得到一个知识的零知识证明ZKPOK。

    应该还有别的。


密码学中的转换的评论 (共 条)

分享到微博请遵守国家法律