前端该知道些密码学和安全上的事儿
副标题[/!--empirenews.page--]
今年至少有六个月的时间在和密码学,安全,隐私上的事情打交道,很有必要为今年总结一篇收官之作,整篇文章会描述一些基础概念,以及我力所能及的一些理解,这份知识很有可能不准确,主要让前端的同学们有一些概念,知道有这么回事,大佬轻拍; 密码学浅识 在密码学的世界里加密之前的消息被称为明文 plaintext,加密之后的消息被称为密文ciphertext,如果一段密文需要被解密再阅读,这个过程被称之为 decrypt,反之一段plaintext 需要被加密,这个过程被称之为 encrypt。那么在处理这些问题的过程(解决加密/解密的步骤)通常被称之为 算法,加密算法和解密算法被组合起来叫 密码算法。 目前我个人所接触到的主要是:
其中对于公钥证书的数字签名等等。别着急,这些概念性的内容可能会非常的枯燥,因此我并不会描述很多,反而从实际性的问题出发,举例在前端的领域中,上述三个方向上着重解决什么问题。
对称密码 比较典型的如 AES ,它是指在加密和解密的过程中使用同一个 密钥 的处理这个过程。我们知道,目前在中国大陆的Web世界中(不仅是Web也包括App),二维码的流行程度几乎很多场景里都有使用,这种不经过网络的直接获取数据,非常适合使用这种对称加密/解密的方式来传输数据,前端这边会使用 crypto-js 来处理 AES,这个 Google 开源的库支持 AES-128,AES-192,AES-256:
单向散列函数 这个函数如果要举例的话比较典型的有我们下载任何软件包时同时会校验一下MD5值来防止下载的软件包是一个被篡改的软件包。单向散列函数就是为了计算散列值而准备的函数,crypto-js包中不仅提供了 md5,hmac 也有 sha256 。如果有一天前端和服务端约定要对数据进行校验,当然最简单的方式是 md5 ,但这已经是一种不安全的计算了,最好使用 sha256:
非对称密码 密码学的那本书里讲了很多密钥分配的问题,这种思考确实...很烧脑,不过这种前辈经历过的思考,在我们的实际应用中其实会有一个很有趣的过程。非对称密码,就是将密钥分了两个部分:加密密钥和解密密钥,发送者使用加密密钥对消息进行加密,接收者使用解密密钥进行解密。在这里加密密钥是可以被公开的,只有解密密钥是绝对不能被公开的。那么这其中使用了什么样的算法来生成密钥对(说实话,我也不是很清楚,因为没看懂),但前端的同学们了解到非对称密码还是很有必要。对于加密密钥它被称之为 `public key`,对应的解密密钥被称之为 `private key`,目前被广泛使用的公钥密码算法叫做 `RSA`。 除了加密之外,非对称密码还可以解决身份认证的问题,想一想如果有人伪装了一个和你一样的微信,同样的头像和昵称,同样的说话语气,诈骗集团极有可能因此从你处获取到真正的经济利益。因为非对称密码的公钥是可以公开的,一个人对应一个公钥,在密码的世界里,根本无法伪装,因为无法解密也无法得到认证。 我想如果你会写 Web 版的区块链钱包或者钱包,非对称密码的使用频率还是相当高的,除此之外它所在的场景会特别的特殊(前端而言),不过如果在其他的领域,会比较常见。 Web Crypto API Web Crypto API 为脚本提供加密了一套关于密码(学)的接口,以便用于构建需要使用密码的系统。这套API的基础特性是允许在脚本中使用和维护密钥的存储,但是不允许使用JavaScript访问这些密钥本身。 Web Crypto API 必须在 HTTPS 网页中才能被使用(Chrome) 这套接口允许脚本使用以下功能:
使用 Web Crypto API 的原因是我所使用的 PKI.js 依赖了 Web Crypto API 。 (编辑:核心网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |