密码二字,听起来好吓人,可现在几乎人人见怪不怪。以前密码多用于军事之事,而今,我们的日常生活中几乎离不开密码了。
本文试图用最为浅显的文字,解释与密码有关的5种算法。本文面向的对象:小学生三年级以上学生
(1) 对称算法
对称算法,就是对某个文字内容或数字内容,甚至是一个文件,加密时用一个密码(称为密钥),解密时,也必须使用这个密码(这就是对称的意思!)。
对称算法中,又有四个术语必须掌握:明文,加解密算法(可以理解为一台密码机),密钥(红灯记中的"密电码",其实是一组特定生成的文字或数字,也可以是一些开关),密文。
比如,下面这句话,明文:"小猫上树了,你乍不下来呢?",你要对它进行加密,发给你的表哥。
我们要找一台密码机(里面就包括了对称的算法),
然后用一个密码(密钥,密电码),比如:*&634Kjd!##,对这句话加密。密钥要输入密码机。你的铁杆粉丝小明,不辞千辛万苦,跑了六个街区,把这个密钥送给你表哥。
密码机开始运转,我们就会得到一串乌七八糟的内容,密文:"春04G人&足卡"。
你的表哥收到了"春04G人&足卡",他看不出到底是什么内容。
发呆几秒钟之后,你表哥也搬出一台跟你一样的密码机,把"春04G人&足卡"往里面一扔,接着他又往密码机中输入和你当初输入的同样的密钥:*&634Kjd!##,这就是解密的步骤了,他随即得到了明文:"小猫上树了,你乍不下来呢?"。
假设,他往密码机中输入的不是*&634Kjd!##,而是A5968d94UP之类的东西,他得到的也许是一串无意义的文字pqdjaideladsjasjfasl,也可能是"我的心肝哪你真是热心肠呵呵呵"。
小朋友,明白了我说的意思不?
如果明白了上面的四点,你就会明白我后面要讲的意思。
现在,国际上公开的对称密钥算法(存在密码机中),主要包括:DES,3DES,AES,RC4等等,也就相当于说,我们可以买到通用的含用对称加密算法的密码机。
要想只让你表哥得到你发的文字内容,而你表妹得不到,她绝顶聪明,好奇心特别强,7岁就有17岁的智商,怎么办?
你可能想到了,你就弄一台特别复杂的密码机!聪明,不亚于你表妹!可是你没有想到的是,你表妹早就从淘宝上买来一台跟你一样的密码机哟!
紧接着,你马上想到的是,让你表哥好好保管你的密电码,让你的表妹得不到。哼哼,要不你是三年级学生呢。你表妹通过门缝观察,早就知道你表哥把密电码藏在他的球鞋里!趁他不在,表妹取出密电码,拨开电子锁锁好的密码机,后面的事不说也很难看了!
第2次,你表哥不会再将密电码藏在球鞋里了,想放在XXX里。打住,别告诉我。小明第2次送密电码时,被表妹拦住:"帅锅,干什么来了?",小帅锅说:"送密电码"。"给你一块巧克力吃,你让我看一眼不?",小帅锅激动地说:"好呵,霉女,看完加个微信吧!",于是,你表哥第2次中招。
道高一尺,魔高一丈。第N次上当之后,你决定将密电码通过电话告诉你表哥。但是,在这个好奇心为王的世界,你表妹早给你表哥的电话装上了窃听器,你的一切尽在她的掌握之中!
(2)非对称算法
你可能会想到:如果发报时用的密电码与收报时用的密电码不是同一个该有多好!
是的,无数的科学家有很长一段时间都在想方设法解决这个问题。
终于,上世纪70年代末,三名有名的数学家解决了这个问题,这就是非对称算法。它的含义就是,加密的时候用其中一个密钥(公钥),而解密的时候,用另一个密钥(私钥)。公钥和私钥,是成对的,第三方用其中的一个,无法推导出另一个。许多人一下子松了口气,觉得它是革命性的算法,并且现在它推广到了全世界。
还是以表妹来打比方,不论表妹得到的密电码是什么,她都发现:她使用的密电码没有效果。她得到的,只是公钥,但是有一个私钥,永远在表哥的手里,她怎么也得不到。于是,表妹的聪明才智再也派不上用场了!你表妹根据她的计算很快发现,要想算出密电码,她可能需要10万年!
刚开始的时候,非对象算法只有RSA算法,后来,出现了更多的非对称算法,比如ECC等。
(3)密钥协商算法
有一个问题,马上就有人意识到了,非对称算法虽然安全,但是加密、解密的速度都特别慢,比原来的对称密钥算法慢了好多个数量级。虽然大大保证了密电码的安全性,但却大大降低了保密通信时的速度。
还有一个更大的麻烦在后头,你表哥搬了家!从离你600米的地方,搬到了1000公里以外的山东青岛。
小明是派不上用场了,又不能打电话告知,这可如何是好。
这个时候,人们绞尽脑汁,想有一个万全之策。有二位科学家,利用RSA算法,发明了一种密钥协商算法,也就是DH算法。
后来,人们又发明了其他的密钥协商算法,如ECDH等。
简单地说,它就是要让异地(不论多远)的人,能够在不见面、也不通电话的情况下,商量出一个保密性极好的密钥。而真正加密解密时,仍采用第一种算法,也就是对称算法。
这就起到了一个很好的作用:既能保证密电码的安全性,又能保证保密通信时的高速度。
现代密码学,会同时用到对称、非对称、密钥协商算法。这就叫做混合加密。
(4)摘要算法
看完上面三个算法,关于密码学的知识,算是及格了!
下面两个算法,算是进阶知识!
假设:你有一笔20元的巨款大红包要转给你表哥,你要给表哥发送一条消息:"20元超级大红包"。但你不知道的是:你表妹与时俱进,她如今有一项特殊的才能,就是截获你给你表哥的微信大红包,她自己留下18元,只给你哥2元,你表哥会收到这样一个消息:"2元超级大红包",可你表哥没法发现其中有诈。用通信术语来讲,这就是"协议劫持",或者说"窜改",或者"报文伪造"。
你意识到了问题的严重性,苦思解决之良策。
你不用苦思了,有人替你早就想好了解决之道。这个解决之道就是:MD5算法。它对你发送的所有消息,进行"摘要"(Hash算法),也就是说,无论是多长的一段消息(数据),运行一个"车轱辘算法"之后,得到一个16字节(128比特)的结果。这个算法的奇妙之处有二点:一是得到的结果总是16字节,另一点是,数据不同,则结果不同(数据不同,要想得到相同的结果的可能性是非常非常之小的)。
它此刻要解决的你的问题就是:你把20元红包发给表哥,同时把MD5摘要EB4B7F0FC2CDFB6D连同消息一起发给你表哥,变成这样子:"20元超级大红包EB4B7F0FC2CDFB6D"。你表哥收到后,也会利用MD5算法,计算一下,"20元超级大红包",得到的结果自然是"EB4B7F0FC2CDFB6D",据此,你表哥确信:款项准确无误,谢谢表弟!假如你表妹将消息改为"2元超级大红包EB4B7F0FC2CDFB6D",你收到消息后,计算"2元超级大红包"的MD5摘要,得到FCD5881285C27C99,你表哥马上就会发现:不对呀!于是,你表哥会找你表妹算帐去。
除了MD5之外,后来,科学家又发明了许多其他的摘要算法,比如SHA等。MD5,SHA,是现在用得最为广泛的摘要算法。
(5)签名算法
到了密码学有关的最后一个算法:签名算法。签名的作用,比较好理解,也就是为了防止别人抵赖。
回到上一节:假如你表妹将消息窜改时,同时窜改消息的摘要,那将会是多么可怕的一件事。也就是说,她截获电文后,向你表哥发送这样一条消息:"2元超级大红包FCD5881285C27C99",你表哥收到后,对"2元超级大红包"进行MD5摘要,得到的结果也是"FCD5881285C27C99",你表哥一定不会有任何非份之想。
这就要用到密码学的最后一招:签名算法,也就是DSA算法。它也是基于RSA算法的,因为它用到了公钥、私钥。
仍以你给你表哥发消息为例。简言之,签名算法就是要完成这样一个步骤:先对消息的原文进行摘要,对这个摘要用你的私钥进行加密。消息本身仍采用安全的对称算法进行加密。你给你表哥发送的,不只是密文,还包括消息的签名信息。你表哥收到密文与签名信息,他先进行解密,解密后得到了明文,但是这个明文是不是确定无误呢,为此,他需要验签:就是将你签名的消息,用你的公钥进行解密,得到了一个摘要A,他对明文也做一次摘要,得到摘要B,如果A和B相同,就没有消息本身是完全可靠的。如果A和B不同,那一定是出了大问题。
除DSA签名算法外,后来也出现了更多的签名算法,如ECDSA等。
看完前面5种算法的介绍,就是看完了整个现代密码学的简介。同学们,再也不要想通过电影《鸡毛信》那样,传递重要的情报了;也不能象《红灯记》中的李铁梅那样传递密电码;更不要象《潜伏》中的余则成那样,将密码本到底乱藏。再那么干,显得太Low了。
不任是银行的存取款操作,还是二维码收款、付款操作,都会同时用到这5种密码算法。
此文属原创,未经同意,严禁转载,为了让小学生看懂,真是费了我好多心思。如果你有什么不明白之处,就关注我的头条号,与我直接联系吧。
18.3.17 智有不明