13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

一文搞懂Web中暗藏的密码学

前言

宝山网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

开发网站登录功能时,如何保证密码在传输过程/储存的安全?

相信不少前后端的朋友,在面试时都会被问到类似的问题。

在我对密码学一无所知时,也仅会回答:“MD5加密啊。”

诸不知,密码学在网络七层模型,甚至web开发中的应用比我想象得多得多。

1. 什么是密码学?

密码学是各种安全应用程序所必需的,现代密码学旨在创建通过应用数学原理和计算机科学来保护信息的机制。但相比之下,密码分析旨在解密此类机制,以便获得对信息的非法访问。

密码学具有三个关键属性:

例如个人医疗数据:

在本文中,我们将从加密,哈希,编码和混淆四种密码学基础技术来入门。

2. 什么是加密?

加密定义:以保证机密性的方式转换数据的过程。

为此,加密需要使用一个保密工具,就密码学而言,我们称其为“密钥”。

加密密钥和任何其他加密密钥应具有一些属性:

2.1 加密的分类:对称和非对称

加密分为两类:对称和非对称

对称加密:

用途:文件系统加密,Wi-Fi 保护访问(WPA),数据库加密(例如信用卡详细信息)

非对称加密:

用途:TLS,VPN,SSH。

其主要区别是:所需的密钥数量:

  1. 通常使用非对称加密来在不安全的通道上进行通信时,两方之间会安全地建立公共密钥。
  2. 通过此共享密钥,双方切换到对称加密。
  3. 这种加密速度更快,更适合处理大量数据。

能被密码界承认的加密算法都是公开的:

3. 什么是哈希?

哈希算法定义:·一种只能加密,不能解密的密码学算法,可以将任意长度的信息转换成一段固定长度的字符串。

加密算法是可逆的(使用密钥),并且可以提供机密性(某些较新的加密算法也可以提供真实性),而哈希算法是不可逆的,并且可以提供完整性,以证明未修改特定数据。

哈希算法的前提很简单:给定任意长度的输入,输出特定长度的字节。在大多数情况下,此字节序列对于该输入将是唯一的,并且不会给出输入是什么的指示。换一种说法:

  1. 仅凭哈希算法的输出,是无法确定原始数据的。
  2. 取一些任意数据以及使用哈希算法输出,就可以验证此数据是否与原始输入数据匹配,从而无需查看原始数据。

为了说明这一点,请想象一个强大的哈希算法通过将每个唯一输入放在其自己的存储桶中而起作用。当我们要检查两个输入是否相同时,我们可以简单地检查它们是否在同一存储桶中。

散列文件的存储单位称为桶(Bucket)

3.1 例子一:资源下载

提供文件下载的网站通常会返回每个文件的哈希值,以便用户可以验证其下载副本的完整性。

例如,在Debian的图像下载服务中,您会找到其他文件,例如SHA256SUMS,其中包含可供下载的每个文件的哈希输出(在本例中为SHA-256算法)。

在终端中,可以用openssl来对文件进行哈希处理:

 
 
 
 
  1. $ openssl sha256 /Users/hiro/Downloads/非对称.png
  2. SHA256(/Users/hiro/Downloads/非对称.png)= 7c264efc9ea7d0431e7281286949ec4c558205f690c0df601ff98d59fc3f4f64

同一个文件采用相同的hash算法时,就可以用来校验是否同源。

在强大的哈希算法中,如果有两个不同的输入,则几乎不可能获得相同的输出。

而相反的,如果计算后的结果范围有限,就会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。(两个不同的数据计算后的结果一样)

这种称为:哈希碰撞(哈希冲突)。

如果两个不同的输入最终出现在同一个存储桶中,则会发生冲突。如MD5和SHA-1,就会出现这种情况。这是有问题的,因为我们无法区分哪个碰撞的值匹配输入。

强大的哈希算法几乎会为每个唯一输入创建一个新存储桶。

3.2 例子二:网站登陆

在web开发中,哈希算法使用最频繁的是在网站登陆应用上:

绝大多数的网站,在将登陆数据存入时,都会将密码哈希后存储。

注册:

登陆:

哈希算法的一个有趣的方面是:无论输入数据的长度如何,散列的输出始终是相同的长度。

