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

news2024/11/15 5:26:10

本文从一个输入密码登录场景说起,详细介绍了密码传输过程的改进和思路,最后展现出一个相对安全的传输和存储方案。

点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达

场景

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

  • 用户注册,输入验证码传输到后端保存

  • 用户登录,前端输入密码传输到后端验证

  • 用户支付,需要输入支付密码传输到后端验证

在上述场景中都涉及到了密码涉的传输和存储。这就产生了一个问题,密码作为用户的敏感数据,我们该采取怎样的方案才能保证这个过程中的数据安全。

存在的问题

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

0b6ac9539ed0d0418281c989b0151e82.png

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

  1. 如果输入的密码是明文传输到后端,如果中间链路被人劫持,那就可以直接且听到明文密码数据。

  2. 如果数据库直接存储明文,黑客攻击数据库时就可以轻松获得明文密码数据。

因为大多数用户的常用密码是固定的,如果拿到用户的明文数据,影响范围不只是我们的系统。他们会去其他网站尝试“撞库”,很可能会造成用户的财产损失。作为一个合规的负责任的企业,我们在设计系统时应该考虑这些问题。

为什么会被劫持?

首先说第一个劫持的问题如何解决。

HTTP(超文本传输协议)是用于在网络上传输数据的一种协议。虽然HTTP是广泛使用的协议之一,但它也存在着一些安全风险,例如:

  1. 窃听风险:HTTP是明文传输协议,数据在传输过程中不加密,因此可以被攻击者窃听并获取敏感信息,如用户名、密码、银行卡号等。

  2. 中间人攻击:攻击者可以在传输过程中截取数据包并进行篡改或者注入恶意内容,从而实现攻击。

  3. XSS(跨站脚本)攻击:攻击者利用web应用程序没有对用户输入数据进行过滤或者校验,从而在用户浏览器中执行恶意脚本或者植入恶意代码,进而获取用户敏感信息或者劫持用户会话。

  4. CSRF(跨站请求伪造)攻击:攻击者可以通过伪造用户已认证的请求,以用户的身份执行恶意操作,例如恶意提交表单、发起请求等。

  5. 数据篡改:攻击者可以截获数据并对其进行修改,从而对web应用程序进行攻击。

HTTP 存在如此多的安全问题,那么可以替换为 HTTPS 协议来解决。

HTTPS 降低劫持风险

HTTPS(安全套接字层超文本传输协议)是HTTP协议的安全版本,通过在传输过程中使用加密协议(如SSL或TLS)加密传输的数据,避免了明文传输的风险,并且使用数字证书验证服务器的身份,防止冒充攻击,为Web通信提供了安全保障。HTTPS的主要目的是解决HTTP在传输过程中存在的明文传输和窃听风险。

SSL/TLS协议的主要作用是:

  1. 数据保密性:使用加密算法将数据加密,防止窃听者获取敏感信息。

  2. 数据完整性:使用消息摘要算法和数字签名等技术来保证数据的完整性,防止数据被篡改。

  3. 身份认证:使用数字证书来验证通信对象的身份,防止冒充攻击。

  4. 会话管理:SSL/TLS协议支持会话缓存和会话恢复技术,可以提高通信效率,减少计算和网络资源的消耗。

那么HTTPS请求的完整流程如何,具体时如何保证数据安全的?

70260863894d6fd05dd9a2d07ad58760.png
  1. 客户端向服务器发送请求:客户端在向服务器发送请求时,将使用HTTPS协议代替HTTP协议,并在请求中包含一个安全连接请求,告知服务器该请求需要使用SSL/TLS协议进行加密和解密。

  2. 服务器返回数字证书:如果服务器支持HTTPS协议,它将返回一个数字证书,包含服务器公钥、证书颁发机构等信息。数字证书由可信的第三方机构颁发,用于证明服务器的身份和证书的有效性。

  3. 客户端验证数字证书:客户端会验证数字证书的有效性,包括证书是否过期、证书颁发机构是否可信等。如果数字证书通过验证,客户端将使用其中的公钥来建立安全连接。

  4. 客户端生成会话密钥:在与服务器建立安全连接后,客户端将生成一个会话密钥(称为预主密钥),用于协商加密算法和密钥长度等参数。这里我们称为KEY。

  5. 客户端将预主密钥发送到服务器:客户端将预主密钥(KEY)使用服务器公钥进行加密,并将加密后的预主密钥(KEY)发送到服务器。

  6. 服务器使用私钥解密预主密钥:服务器使用自己的私钥对预主密钥(KEY)进行解密,并使用该预主密钥来协商加密算法、密钥长度和其他参数。对返回结果内容进行加密后传输(这一步就约定好了对称加密算法,完成对称秘钥传输)

  7. 客户端和服务器使用协商的加密算法和密钥进行通信:在通过以上步骤建立了安全连接并完成了协商过程后,客户端和服务器将使用协商的加密算法和主密钥进行通信,保证数据在传输过程中的安全性。

