前言:未经作者允许,严禁转载抄袭
生活中,必不可少的需要懂一点密码学的常识。从古至今,信息传递关于保密方式的故事有很多。在此不一一列举。今天,笔者想用一段孽缘爱情故事,通俗易懂的讲一讲现代密码学的基础理论。
话说,在七侠镇学校里,张三和隔壁班的依依处对象;
依依天资艳丽,活生生的是个美人胚子;
张三呢,也有两把刷子,对计算机编程比较熟悉,给依依修了多次电脑后,终得美人芳心。为此,张三无比珍惜与依依的感情关系;
七侠镇学校里还有个号称华北地区服务器最多的男人,江湖人称“老王”。老王喜欢依依很久,一直想给依依能修修电脑(顺便给电脑里装个木马,方便每天都能看看依依)。但始终被张三抢先得逞。郁郁不得志..
早点混迹江湖还有七侠镇的老镇长,是一个传说中的人物。江湖传闻,老镇长徒手能拆电脑,坐能逆向木马,是国际勒索病毒联盟早年克星之一。正因为行侠仗义,老镇长在七侠镇颇具威望。
(老镇长)
一、怎样才能不被偷听——加密
在恋爱期间,张三和依依两人都没有安全意识。晚上谈一些不可描述性的话题时,总是被人偷听,两人为此苦恼很久。而偷听者就是老王。具体偷听过程如下:
张三非常苦恼,想了很久。终于在《王宁密码学》这本书中了解到加密的说法。“对呀!,只要能够将我和依依的对话进行加密,这样,就不害怕被别人偷听” 张三自言自语道。说干就干,他先和依依上商定一个密钥key(key 是一个随机数,别人猜不到)。从此张三和依依每天晚上就用这个key来对他们不可描述性的一些话题进行加密保护,如下图:
备注:从图可知,依依在说话前对消息内容加密。发送消息时,不再直接发送传递“我爱你,三儿,今天你有空吗?”这么直白的明文,而是“&&%&@@22*&*”这种谁都看不懂的密文。即使被老王窃听到了,老王也看不懂,到底依依说了什么,是否老王还有机会?
张三在收到密文后,先用key对其进行解密,得到原始消息内容(我爱你,张三,今天你有空吗)。此时,张三开心的笑了...有空呀,嘿嘿
原理:
1. 这种加密方案在密码学里称为对称密码,加密方和解密方使用的是相同的密钥。
2. 知名的密码算法有 AES(2001)、Blowfish(1993)、DES(1977),再远一点,有二战时期的恩尼格码(转轮机原理,德国)、紫色密码(转轮机原理,日本),以及著名的凯撒密码、栅栏密码等。
3. 密码学里的“密码”和现实生活中的“密码”不是一回事儿!后者一般指的是口令(password),比如登录淘宝、QQ、ATA输入的那个。
一切就和读者想象的一样,张三和依依开启了一段幸福又疯狂的日子,日子就这样过着,原本以为两个人能一直幸福下去,谁知,道高一尺,魔高一丈,老王又来了…
二、如何交换密钥 ——非对称加密
老王自从发现依依的消息自己听不懂后,寝食难安。“到底依依怎么样了,依依还好吗?我该怎么办呢?” 果然号称华北地区服务器最多的男人老王,牛皮不是吹的。思考几天后,“这对狗男女一定是用了加密手段!这什么难的,能加密的住我老王?可笑!”
说干就干,老王随即找到破解方法:
破解过程和思路就是,老王发现依依和张三经常会更换key。只要能来窃取key,有了key以后,老王就又能知道依依说的消息。自此,老王心里默想:“好白菜哪能让猪给滚了,我坚决不同意!”
有了key在手,老王每次都能像张三一样,听到依依都说了什么,进而采取必要措施,防止小白菜被猪滚。
张三也不是吃素长大的,每次都让老王得逞,打脸!回家重新研究《王宁密码学》,又有了新得绝招,非对称加密。具体过程如下:
张三搂着依依,大清早就把依依从睡梦中叫醒。
他和依依商量后,写下一对公钥、私钥。私钥(pri)由张三自己保管,而公钥(pub)则给依依。“亲爱的,以后你有什么想说的话,再给我发送之前,就先用公钥对信息内容加密。然后,我再用私钥进行解密。这样就不怕我们的消息被人偷听,破坏我们约会了?” 张三搂着依依,含情脉脉的对她说。“嗯嗯”,依依应允点头,靠在张三的肩上,仟细的胳膊搭在张三的胸前,“三儿,有你真好,能让我安心”
张三看了看依依的俏皮的小脸,忍不住狠狠亲了一口。随即,掏出一根烟,“啪”的点着。深邃的眼神凝视着房间的天花板,猛扎了一口,若有所思的自言自语,“依依,你要万分注意,只有私钥才能解密,即使偷听的人能够在你发送消息的时候窃取了公钥(pub),偷听者也是无法解密的!” “三儿,我知道了,我会每次记住用公钥加密内容的,你也保护好自己哦”。
备注:张三心理还是给自己留了空间的,假如以后还能有女朋友,也是可以把同一个公钥都发送给她们,每个女友都用这个公钥和自己通信。构成“多对一”的通信关系,就不用担心女友A能够偷听女友B和自己的聊天内容,因为毕竟公钥(pub)是无法解密的。对比之前的对称加密,张三则必须为每个女友都分发一个不同的key,这样非常容易搞乱关系,说错话。这就是非对称加密的魅力所在。
原理:
1. 上文提到的加密方式在密码学里称为非对称密码,所谓“非对称”指的是加密方和解密方用的密钥不一样。
2. 知名的非对称算法有:DSA(数字签名算法,只能用于签名,1991)、ECC(椭圆曲线加密,1985)、RSA(公钥加密算法,1977)等。
3. 这些算法除了用于加密外,还可以用于数字签名,本文后面会讲到。
4. 非对称算法有个致命弱点: 性能很低。实际应用中一般采用混合加密体制、哈希签名体制。
老王发现又听不到依依的消息,非常焦虑。苦心研究功法半年后,正式出山!再一次来到了这两人身边,老王是否能够解救在“水生火热”中久久不能自拔的依依?而张三又是否继续能和依依一直幸福下去,下一节更加精彩!
三、如何防止数据篡改——MAC
话说,老王在苦心研究功法半年后,功力绝非半年前可比。
这一次,老王决定不去做偷听这种没有技术含量的工作。而是转为修改依依和张三的对话, 来让依依知道张三也不是个好东西。此时,原本他把依依的原话“我爱你,三儿,今天你有空吗?” 直接改为“张三,我决定和你分手,我已经厌倦了你和你的身体,够了”。但是此时张三却不知道已经被篡改,还以为是依依的原话。张三听到依依的消息后,苦恼很久,,,,“难道她是知道了我做出格的事了?还是真的已经腻了?也怪自己一直迷恋计算机基础知识,没给她带来一些新的花样,新鲜确实是爱情的保鲜剂,,哎,,,怪我”
张三在接到消息后,立刻当面找到依依对质,发现:“纳尼??什么情况?依依还是爱我的呀,X了狗,一定有人在篡改依依的消息。” 是可忍孰不可忍,张三其实这半年,早就把《王宁密码学》熟读多遍,对这种套路的应对,早就烂熟于心。很快他就想出对策:
备注:为了简单起见,本例仅展示防篡改的情况,没有对 message 做加密。
张三的绝学就是:
上图中的MAC指的是 消息认证码(Message Authentication Code),具体解释:
1. 传入两个参数 message 和 key,进行一系列计算后得到一个值叫 MAC
2. 只有 message 和 key 相同的情况下,才能得到相同的 MAC
原理:
1. 跟对称加密一样,张三和依依会事先协商一个 key。
2. 依依使用 key 对 message 计算出一个 MAC1,并把 message + MAC1 发给张三。
3. 张三收到消息后,用自己的 key 对 message 计算出一个 MAC2,再比较 MAC1 和 MAC2 是否一致。
4. 根据 MAC 的性质,如果 message 被篡改,那么计算得到的 MAC2 一定不等于 MAC1,验证失败,张三得出结论:有人篡改了依依的消息。
5. 由于仅依依和张三拥有 key,所以别人无法篡改 message 后伪造出一个有效的 MAC。
6. 在检测篡改方面,还可以用HASH(散列)算法,包括MD5、SHA1/224/256/384/512等。比如版本控制系统GIT就使用SHA1来检查文件是否有修改。
7. 消息认证码有多种实现方式,其中最常见的是 HMAC(Hash MAC),即使用哈希算法来实现 MAC,还有一种是基于分组密码算法的 MAC,不常见。
四、如何校验身份—— MAC
同时,老王还可以冒充身份,恰恰MAC也可以识别:
老王发消息给张三,说“三儿,我是依依”。如果没有校验措施,张三可能就中招。同样,张三可以用以下方式进行防范:
因为只有依依和张三拥有相同的 key,所以张三只有在校验 MAC 成功时才会相信对方是 依依。而老王没有这个 key,伪造的 MAC 必然会校验失败,进而计谋不能得逞。
原理:
1. MAC包含几种实现方式:基于 HASH 的 MAC 称为 HMAC,应用比较广泛。
2. 还有阿里云的 Access Key,其实就是 HMAC 的原理。
3. 有时候在两个系统之间API调用时,会使用同一个 key 做 md5 计算来实现 API 鉴权,这称为“加盐HASH”,可以简单理解为 HMAC 的简化版。
4. 如果 key 被窃取该怎么办?这可以用 数字签名来解决。
五、数字签名的威力
数字签名,这个“签名”基本可以想象成现实生活中手写的签名,具有类似的作用。原理上和非对称加密有点像。但,有个很大的区别,发送方是用 私钥 进行签名,而接收方用 公钥进行验签,这跟加密情况正好相反。
张三一朝被蛇咬,十年怕井绳。对用MAC地址验证消息还是心存疑虑。他决定用更为强大的数字签名来校验消息是否被篡改,请看下图:
上图的亮点在于:由依依事先生成一对 公钥(pub)和 私钥(pri),并把 公钥 发送给张三,依依用 私钥 加密,张三用 公钥 验证。验证失败说明消息被篡改。
同时,张三的用的数字签名也可以应用到身份校验(也就是,就算老王会易容术,化作依依当面来拆散他两,张三也是能够识别出是真依依还是假依依)。
因为老王没有依依的私钥,所以无论如何他怎么伪装,也没法冒充依依的身份。
六、公钥的身份证——数字证书
如果你认为老王就因为非对称加密和数字签名的作用就此罢休,那么真的太低估老王的功力。毕竟老王被街坊领居成为华北地区服务器最多的男人啊!
伪造公钥!对没错,就是伪造公钥。
原理:
之前讲到的,张三需要事先,生成 公钥(pub)和 私钥 (pri),然后把 公钥 分发给依依。那么攻击过程就从这入手:
1. 老王生成自己的一对公钥1(pub) 和 私钥1(pri),截获张三的 公钥,并用自己的 公钥1 冒充张三的公钥发给依依。如下图:
2. 依依用 公钥1 加密消息,发送出去。
3. 老王截获依依的消息,并用私钥1解密得到消息明文。
4. 老王伪造一个假数据“三儿、我还是想和你分手,隔壁的王大哥人很好,我觉得依依更适合他”,并用 公钥 加密后发给张三。
5. 张三用 私钥 解密,拿到被修改后的消息,以为真的是依依发给他的。
这是个“偷天换日”的过程,老王通过伪造公钥(中间人攻击),不光窃听到依依的消息,还能保证整个过程中依依和张三都没有察觉!
再来看一下老王怎样用伪造公钥的方式来冒充身份。之前讲到,依依需要事先把自己公钥发给张三,所以攻击过程就从这入手:
1. 老王生成自己的 公钥1 和 私钥1,截获依依的 公钥,并用自己的 公钥1 冒充依依的公钥 发给张三,如下图:
2. 依依用正常 私钥 进行签名,并发给张三。
3. 张三手里拿的是被伪造的 公钥1,所以对依依的 sign 会验签失败,认为对方不是依依。
4. 老王用自己 私钥1 进行签名,并发给张三。
5. 张三用被伪造的 公钥1 进行验签,可以验签成功,认为对方是依依。
这个过程中,老王通过伪造依依的 公钥,成功冒充了依依的身份。
这种伪造 公钥 的攻击方式让张三很头疼,思考许久,终于想到办法。这次他找来了七侠镇最具有权威的人(老镇长)。文章开头有介绍过,老镇长非常具有权威性,而且能保证自身不受攻击(或者别人不敢攻击)。
老王不是喜欢伪造公钥嘛,张三这次就要请老镇长为自己的公钥注册一张 “身份证” (数字证书)。见证如见人!以下是注册数字证书的过程:
1. 张三请求老镇长为自己的 公钥 注册一个证书。
2. 老镇长收到请求后,用自己的 私钥2 对 张三的 公钥(以及身份信息) 进行签名,得到一个 sign。
3. 老镇长把证书 certificate = pub + sign 颁发给张三。
4. 张三把自己的证书 pub + sign 发给依依。
5. 依依使用老镇长的 公钥2 对 sign 进行验签,如果校验成功则说明 公钥 的确是张三的公钥,因为他相信老镇长的权威性。
备注:老王不可能找老镇长为他也办张三的数字证书,因为老镇长不会同意,就像警察不会给笔者办一张别人的身份证一样。所以,老王无法伪造张三的 公钥。同理,为了防止 老王伪造 公钥 来冒充身份,依依也需要向老镇长注册自己的 公钥,得到一个数字证书,用于防止别人伪造 公钥。
补充:
1. 考虑到非对称算法的效率问题,实际应用中一般是先对数据进行哈希,然后才用私钥对哈希值(摘要)进行签名。
2. 老镇长在密码技术领域中一般称为 认证机构(Certification Authority,即 CA)。
3. 以数字证书为基础,业界制定了一系列的规范和规格,比如由谁颁发证书、如何进行颁发、如何作废证书等,称为 公钥基础设施(Public-Key Infrastructure,即 PKI)
七、总 结
自从有了老镇长的帮助,依依和张三从此过上了没羞没臊的幸福生活。
老王呢、还是老王。这个被号称为华北地区服务器最多的男人收拾好行李,准备去京城深造,爱情的力量往往有时候是伟大的!这个男人依旧在想尽办法,想要重新夺回属于自己的依依。
到底隔壁老王能否成功从张三手里抢回依依?同时,张三多重撩妹的内幕到底会不会被依依察觉发现,请听下回分解!