从理论上讲,碰撞冲突将始终在可能性的范围之内,尽管可能性很小。

与之相反的是编码。

4. 什么是编码?

编码定义:将数据从一种形式转换为另一种形式的过程,与加密无关。

它不保证机密性,完整性和真实性这三种加密属性,因为:

4.1 URL编码

又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了:

现在已经成为一种规范了,基本所有程序语言都有这种编码,如:

编码方法很简单,在该字节ascii码的 16 进制字符前面加%. 如 空格字符,ascii码是 32,对应 16 进制是'20',那么urlencode编码结果是:%20。

 
 
 
 
  1. # 源文本:
  2. The quick brown fox jumps over the lazy dog
  3. # 编码后:
  4. #!shell
  5. %54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67

4.2 HTML实体编码

在HTML中,需要对数据进行HTML编码以遵守所需的HTML字符格式。转义避免 XSS 攻击也是如此。

4.3 Base64/32/16编码

base64、base32、base16可以分别编码转化 8 位字节为 6 位、5 位、4 位。

16,32,64 分别表示用多少个字符来编码,

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME,在XML中存储复杂数据。

编码原理:

Base64编码要求把 3 个 8 位字节转化为 4 个 6 位的字节

之后在 6 位的前面补两个 0,形成 8 位一个字节的形式

6 位 2 进制能表示的最大数是 2 的 6 次方是 64,这也是为什么是 64 个字符的原因

A-Z,a-z,0-9,+,/这 64 个编码字符,=号不属于编码字符,而是填充字符

Base64映射表,如下:

举个栗子:

上面的示例旨在指出,编码的用例仅是数据处理,而不为编码的数据提供保护。

4. 什么是混淆?

混淆定义:将人类可读的字符串转换为难以理解的字符串。

尽管不能保证机密性,但混淆仍有其它应用:

但是,如此存在许多有助于消除应用程序代码混淆的工具。那就是其它话题了。。。

4.1 例子一:JavaScript混淆

JavaScript源代码:

 
 
 
 
  1. function hello(name) {
  2.   console.log('Hello, ' + name);
  3. }
  4. hello('New user');

混淆后:

 
 
 
 
  1. var _0xa1cc=["\x48\x65\x6C\x6C\x6F\x2C\x20","\x6C\x6F\x67","\x4E\x65\x77\x20\x75\x73\x65\x72"];
  2. function hello(_0x2cc8x2){console[_0xa1cc[1]](_0xa1cc[0]+ _0x2cc8x2 "_0xa1cc[1]")}hello(_0xa1cc[2])

总结

从机密性,完整性,真实性分析四种密码技术:

附录:哈希函数常用的哈希函数:

在密码学界有句常话:越慢的算法越安全。算法越算,黑客破解成本越高:

通过salt和const这两个值来减缓加密过程,ta 的加密时间(百 ms 级)远远超过md5(大概1ms左右)。

对于计算机来说,Bcrypt 的计算速度很慢,但是对于用户来说,这个过程不算慢。

bcrypt是单向的,而且经过salt和cost的处理,使其受rainbow攻击破解的概率大大降低,同时破解的难度也提升不少。

相对于MD5等加密方式更加安全,而且使用也比较简单.

后记 & 引用

那么,如何保证密码在传输过程/储存的安全呢?

参考资料

How Secure Are Encryption, Hashing, Encoding and Obfuscation?: https://auth0.com/blog/how-secure-are-encryption-hashing-encoding-and-obfuscation/#What-is-Encoding-

引自:一篇文章彻底弄懂Base64编码原理: https://blog.csdn.net/wo541075754/article/details/81734770

How Secure Are Encryption, Hashing, Encoding and Obfuscation?: https://auth0.com/blog/how-secure-are-encryption-hashing-encoding-and-obfuscation/#What-is-Encoding-

CTF中那些脑洞大开的编码和加密: https://www.cnblogs.com/godoforange/articles/10850493.html

散列文件的存储——‘桶’: https://blog.csdn.net/Dearye_1/article/details/78492021


新闻名称:一文搞懂Web中暗藏的密码学
文章源于:http://cdbrznjsb.com/article/djojpji.html

其他资讯

让你的专属顾问为你服务