安全加密

本文借鉴《我的第一本算法书》,算是对自己学习的总结,也希望分享下所学知识~~

通过互联网交换数据,数据要经过各种各样的网络和设备才能传到对方,
数据再传输过程中可能会经过某些恶意用户的设备,从而导致内容被窃取。

传输数据时的四个问题:
1.窃听:A给B发的消息在传输途中被X偷看
2.假冒:A以为给B发了消息,但是B是冒充的;B以为A收到了消息,但是A也有可能是冒充的
3.篡改:B确实收到了A的消息,单在途中就被X更改了
4.事后否认:B从A那里收到了消息,但作为消息发送者的A可能对B抱有恶意,不承认这是我发的消息


1.加密基础知识
A发送之前加密,B收到之后解密

对于计算机来说,图片、文本、音频都是用二进制来表示的,数据就是一串有意义的数字罗列
密文也是 数字罗列,只不过他是计算力无法理解的无规律的数字罗列


2.哈希函数
哈希函数可以把给定的数据转换成固定长度的无规律数值

输入相似的数据不会导致输出相似的哈希值
即使输入完全不同的数据,输出的哈希值可能是相同的,哈希冲突。
哈希值是不能反向推出原本的数据

代表:MD5、SHA-1(安全哈希算法(Secure Hash Algorithm))、SHA-2
不同的算法计算的方式也不同,比如SHA-1需要经过数百次的加法和位移运算才能生成哈希值

eg:将用户输入的密码的哈希值保存到数据库内,如果把明文直接保存到数据库,可能被窃听。


3.共享密钥加密
共享密钥加密是加密和解密都使用相同密钥的一种加密方法。
由于使用的密钥相同,也被称为:对称加密。

代表:凯撒密码、AES、DES、动态口令等
AES的应用最为广泛
凯撒密码:最简单且最广为人知的加密技术,替换加密技术,明文中所有字母都在字母表上向前或者后一个固定的数目进行偏移
AES:高级加密标准(英语:Advanced Encryption Standard,缩写:AES)
DES:DES全称为Data Encryption Standard,即数据加密标准

存在的问题:如何安全的把密钥发过去?


4.公开密钥加密
由于使用的密钥不同,所以这种算法也被称为:非对称加密。
加密用的密钥叫做:公开密钥,解密用的密钥叫做:私有密钥

首先接收方码生成公开密钥和私有密钥
然后把公开密钥发送给A
A使用B发来的公开密钥加密数据
B收到后使用私有密钥进行解密,就得到了原本的数据

代表:RAS算法、椭圆曲线加密算法
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。

解决的问题:虽然公开密钥可能被窃听,但是使用公开密钥无法解开密文

还存在的问题:
X想要窃听A发给B的数据
X也准备了公开密钥和私有密钥
在B把公开密钥发给A的时候,X把这个公开密钥替换成自己的公开密钥
A收到这个密钥后,他不知道是谁生成的,所以不会发现问题,继续发送
X收到了这个密文,就可以用自己的私有密钥解密,自定义修改
再通过B的公开密钥进行加密,发送给B
这样B也不会感觉到有任何问题
通过中途替换公开密钥来窃听数据的攻击方法:中间人攻击

存在的问题:A无法判断收到的公开密钥是否来自B
性能问题:加密和解密都比较耗时,不适合发送持续零散的数据,要想解决这个问题可以用:混合加密。


5.混合加密
共享密钥存在无法安全传输密钥的密钥分配问题,公开密钥加密又存在解密速度较慢的问题。
结合两种方法实现互补的方法:混合加密

用处理速度较快的共享密钥加密对数据进行加密。

B先生成公开密钥和私有密钥
B将公开密钥发送给A
A收到公开密钥,对共享密钥加密,再把加密的后密钥发送给B
B使用私有密钥进行解密,这样双方就有了共享密钥
然后通过共享密钥进行加密发送数据

代表:为网络提供通信安全的SSL协议也应用了混合加密方法
SSL:Secure Sockets Layer 安全套接层
如今已经升级改名为TLS:Transport Layer Security 传输层安全
因此该协议也被称为SSL/TLS


6.迪菲-赫尔曼(Diffie-Hellman)密钥交换
是一种可以在通信双方之间安全交换密钥的方法。

