您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

时间:2020-08-31 12:45:40  来源:  作者:

密码主要用于军事,无论古今中外,概莫能外。据《六韬》所载,3000年前由姜子牙发明了“阴符”,这就是最初的密码。后被广泛运用于我国古代维护国家安全的军事活动和情报活动中。

西方也同样如此,著名的凯撒密码(Caesar cipher),在公元前1世纪,就被用于高卢战争中,这是一种简单易行的单字母替代密码。战前凯撒设计了一种对重要的军事信息进行加密的方法,即使这些信息被截获,敌方也不一定能看懂。其实,凯撒密码字母移位的位数就是一种简单易行的单字母替代密码。密码轮是利用凯撒密码来应用的,通过把字母移动一定的位数来实现加密和解密。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

现如今信息时代,加密技术更是无处不在,比如邮箱、网盘等,但是关于它的实现原理,如何实现,你又知道多少呢?由于之前一段时间在研究国密算法的JAVA实现,网上找了不少的资料,同时也学习了加密的原理和概念,自己整理了一下网上的资料和自己的理解。这一块东西在日后的工作中是避不开的,多了解一下总有好处,而不是只会简单的调用encrypt和decrypt方法,知其然的同时也要知其所以然。

在讲解国密之前,我们首先要来了解一下关于加密的一些基本的知识。 首先加密被分为两大类,也就是 单向加密和双向加密 , 双向加密又可被细分为对称加密和非对称加 密,这两种加密中又存在多种不同的模式。

【单向加密】

单向加密可以简单的理解成为只能加密,没法解密,最典型的例子就是 散列算法 (Hash Function),也就是 摘要算法(杂凑算法)

这是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

这个过程是不可逆的,你摘要了一段东西就意味着你丢弃了原文,你无法用摘要去还原原文来,比如“我今天去二楼食堂吃了杂粮煎饼”,摘要出来是“我吃了煎饼”,你无法从后者去推断出原文。但是你用同样的算法对同样的内容,计算出的结果是肯定一致的。这只是个简单的例子,实际的摘要算法要更复杂,里面有自己的算法。你不仅不可能根据一段通过散列算法得到的指纹来获得原有的文件,也不可能简单地创造一个文件并让它的指纹与一段目标指纹相一致。

一个优秀的散列算法需要有以下几个特性:

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

摘要算法的用途非常广,我们身边有很多不经意的地方都用到了这个东西,现在大部分的网络部署和版本控制工具都在使用散列算法来保证文件可靠性。而另一方面,我们在进行文件系统同步、备份等工具时,使用散列算法来标志文件唯一性能帮助我们减少系统开销,这一点在很多云存储服务器中都有应用。

现在的QQ、QQ邮箱、百度网盘之类的都有用到这一个技术,否则为什么我们传一个几个G的文件只需要几秒钟,因为根据文件计算出来的hash值,在服务器上找到了同样的文件,直接从服务器上拉取即可,不需要再上传。所以网盘里的资源你再怎么改名字,藏的再深,都是没有用的,你改变不了散列值,大家分享来分享去,他们不需要点开来看你到底是什么视频内容,只要抓到一个,然后就把所有散列值一样的都给封掉,变成九秒教育短片。

▪ 常用的散列算法

MD(Messge Digest)4:

由Rivest于1990年设计的单向散列函数,能够产生128比特的散列值。现在它已经不安全了。

MD(Messge Digest)5: 由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破。也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它也不安全了。

SHA-1、SHA-256、SHA-384、SHA512

SHA-1是由NIST(美国国家标准技术研究所)设计的一种能够产生160比特的散列值的单向散列函数。现在已不推荐使用。SHA-256、SHA-384、SHA512都是由NIST设计的单向散列函数,它们的散列值长度分别为256比特、384比特、和512比特。这些单向散列函数合起来统称SHA-2。目前SHA-1已经被攻破,2还是安全的。

【 双向加密】

双向加密是加密算法中最常用的,一方将明文数据进行加密,另外一方可以使用一定的手段如算法和密钥,将密文还原为明文数据,所以称之为双向的。

双向加密里又分为对称加密和非对称加密。

1、 对称加密(Symmetric Key Encryption)

对称加密使用一个密钥,给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同。解密时,使用的密钥与加密密钥相同。

在对称加密中,分为分组加密和序列密码。

