密码学怎么破彩票?

匡一纬匡一纬最佳答案最佳答案

要证明一个算法是安全的很难,但反过来的证明却很容易。如果已知一个算法是安全的,只要随便设计一个随机数生成器和一个解密算法就能完成攻击;但如果不知道一个算法是什么,想要证明它是安全的就很难了。 一般我们证明算法的安全性都是先假设它是不安全的然后反推。这个反推的过程就是用一个已有的加密算法来模拟未知的安全漏洞以证明它的不可行性(否则的话直接设计一个更“强”的攻击就可以了)。这里用到的加密算法一般来说就是对称密钥算法或者公钥算法。其中对称密钥算法又包括DES、AES等,公钥算法包括RSA、ECC等。

对于楼主的问题来讲,要破译NIMONO(以及类似NIMONO的算法)其实是很简单的。 首先,NIMONO的加密阶段是将明文分成好多块,每一块经过变换得到一个密文,这些变换都是用对称密钥进行的。也就是说,如果有了一个对称密钥,就可以破解NIMONO了。

但是NIMONO在加密阶段其实还做了不少其他的处理,对这些的处理结果进行重构,就可以得到原明文。这些其它的处理有: (1.8)式中右边的项可以看成是由许多 “如果...则...” 组成的语句集合,每一条语句是一个条件,后面跟一个操作。这些操作主要是一些基本的算术和位数的转换。当遇到这种格式且左端为0时,就执行右端的相应的操作。这样,一条一条地执行所有的语句,最后可以得到原明文。

为了证明上述步骤的可行性,还需要有一个能生成(1.6)中随机数的函数和一个能解(1.7)中方程的函数。前者可以用现有的随机数生成器来完成,后者可以搜索解或者利用消元法求解。当然,如果给定足够长的明文,也可以不用求解方程而直接测试所有可能的(1.6)中的随机数,看哪一个与(1.7)相符。

当然,上述方案需要已知NIMONO的参数才可以实现。对于题主提到的基于概率的分析,这是可以实现的。只需要知道NIMONO的加密模块的加解密复杂性就可以了。 但是,如果要实现对NIMONO的攻击则需要知道(1.6)中的随机序列,这是一个困难的问题。因为(1.6)中的序列长度取决于密文的长度,而密文的长度和明文长度是一样的,而明文一般很难获取。

我来回答
请发表正能量的言论,文明评论!