本文从一个输入密码登录场景说起,详细介绍了密码传输过程的改良和思绪,最初展示出一个相对平安的传输和存储计划。

场景

在互联网项目中,我们经常会碰到以下场景:

用户注册,输入验证码传输到后端保留用户登录,前端输入密码传输到后端验证用户付出,需要输入付出密码传输到后端验证

在上述场景中都涉及到了密码的传输和存储。那就产生了一个问题,密码做为用户的敏感数据,我们该采纳如何的计划才气包管那个过程中的数据平安。

存在的问题

那里我们以登录场景说起。你可能会说,那多简单,那不就是前端输入密码,然后保留到后端密码,或者间接从MySQL中查询出密码比照一下不就好了吗?

密码传输和存储,如何保证数据安全?  第1张

先说说,若是没有特殊处置关于密码的传输和存储会有哪些问题。

若是输入的密码是明文传输到后端,若是中间链路被人劫持,那就能够间接窃听到明文密码数据。若是数据库间接存储明文,黑客攻击数据库时就能够轻松获得明文密码数据。

因为大大都用户的常用密码是固定的,若是拿到用户的明文数据,影响范畴不但是我们的系统。他们会去其他网站测验考试“碰库”,很可能会形成用户的财富丧失。做为一个合规的负责任的企业,我们在设想系统时应该考虑那些问题。

为什么会被劫持?

起首说第一个劫持的问题若何处理。

HTTP(超文本传输协议)是用于在收集上传输数据的一种协议。固然HTTP是普遍利用的协议之一,但它也存在着一些平安风险,例如:

窃听风险:HTTP是明文传输协议,数据在传输过程中不加密,因而能够被攻击者窃听并获取敏感信息,如用户名、密码、银行卡号等。中间人攻击:攻击者能够在传输过程中截取数据包并停止窜改或者注入歹意内容,从而实现攻击。XSS(跨站脚本)攻击:攻击者操纵web应用法式没有对用户输入数据停止过滤或者校验,从而在用户阅读器中施行歹意脚本或者植入歹意代码,进而获取用户敏感信息或者劫持用户会话。CSRF(跨站恳求伪造)攻击:攻击者能够通过伪造用户已认证的恳求,以用户的身份施行歹意操做,例如歹意提交表单、倡议恳求等。数据窜改:攻击者能够截获数据并对其停止修改,从而对web应用法式停止攻击。

HTTP 存在如斯多的平安问题,那么能够替代为 HTTPS 协议来处理。

HTTPS 降低劫持风险

HTTPS(平安套接字层超文本传输协议)是HTTP协议的平安版本,通过在传输过程中利用加密协议(如SSL或TLS)加密传输的数据,制止了明文传输的风险,而且利用数字证书验证办事器的身份,避免冒充攻击,为Web通信供给了平安保障。HTTPS的次要目标是处理HTTP在传输过程中存在的明文传输和窃听风险。

SSL/TLS协议的次要感化是:

数据保密性:利用加密算法将数据加密,避免窃听者获取敏感信息。数据完好性:利用动静摘要算法和数字签名等手艺来包管数据的完好性,避免数据被窜改。身份认证:利用数字证书来验证通信对象的身份,避免冒充攻击。会话办理:SSL/TLS协议撑持会话缓存和会话恢复手艺,能够进步通信效率,削减计算和收集资本的消耗。

那么HTTPS恳求的完好流程若何,详细是若何包管数据平安的?

密码传输和存储,如何保证数据安全?  第2张

客户端向办事器发送恳求:客户端在向办事器发送恳求时,将利用HTTPS协议取代HTTP协议,并在恳求中包罗一个平安毗连恳求,告知办事器该恳求需要利用SSL/TLS协议停止加密息争密。办事器返回数字证书:若是办事器撑持HTTPS协议,它将返回一个数字证书,包罗办事器公钥、证书颁布机构等信息。数字证书由可信的第三方机构颁布,用于证明办事器的身份和证书的有效性。客户端验证数字证书:客户端会验证数字证书的有效性,包罗证书能否过时、证书颁布机构能否可信等。若是数字证书通过验证,客户端将利用此中的公钥来成立平安毗连。客户端生成会话密钥:在与办事器成立平安毗连后,客户端将生成一个会话密钥(称为预主密钥),用于协商加密算法和密钥长度等参数。那里我们称为KEY。客户端将预主密钥发送到办事器:客户端将预主密钥(KEY)利用办事器公钥停止加密,并将加密后的预主密钥(KEY)发送到办事器。办事器利用私钥解密预主密钥:办事器利用本身的私钥对预主密钥(KEY)停止解密,并利用该预主密钥来协商加密算法、密钥长度和其他参数。对返回成果内容停止加密后传输(那一步就约定好了对称加密算法,完成对称密钥传输)客户端和办事器利用协商的加密算法和密钥停止通信:在通过以上步调成立了平安毗连并完成了协商过程后,客户端和办事器将利用协商的加密算法和主密钥停止通信,包管数据在传输过程中的平安性。

以上是HTTPS恳求加密的根本过程,其核心是通过数字证书和加密手艺来包管数据在传输过程中的平安性。整个过程第三方即便监听到了数据,因为没有私钥所以无法解密,若是窜改数据办事器将无法解密。

中间人攻击

看起来HTTPS似乎处理了收集传输过程中的平安问题,但是HTTPS的平安完全成立在证书可信的根底上,若是中间人伪造证书怎么办?

中间人攻击(Man-in-the-middle attack, MITM攻击)是指攻击者在通信两边之间停止了不法的拦截、窜改和注入操做,从而可以窃取两边之间的信息和敏感数据。只要黑客诱导用户安拆不法证书,他就能够模仿办事器,获取到用户传输的信息。那么若何处理呢?