假设有一种方法可以合成两个密钥。使用这种方法合成密钥P和密钥S就为密钥PS
特征:
1.即使持有密钥P和密钥PS,无法得到密钥S
2.合成后的密钥还可以继续合成
3.密钥的合成结果与顺序无关,PAS=APS

算法图解

实际算法:
由A准备一个非常大的素数P、与其所对应的生成元中的一个G
A将P、G发送给B
B收到后,AB分别准备了各自的神秘数字XY(XY都必须小于P-2)
AB分别计算 G的秘密数字次方 对 P 取模(比如A:G^x mod P)
然后AB分别将自己的计算结果发送给对方
收到后,先计算这个值的秘密次方(比如A:G^x mod P ^ x),然后再对 P 取模(G^x mod P ^ x mod P = G^xy mod P)
这样AB共同拥有了加密密钥的数字: G^xy mod P

若存在X窃听整个通信过程,得到的只有:P、G、G^x mode P、G^y mod P,无法得到 G^xy mod P
根据素数P、生成元G和 G^x mode P 求出X的问题就是”离散对数问题“,至今还没找到解法,此算法正是利用了这个难题

实际上,双方并没有交换密钥,而是生成了新的密钥,也被称为:迪菲-赫尔曼密钥协议


7.消息认证码
消息认证码可以实现 认证 和 检测篡改 这两个功能。
密文的内容再传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。

之前一切正常进行,密钥交换以及加密传输
当A正要给B发消息时候,这个密文被X恶意篡改了,而B没有意识到这个问题,
本来发送的是ABC,被篡改后解密得到XYZ,就会返回错误的信息。

解决办法:
A又生成了一个用于制作消息认证码的密钥,然后用安全的方法将密钥发送给B
A使用密文和密钥生成一个值,这个值就是 消息认证码(简称MAC:Message authentication code)
当B收到后,也需要用密文和密钥生成一段MAC,如果一直的话,就没问题。

计算MAC的算法有:HMAC(Hash-base MAC)、OMAC(One-key MAC)、CMAC(Cipher-based MAC)
目前HMAC用途最为广泛

存在的问题:因为双方都能生成MAC、无法证明原本的消息是由A还是B生成的
假如A是坏人,可以发出消息后声称,这个条消息是B捏造的,从而否认自己的行为


8.数字签名
数字签名不仅可以实现消息认证码的认证和检测篡改功能,还能预防事后否认问题的发生
数字签名是只有发信人才能生成的,因此使用它就可以确定谁是消息的发送者。
发送者准备好私有密钥和公有密钥

发送者A将公开密钥发送给B,A再使用私有密钥加密消息,加密后的消息就是数字签名。
B使用公开密钥进行解密,看是否和收到的消息一致
公开密钥加密和解密都比较耗时。实际上都不对消息进行直接加密,先求哈希值,再对哈希值进行加密,然后将其作为签名使用

存在的问题:使用公开密钥无法确定公开密钥的制作者是谁。因为公开密钥有可能是某个冒充A的人生成的


9.数字证书
之前的方法都无法保证公开密钥确实来自信息的发送者
就算公开密钥被第三者恶意替换过,接收方也不会注意到
数字证书,就能保证公开密钥的正确性

A持有公开密钥和私有密钥,想把公开密钥发送给B
A首先要向认证中心(CA:Certification Authoriry)申请发行证书,证明公开密钥确实是自己生成的
认证中心有他们自己的公开密钥和私有密钥
A将公开密钥和包含邮箱信息的个人资料发送给认证中心
认证中心对这个资料进行确认,判断是否为A本人,之后根据自己的私有密钥,根据A的资料生成签名
认证中心再将生成的数字签名和资料放进同一个文件中,把这个文件发送给A,这个文件就是A的数字证书
A把这个作为公开密钥的数字证书发送给B,
B收到数字证书后,确认邮件地址确实是A的地址,然后B获取认证中心的公开密钥,对证书内签名进行验证,判断是否为认证中心给出的签名
确认之后,从中取出公开密钥,这样就OK了

数字证书就是像这样通过认证中心来担保公开密钥的制作者。
这一些列技术规范被统称为:公钥基础设施 (Public Key Infrastructure PKI)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容