以上是HTTPS请求加密的基本过程,其核心是通过数字证书和加密技术来保证数据在传输过程中的安全性。整个过程第三方即使监听到了数据,因为没有私钥所以无法解密,如果篡改数据服务器将无法解密。

中间人攻击

看起来HTTPS似乎解决了网络传输过程中的安全问题,但是HTTPS的安全完全建立在证书可信的基础上,如果中间人伪造证书怎么办?

中间人攻击(Man-in-the-middle attack, MITM攻击)是指攻击者在通信双方之间进行了非法的拦截、篡改和注入操作,从而能够窃取双方之间的信息和敏感数据。只要黑客诱导用户安装非法证书,他就可以模拟服务器,获取到用户传输的信息。那么如何解决呢?

加密算法

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

加密主要有两种方式:对称加密和非对称加密。

对称加密

对称加密是指加密和解密过程使用相同的密钥,也称为共享密钥加密。

  1. A 使用密钥加密。

  2. B 使用相同的密钥解密。

常见的对称加密算法有DES、3DES、AES等,其加密速度快、加密效率高,但密钥的安全性是一个问题,因为加密和解密使用相同的密钥,如果密钥被泄露,那么整个通信过程的安全性就会被破坏。

客户端和服务端进行通信,采用对称加密,如果只使用一个秘钥,很容易破解;如果每次用不同的秘钥,海量秘钥的管理和传输成本又会比较高。