加密算法

既然黑客可能获取到明文数据,那我们加密不就好了嘛。所以,在利用加密算法前我们先简单领会下加密算法。

加密次要有两种体例:对称加密和非对称加密。

对称加密

对称加密是指加密息争密过程利用不异的密钥,也称为共享密钥加密。

A 利用密钥加密。B 利用不异的密钥解密。

常见的对称加密算法有DES、3DES、AES等,其加密速度快、加密效率高,但密钥的平安性是一个问题,因为加密息争密利用不异的密钥,若是密钥被泄露,那么整个通信过程的平安性就会被毁坏。

客户端和办事端停止通信,接纳对称加密,若是只利用一个密钥,很容易破解;若是每次用差别的秘钥,海量秘钥的办理和传输成本又会比力高。

算法热点DES(Data Encryption Standard)数据加密尺度,速度较快,适用于加密大量数据的场所,目前已证明不平安,可用3DES替代3DES(Triple DES是基于DES,对一块数据用三个差别的密钥停止三次加密,强度更高AES(Advanced Encryption Standard)高级加密尺度,是下一代的加密算法尺度,速度快,平安级别高,撑持128、192、256、512位密钥的加密。是目前最常见的对称加密算法

非对称加密

非对称加密则利用两个密钥:公钥和私钥。公钥能够向任何人公开,用于加密数据,而私钥只要密钥的持有者才气利用,用于解密数据。

A 生成一把公钥和一把私钥,公钥能够给任何人。B 拿到公钥,加密后传输给A。A 利用私钥解密。

常见的非对称加密算法有RSA、DSA、ECC等。非对称加密算法的平安性很高,因为密钥是成对呈现的,只要私钥的持有者才气解密数据,而私钥凡是保留在计算机的平安存储区中,不容易泄露。

一般情况下,对称加密和非对称加密会连系利用,例如HTTPS协议就同时利用了对称加密和非对称加密算法。HTTPS成立毗连时利用非对称加密算法对密钥停止传输,然后利用对称加密算法来加密数据传输,如许既包管了平安性,又不会影响通信速度。

RSA

RSA加密算法是一种非对称加密算法,它由Ron Rivest、Adi Shamir和Leonard Adleman三位密学家于1977年配合提出。RSA加密算法的平安性基于数学难题,目前是公认的一种较为平安的加密算法。公钥私钥成对呈现,用此中一个加密只能用另一个解密,凡是用公钥加密私钥解密。

为什么RSA可以做到非对称加密呢?

互量关系:若是两个正整数,除了1以外,没有其他公因子,我们就称那两个数是互量关系

简单来说,RSA操纵的原理是,若是两个互量关系的正整数的乘积足够大,是极难停止因式合成的(目前被破解的最长RSA密钥是768个二进造位,而一般利用的至少是1024位的密钥)。

通过必然的运算,把某计算成果和乘积做为公钥,另一个计算成果和乘积做为私钥,即能够实现,操纵公钥停止加密,并操纵私钥停止解密。详细的数学公式推导和证明能够参考RSA算法原理。

继续改良流程

晓得了加密算法的分类,我们判断采纳利用RSA来加密我们的密码。那么我们将密码传输流程改良为下面那个样子,将传输过程分为获取公钥和用公钥加密两步,如许即便有人拦截恳求,他也无法解密数据。

密码传输和存储,如何保证数据安全?  第3张

存储加密

如今第一个传输密码的问题已经处理了,那么我们若何存储密码呢?

若是用明文存储密码(不论是存在数据库仍是日记中),一旦数据泄露,所有用户的密码就毫无保留地表露在黑客的面前,开头提到的风险就可能发作,那我们费半天劲加密传输密码也失去了意义。

单向加密

单向加密算法指的是只能从明文生成一个对应的哈希值,不克不及反过来按照哈希值得到对应的明文。经常被各人用来加密的算法有MD5和SHA系列(如SHA1、SHA256、SHA384、SHA512等)。

如许即便是我们开发人员,拿到数据都不晓得用户的实在密码,平安性进步了良多,但是还不敷。

凡是黑客在侵入保留密码的数据库之后,他会随机推测一个密码,生成一个哈希值。若是该哈希值在数据库中存在,那么他就猜对了一个用户的密码。若是没有料中也没有关系,他能够再次随机推测下一个密码停止测验考试。

事实上黑客为了进步破解密码的效率,他们会事先计算大量密码对应的各类哈希算法的哈希值,并把密码及对应的哈希值存入一个表格中(那种表格凡是被称为彩虹表),在破解密码时只需要到事先筹办的彩虹内外婚配即可。因而如今黑客们破解仅仅只用哈希算法加密过的密码事实上已是不费吹灰之力。

加点“盐”

盐salt:一个随机的字符串,往明文密码里加盐就是把明文密码和一个随机的字符串拼接在一路。

为了应对黑客们用彩虹表破解密码,我们能够先往明文密码加盐,然后再对加盐之后的密码用哈希算法加密。因为盐在密码校验的时候还要用到,因而凡是盐和密码的哈希值是存储在一路的,我们需要在数据库中为其增加对应的字段。如许我们的密码就平安多了。

继续改良我们的流程,如下。

拿到密文密码而且在办事器解密之后,我们用数据库中的盐(每个用户差别)来拼接明文密码,然后和数据库中的密码做比照,若是不异则登岸胜利。

密码传输和存储,如何保证数据安全?  第4张

最初,欢送各人发问和交换。