▲序列密码

流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。

▲ 分组加密

块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。

TODO 这两者的比较补充一下,流加密讲的太少了,这个东西材料也不多。

分组加密又有四种不同的模式,分别如下:

▪ 电子密码本模式 Electronic Code Book(ECB)

这个是最简单的模式,就是将原来的明文给按照固定的长度(也就是密钥的长度)给拆开来,然后用相同的密钥进行加密。

缺点是只适合加密小消息,如果明文块重复的多,密文里也会有很多的重复,它的明文和密文的对应关系是一致的。

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

▪ 加密块链模式 Cipher Block Chaining(CBC)

前面一个加密块输出的密文与下一个要加密的明文块进行异或操作,将计算结果再用密钥进行加密得到密文。这是一个迭代的过程,所以会在开头需要一个初始的向量。这个的优势就是密文和明文不再是一一对应的关系,每个相同的明文都掺杂了不同的向量。

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

▪ 加密反馈模式 Cipher Feedback Mode(CFB)

首先就是你自己有一个iv初始向量,对整个iv进行加密,然后取前面的高n位,与明文块的前n位进行异或操作,得到了n位的密文块0。然后这个被传入到下一个加密的操作中,首先将原来的iv左移n位,右边空出来的位置,就放密文块0,如此反复。

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

▪ 输出反馈模式 Output Feedback Mode(OFB)

这个和CFB很类似,唯一的区别就是填入的是K的高n位,而不是前一个密文块的内容。

暗藏在QQ邮箱、百度网盘的国密算法到底是如何实现的?

 

2、非对称加密(Asymmetric Key Encryption)

公开密钥加密(Public-key cryptography),也称为非对称加密(asymmetric cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。

▪ 公钥(Publish Key)加密,私钥(Private Key)解密

这个过程就相当于是A和B要通信,B把公钥发给A,或者直接公开在网上,你要给我发消息,就请用密钥C来加密,然后B收到加密后的消息c(x)后,就用自己的私钥来解密,得到实际的明文消息x。

比喻成数学公式,就是【d(c(x)) = x】,d就是私钥,只有接收者自己知道。

▪ 私钥(Private Key)加密,公钥(Publish Key)解密

你自己发一个消息的时候,用你的私钥去加密这个消息,然后将你的公钥公开给所有人,任何人都可以用这个公钥来解密你的消息。解不开说明私钥不对,也就是相当于,要证明这个消息是你发的,就是用公钥解开密文。

接收方可以通过此来判断消息途中是否有被篡改,也可防止用户抵赖,所以这个也被称之为数字签名,因为只有你才能把明文a加密成b,且b可以被公钥解密出来得到明文a,能够做到这件事情的只有你,其他人都不行。

以上的两种非对称加密的方式,更合适在互联网环境下使用,若采用对称加密, 你无法去保证传输密钥的过程的安全性。

---文末彩蛋---

▪ 常见的加密算法: TODO

▪ 证书: TODO

▪ 加密算法思维导图: TODO 这边自己画一张图上去

▪ SSL: TODO 这个可以补充一下啊,尤其是openssl,感觉有好多可以扯的

▪ 国密算法:

放到下一章节去,这边字数不够了,这一篇叫,国密预告,热身篇

▪ 参考链接

http://news.sciencenet.cn/sbhtmlnews/2012/3/255412.shtm

http://blog.csdn.net/fw0124/article/details/8472560

哈希算法:http://www.jianshu.com/p/bf1d7eee28d0

原文地址:https://rdcqii.hundsun.com/portal/article/854.html

作者:小小伟



Tags:国密算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
密码主要用于军事,无论古今中外,概莫能外。据《六韬》所载,3000年前由姜子牙发明了“阴符”,这就是最初的密码。后被广泛运用于我国古代维护国家安全的军事活动和情报活动中。西...【详细内容】
2020-08-31  Tags: 国密算法  点击:(111)  评论:(0)  加入收藏
时至今日,互联网和物联网已经渗透到我们生活的点点滴滴,数据在其中的重要性不言而喻,一旦数据遭到恶意攻击,导致泄漏或篡改等,这两张网的安全性也就不复存在。因此,2015年重新颁布...【详细内容】
2020-04-23  Tags: 国密算法  点击:(132)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(9)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(19)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(13)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(37)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条