算法热点
DES(Data Encryption Standard)数据加密标准,速度较快,适用于加密大量数据的场合,目前已证实不安全,可用3DES替换
3DES(Triple DES是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高
AES(Advanced Encryption Standard)高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256、512位密钥的加密。是目前最常见的对称加密算法

非对称加密

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

  1. A 生成一把公钥和一把私钥,公钥可以给任何人。

  2. B 拿到公钥,加密后传输给A。

  3. A 使用私钥解密。

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

一般情况下,对称加密和非对称加密会结合使用,例如HTTPS协议就同时使用了对称加密和非对称加密算法。HTTPS建立连接时使用非对称加密算法对密钥进行传输,然后使用对称加密算法来加密数据传输,这样既保证了安全性,又不会影响通信速度。

RSA

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

为什么RSA能够做到非对称加密呢?

互质关系:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系

简单来说,RSA利用的原理是,如果两个互质关系的正整数的乘积足够大,是极难进行因式分解的(目前被破解的最长RSA密钥是768个二进制位,而正常使用的至少是1024位的密钥)。

通过一定的运算,把某计算结果和乘积作为公钥,另一个计算结果和乘积作为私钥,即可以实现,利用公钥进行加密,并利用私钥进行解密。具体的数学公式推导和证明可以参考RSA算法原理。

继续改进流程

知道了加密算法的分类,我们果断采取使用RSA来加密我们的密码。那么我们将密码传输流程改进为下面这个样子,将传输过程分为获取公钥和用公钥加密两步,这样即使有人拦截请求,他也无法解密数据。

0c4d511bd891c9ebcde819b9aa4b6d6a.png

存储加密

现在第一个传输密码的问题已经解决了,那么我们如何存储密码呢?

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

单向加密

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

这样即使是我们开发人员,拿到数据都不知道用户的真实密码,安全性提高了很多,但是还不够。

通常黑客在侵入保存密码的数据库之后,他会随机猜测一个密码,生成一个哈希值。如果该哈希值在数据库中存在,那么他就猜对了一个用户的密码。如果没有猜中也没有关系,他可以再次随机猜测下一个密码进行尝试。

事实上黑客为了提高破解密码的效率,他们会事先计算大量密码对应的各种哈希算法的哈希值,并把密码及对应的哈希值存入一个表格中(这种表格通常被称为彩虹表),在破解密码时只需要到事先准备的彩虹表里匹配即可。因此现在黑客们破解仅仅只用哈希算法加密过的密码事实上已是不费吹灰之力。

加点“盐”

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

为了应对黑客们用彩虹表破解密码,我们可以先往明文密码加盐,然后再对加盐之后的密码用哈希算法加密。由于盐在密码校验的时候还要用到,因此通常盐和密码的哈希值是存储在一起的,我们需要在数据库中为其增加对应的字段。这样我们的密码就安全多了。

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

拿到密文密码并且在服务器解密之后,我们用数据库中的盐(每个用户不同)来拼接明文密码,然后和数据库中的密码做对比,如果相同则登陆成功。

869ac583e1b16fe3210dbda32107df24.png

最后,欢迎大家提问和交流。

如果对你有帮助,欢迎点赞、评论或分享,感谢阅读!

技术人还没有自己的博客?玩转GitHub Pages三部曲!(一)

2023-02-23

c8b6bae2aa02397f5cd3e883d3eacb00.jpeg

MySQL盲点知识,索引命中分析和长度的计算

2023-02-21

45eecfa5f2163aa33a1f89611284c3c8.jpeg

对垃圾收集器一脸懵B,看这篇就对了|金三银四系列

2023-02-19

b049297e130b405d2b05b5ead77f1eda.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

研报精选230302

目录 【个股230302华西证券_比亚迪】系列点评五十四:迪“王”需求向上 出口“海”阔天空【个股230302华西证券_华利集团】下游去库存背景下承压,毛利率保持稳健【个股230302开源证券_恒顺醋业】公司信息更新报告:四季度业绩承压,期…

运维级医院PACS系统全套源代码

PACS系统源码 运维级医院PACS系统源码,有演示,带使用手册和操作说明书 开发环境:VC MSSQL 文末获取方式! PACS系统可实现检查预约、病人信息登记、计算机阅片、电子报告书写、胶片打印、数据备份等一系列满足影像科室日常工作…

每日统计部门人员考勤打卡情况并汇总通知

在值班时,HR需要及时了解到部分人员的打卡情况。这个时候,可以通过腾讯云HiFlow来实现自动通知考勤打卡情况。实现步骤:Step1:我们进入腾讯云HiFlow官网,进入控制台。我们在触发应用选择【定时启动-每天】触发。这里我…

VSCode下载与安装使用教程【超详细讲解】

目录 一、VSCode介绍 二、官方下载地址 三、VSCode安装 1、点击我同意此协议,点击下一步; 2、点击浏览,选择安装路径,点击下一步; 3、添加到开始菜单,点击下一步; 4、根据需要勾选&#…

开创高质量发展新局面,优炫数据库助推数字中国建设

最新印发《数字中国建设整体布局规划》,建设数字中国是数字时代推进中国式现代化的重要引擎,是构筑国家竞争新优势的有力支撑。 数字中国建设按照“2522”的整体框架进行布局,即夯实数字基础设施和数据资源体系“两大基础”,推进…

Java流Stream实战-常用api案例解析

本文介绍java 8 Stream流的常用高频api,通过实战级别的案例进行演示。实现结合实际业务、开发需要来应用技术,不让技术讲解枯燥无味,带来技术落地成生产力的价值。1. 思考,stream 的多个操作,相当于几个for循环&#x…

resultMap 用法?工作中是怎么实现“多表联查”的?

目录 一、resultMap用法 1.1、使用场景 1.2、用法说明 1.2.1、模拟场景 1.2.2、使用 二、多表联查 2.1、分析 2.2、具体步骤 2.3、总结 一、resultMap用法 1.1、使用场景 字段名称和程序中的属性名不同的情况,可使⽤ resultMap 配置映射;⼀对⼀…

英语好不好,不影响做外贸

对于国际贸易而言,英语到底有多重要?还记得我刚去墨西哥的时候,怕语言不通,我还带了一本《西班牙语入门》的书籍,靠着那本书一边说一边学,刚开始的时候很痛苦的。无法想象一个国家大部分的人都不懂得讲英语…

【已解决】nvidia-smi不显示正在使用GPU的进程

目录1 问题背景2 问题探索3 问题解决4 告别Bug1 问题背景 环境: 远程服务器Ubuntu20.04CUDA 11.6 现象:在日志文件和终端均显示Python脚本已使用了GPU 但是nvidia-smi中的Processes进程无显示 2 问题探索 首先,可以看到 | 0 Tesla V…

Android Handler机制(三) Looper源码分析

一. 简介 我们接上一篇文章:Android Handler机制(二) Handler 实现原理 继续分析Looper Looper 的职责很单一,就是单纯的从 MessageQueue 中取出消息分发给消息对应 的宿主 Handler,因此它的代码不多(400行左右) . Looper 是线程独立的且每个线程只能存在…

MySQL运维知识

1 日志1.1 错误日志1.2 二进制日志查看二进制日志:mysqlbinlog ./binlog.000007purge master logs to binlog.000006reset mastershow variables like %binlog_expire_logs_seconds%默认二进制文件只存放30天,30天后会自动删除。1.3 查询日志1.4 慢查询日…

React(四):事件总线、setState的细节、PureComponent、ref

React(四)一、事件总线二、关于setState的原理1.setState的三种使用方式(1)基本使用(2)传入一个回调(3)第一个参数是对象,第二个参数是回调2.为什么setState要设置成异步…

Android kotlin实战之协程suspend详解与使用

前言 Kotlin 是一门仅在标准库中提供最基本底层 API 以便各种其他库能够利用协程的语言。与许多其他具有类似功能的语言不同,async 与 await 在 Kotlin 中并不是关键字,甚至都不是标准库的一部分。此外,Kotlin 的 挂起函数 概念为异步操作提供…

π型滤波器 计算_π型滤波电路

滤波器在功率和音频电子中常用于滤除不必要的频率。而电路设计中,基于不同应用有着许多不同种类的滤波器,但它们的基本理念都是一致的,那就是移除不必要的信号。所有滤波器都可以被分为两类,有源滤波器和无源滤波器。有源滤波器用…

重新认识 Java 中的内存映射(mmap)

mmap 基础概念 mmap 是一种内存映射文件的方法,即将一个文件映射到进程的地址空间,实现文件磁盘地址和一段进程虚拟地址的映射。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页到对应的文…

电源程控软件下载安装教程

软件:电源程控软件NS-PowerSupply 语言:简体中文 环境:NI-VISA 安装环境:Win10以上版本(特殊需求请后台私信联系客服) 硬件要求:CPU2GHz 内存4G(或更高)硬盘500G(或更高&#xf…

2023年2月安全事件盘点

一、基本信息 2023年2月安全事件共造成约3796万美元损失,相较于上个月,安全事件数量与损失金额都有显著上升,其中Platypus Finance闪电贷攻击为单次利用损失之最高达850万美元。本月RugPull数量基本与上月持平,损失金额占比显著降…

网站打不开数据库错误等常见问题解决方法

1、“主机开设成功!”上传数据后显示此内容,是因为西部数码默认放置的index.htm内容,需要核实wwwroot目录里面是否有自己的程序文件,可以删除index.htm。 2、恭喜,lanmp安装成功!这个页面是wdcp的默认页面&…

用 Real-ESRGAN 拯救座机画质,自制高清版动漫资源

内容一览:Real-ESRGAN 是 ESRGAN 升级之作,主要有三点创新:提出高阶退化过程模拟实际图像退化,使用光谱归一化 U-Net 鉴别器增加鉴别器的能力,以及使用纯合成数据进行训练。 关键词:Real-ESRGAN 超分辨率 视…

一文彻底搞懂cookie、session、token、jwt!

前言 随着Web应用程序的出现,直接在客户端上存储用户信息的需求也随之出现。者背后的想象时合法的:与特定用户相关的信息都应该保存在用户的机器上。无论是登录信息、个人偏好、还是其他数据,Web应用程序提供者都需要有办法 将他们保存在客户…