被“鼹鼠”支配的恐惧(2)
非对称加密算法不同于对称加密,它的密钥不是一个,而是两个(一对)。比如有两个密钥S1和S2,一段信息以S1加密后是不能通过S1来解的,只能通过S2来解密。同理,被S2加密的信息也只能通过S1来解密。S1和S2则被称为“公钥”与“私钥”。 一对密钥像是难以分割的小情侣,有且仅有彼此才能实现人生大和谐。 那么RSA加密算法又是怎么工作的呢? RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 而想要生成一对RSA密钥,则需要三个参数:n、d、e。(下面这一段为数学算法,不感兴趣的同学可以略过) 选择两个质数 p 和 q,它们的乘积就是 n。 假设 p = 29, q = 31, 则 n = p * q = 899。 计算 φ = ( p - 1 ) * ( q - 1 ) = 840。 再选择一个比 φ 小且与 φ 互质的数,作为 e。 选择 e = 37。 找到一个数 d,使 e * d % φ = 1。 算出来最小的 d 就是 613。 现在,得到了 n, d, e ,把 p 和 q 扔掉,(n, e)作公钥,(n, d)作私钥,就可以执行 RSA 加密运算了。 如果把(899, 37)作为公钥发出去了,看到这个公钥的人一定不能算出 d 值吗? 由上面的密钥算法可知,要算出 d,必须先知道 φ。 那么由 n 和 e 能算出 φ 来吗?e 是随便选的,只须考虑 n。 n = p * q φ = ( p - 1 ) * ( q - 1 ) = n - p - q + 1 如果不知道 p 和 q,就不可能从 n 算出 φ。 那么将 n 分解质因数,不就能得到 p 和 q 了吗?幸好,这个运算虽然能够成立,将 899 分解为 29 * 31 也不太难,但对于一个实际使用的 1024 位或者更大的 n,计算的速度会慢到无法实现。 例如,n = 186506401784256749805468037221367015183 你能分解它吗?这个 n 还只是 128 位的。 (以上算法环节来自guideep) 而RSA-1024就是1024位的。“鼹鼠爸爸”们则是用RC4加密了文件本身及文件名,又用RSA-1024加密法加密了RC4加密法的密钥。而他们这么做的原因在于RSA加密法本身无法加密如此多的文件,而RC4可以。不得不说,这种俄罗斯套娃般的加密方式直叫人感叹人生之多艰。 珍爱生命,远离流氓 连勒索软件的设计者都知道狡兔三窟的道理,我们作为遨游在赛博世界的一员多少还是得有点儿自保意识的。重要数据时时做好备份是必须的,真中招了我们也可以潇洒的给绑匪们发个问候家人的邮件,然后保持淡定的心态重做系统,不至于在屏幕这头跳脚骂娘。 如果想要从源头解决问题,方法也很简单 ---The End--- ,。 (编辑:ASP站长网) |