系统设计——系统安全

news2024/11/18 17:27:01

HTTPS 是如何工作的?

安全超文本传输​​协议(HTTPS)是超文本传输​​协议(HTTP)的扩展。HTTPS 使用传输层安全性(TLS)传输加密数据。如果数据在网上被劫持,劫持者得到的只是二进制代码。

数据是如何加密和解密的?

步骤 1 - 客户端(浏览器)和服务器建立 TCP 连接。

第 2 步 - 客户端向服务器发送“客户端问候”。该消息包含一组必要的加密算法(密码套件)及其可以支持的最新 TLS 版本。服务器响应“server hello”,以便浏览器知道它是否可以支持算法和 TLS 版本。

然后服务器将 SSL 证书发送给客户端。证书包含公钥、主机名、到期日期等。客户端验证证书。

步骤 3 - 验证 SSL 证书后,客户端生成会话密钥并使用公钥对其进行加密。服务器接收加密的会话密钥并用私钥解密。

步骤 4 - 现在客户端和服务器都持有相同的会话密钥(对称加密),加密的数据将在安全的双向通道中传输。

为什么HTTPS在数据传输过程中会切换为对称加密?主要原因有两个:

  1. 安全性:非对称加密只有一种方式。这意味着如果服务器尝试将加密数据发送回客户端,任何人都可以使用公钥解密数据。

  2. 服务器资源:非对称加密增加了相当多的数学开销。它不适合长时间会话中的数据传输。

Oauth 2.0 用简单的术语解释。

OAuth 2.0 是一个强大且安全的框架,允许不同的应用程序代表用户安全地相互交互,而无需共享敏感凭据。

OAuth 涉及的实体是用户、服务器和身份提供者 (IDP)。

OAuth 令牌可以做什么?

当您使用 OAuth 时,您将获得代表您的身份和权限的 OAuth 令牌。这个令牌可以做一些重要的事情:

单点登录 (SSO):使用 OAuth 令牌,您只需一次登录即可登录多个服务或应用程序,让生活变得更轻松、更安全。

跨系统授权:OAuth 令牌允许您跨各个系统共享您的授权或访问权限,因此您不必在各处单独登录。

访问用户配置文件:具有 OAuth 令牌的应用程序可以访问您允许的用户配置文件的某些部分,但它们不会看到所有内容。

请记住,OAuth 2.0 的目的是确保您和您的数据安全,同时让您在不同的应用程序和服务中获得无缝、无忧的在线体验。

四种主要的身份验证机制形式

 

  1. SSH 密钥:

    加密密钥用于安全地访问远程系统和服务器

  2. OAuth 令牌:

    提供对第三方应用程序上的用户数据的有限访问的令牌

  3. SSL 证书:

    数字证书确保服务器和客户端之间的安全和加密通信

  4. 证书:

    用户身份验证信息用于验证和授予对各种系统和服务的访问权限

会话、cookie、JWT、令牌、SSO 和 OAuth 2.0 - 它们是什么?

这些术语都与用户身份管理相关。当您登录网站时,您声明您是谁(身份)。您的身份已得到验证(身份验证),并且您被授予必要的权限(授权)。过去已经提出了许多解决方案,并且这个列表还在不断增加。

从简单到复杂,以下是我对用户身份管理的理解:

  • WWW-Authenticate 是最基本的方法。浏览器会要求您输入用户名和密码。由于无法控制登录生命周期,目前很少使用。

  • 对登录生命周期更精细的控制是session-cookie。服务器维护会话存储,浏览器保存会话的ID。 Cookie 通常仅适用于浏览器,对移动应用程序不友好。

  • 为了解决兼容性问题,可以使用token。客户端将令牌发送到服务器,服务器验证令牌。缺点是需要对token进行加密和解密,这可能比较耗时。

  • JWT 是表示令牌的标准方式。该信息可以被验证和信任,因为它是经过数字签名的。由于JWT包含签名,因此不需要在服务器端保存会话信息。

  • 通过使用 SSO(单点登录),您只需登录一次即可登录多个网站。它使用CAS(中央身份验证服务)来维护跨站点信息。

  • 通过使用 OAuth 2.0,您可以授权一个网站访问您在另一网站上的信息。

如何将密码安全地存储在数据库中以及如何验证密码?


 

不该做的事情

  • 以纯文本形式存储密码不是一个好主意,因为具有内部访问权限的任何人都可以看到它们。

  • 直接存储密码哈希值是不够的,因为它会被修剪以防止预计算攻击,例如彩虹表。

  • 为了减轻预计算攻击,我们对密码加盐。

什么是盐?

根据 OWASP 指南,“盐是一个独特的、随机生成的字符串,作为哈希过程的一部分添加到每个密码中”。

如何存储密码和盐?

  1. 每个密码的哈希结果都是唯一的。
  2. 密码可以使用以下格式存储在数据库中:hash(password + salt)。

如何验证密码?

要验证密码,可以经过以下过程:

  1. 客户端输入密码。
  2. 系统从数据库中获取相应的salt。
  3. 系统将盐附加到密码并对其进行哈希处理。我们将哈希值称为 H1。
  4. 系统比较H1和H2,其中H2是存储在数据库中的哈希值。如果相同,则密码有效。

向 10 岁的孩子解释 JSON Web Token (JWT)

 

假设您有一个名为 JWT 的特殊盒子。在这个盒子里,有三个部分:标头、有效负载和签名。

标题就像盒子外面的标签。它告诉我们它是什么类型的盒子以及它是如何固定的。它通常以称为 JSON 的格式编写,这只是使用大括号 { } 和冒号 : 组织信息的一种方式。

有效负载就像您要发送的实际消息或信息。它可以是您的姓名、年龄或您想要共享的任何其他数据。它也是以 JSON 格式编写的,因此很容易理解和使用。 现在,签名是 JWT 安全的保证。它就像一个只有发送者知道如何创建的特殊印章。签名是使用密码创建的,有点像密码。此签名确保任何人都无法在发送者不知情的情况下篡改 JWT 的内容。

当您想要将 JWT 发送到服务器时,您可以将标头、有效负载和签名放入框中。然后您将其发送到服务器。服务器可以轻松读取标头和有效负载,以了解您是谁以及您想要做什么。

Google 身份验证器(或其他类型的二因素身份验证器)如何工作?

当启用两步身份验证时,Google 身份验证器通常用于登录我们的帐户。它如何保障安全?

Google Authenticator 是一种基于软件的身份验证器,可实现两步验证服务。下图提供了详细信息。

涉及两个阶段:

  • 第 1 阶段 - 用户启用 Google 两步验证。
  • 第 2 阶段 - 用户使用身份验证器进行登录等。

让我们看看这些阶段。

阶段1

步骤 1 和 2:Bob 打开网页以启用两步验证。前端请求密钥。身份验证服务为 Bob 生成密钥并将其存储在数据库中。

步骤3:认证服务向前端返回URI。 URI 由密钥颁发者、用户名和密钥组成。 URI以二维码的形式显示在网页上。

步骤 4:Bob 然后使用 Google Authenticator 扫描生成的二维码。密钥存储在验证器中。

第 2 阶段 第 1 步和第 2 步:Bob 想要登录具有 Google 两步验证的网站。为此,他需要密码。每 30 秒,Google 身份验证器就会使用 TOTP(基于时间的一次性密码)算法生成一个 6 位数字的密码。 Bob 使用密码进入网站。

步骤3和4:前端将Bob输入的密码发送到后端进行身份验证。身份验证服务从数据库中读取密钥,并使用与客户端相同的 TOTP 算法生成 6 位密码。

步骤5:认证服务比较客户端和服务器生成的两个密码,并将比较结果返回给前端。仅当两个密码匹配时,Bob 才能继续登录过程。

这种认证机制安全吗?

  • 秘钥可以被其他人获取吗?

    我们需要确保使用 HTTPS 传输密钥。验证器客户端和数据库存储密钥,我们需要确保密钥是加密的。

  • 6位密码会被黑客猜到吗?

    不会。密码有 6 位数字,因此生成的密码有 100 万种可能的组合。另外,密码每 30 秒更改一次。如果黑客想在30秒内猜出密码,则需要每秒输入30000个组合。

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

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

相关文章

selenium-wire简介

一.简介 以下来自chatGPT回答: selenium-wire是一个基于selenium的Python库,它扩展了selenium的功能,使得我们可以在自动化测试中直接访问和修改浏览器的网络请求和响应。selenium-wire可以拦截和修改HTTP请求和响应,从而可以在…

【一周安全资讯1216】欧盟就AI监管《人工智能法案》达成历史性协议;赛迪发布《中国网络安全测评服务市场研究报告 (2023)》

要闻速览 1、欧盟就全球首个AI监管《人工智能法案》达成历史性协议 2、我国牵头提出的国际标准《信息技术 网络安全 第7部分:网络虚拟化安全指南》正式发布 3、《粤港澳大湾区(内地、香港)个人信息跨境流动标准合同实施指引》发布 4、赛迪顾…

三相异步电机动态数学模型推导及矢量控制仿真

文章目录 **原文链接,点击跳转**三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接&#xff…

【C语言】数据结构——链式二叉树实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读: 我们在前面学习了单链表,顺序表,栈和队列,小堆。 今天我们来学习链式二叉…

WPF仿网易云搭建笔记(7):HandyControl重构

文章目录 专栏和Gitee仓库前言相关文章 新建项目项目环境项目结构 代码结果结尾 专栏和Gitee仓库 WPF仿网易云 Gitee仓库 WPF仿网易云 CSDN博客专栏 前言 最近我发现Material Design UI的功能比较简单,想实现一些比较简单的功能,比如消息提示&#xff0…

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里,通过websocket收到的礼物消息数据格式如下: {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…

解决goview栈内存溢出导致打包报错问题

最近搞低代码大屏使用goview打包时遇到问题 报错&#xff1a; vite v4.3.6 building for production... transforming (8931) node_modules\monaco-editor\esm\vs\base\common\navigator.js <--- Last few GCs ---> [24864:000001B515BA39F0] 65979 ms: Scavenge 2002.0…

VueStu01-Vue是什么

1.概念 Vue 是一个 用于构建用户界面 的 渐进式 框架 。 2.构建用户界面 基于数据渲染出用户看到的页面。 3.渐进式 Vue的学习是循序渐进的&#xff0c;可以学一点用一点&#xff0c;不必全部学完才能用。哪怕你只学了 声明式渲染 这一个小部分的内容&#xff0c;你也可以完成…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点&#xff1a;会覆盖元素内部原有的内容 2.{{}}&#xff1a;插值表达式在实际开发中用的最多&#xff0c;只是内容的占位符&#xff0c;不会覆盖内容 3.v-html&#xff1a;可以把带有标…

SVM —— 理论推导

SVM 支持向量线性可分最大间隔超平面最大间隔超平面的推导支持向量分类间隔的推导最优化问题 对偶问题拉格朗日乘子法强对偶性 SVM 优化软间隔解决问题优化目标及求解 核函数线性不可分核函数的作用常见核函数 SVM 算法优缺点 支持向量机&#xff08;Support Vector Machine&am…

一、Java基础语法

注意&#xff1a; ​ 用记事本打开本文档&#xff0c;格式较差。 ​ 可安装typora软件后再次打开。 ​ 安装包位于&#xff1a;day01\资料\其他软件\阅读笔记的软件\typora-setup-x64.exe day01 - Java基础语法 1. 人机交互 1.1 什么是cmd&#xff1f; 就是在windows操作…

BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-软件定时器)

简介 RT-Thread 软件定时器的简单使用步骤 创建项目 参考 BearPi RT-Thread项目创建 定时器管理接口 定时器时钟节拍 定时器管理相关函数 定时器类型 #define RT_TIMER_FLAG_ONE_SHOT 0x0 //一次性计时器 #define RT_TIMER_FLAG_PERIODIC 0x2 // 周期性定时器 #…

博特激光:紫外激光打标机在玻璃行业的应用

随着科技的飞速发展&#xff0c;紫外激光打标机在玻璃行业的应用日益广泛。这种高效、高精度的打标设备为玻璃制品的标识和加工带来了革命性的变革&#xff0c;助力企业提升生产效率和产品质量。 ​ ​ 一、玻璃制品标识 紫外激光打标机采用高能量密度的激光束&#xff0c;能够…

Postman接口自动化测试之——批量执行(集合操作)

集合定义&#xff1a;在接口自动化测试过程中将一组请求&#xff08;多条请求&#xff09;保存到一起进行集中管理。方便执行过程中的维护、导出和执行等。 创建集合 在引导页点击“Collection”&#xff0c;或者在“Collection”标签点击图标&#xff1b; 字段解释 集合描述…

初识Redis缓存,一文掌握Redis重要知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

LazyIDA源码阅读

LazyIDA是一款IDA插件&#xff0c;项目地址GitHub - L4ys/LazyIDA: Make your IDA Lazy! 外部引用 from __future__ import division from __future__ import print_function from struct import unpack import idaapi import idautils import idcfrom PyQt5.Qt import QAppli…

idea过往各版本下载

idea过往各版本下载 https://www.jetbrains.com/zh-cn/idea/download/other.html

动手学深度学习2 安装环境

pytorch环境安装 1. windows 环境安装2. mac环境安装3. linux环境安装1. 申请云服务器 链接机器--Ubuntu2. 环境配置 4. 不安装环境直接使用colabQA 课程链接&#xff1a; https://www.bilibili.com/video/BV18p4y1h7Dr?p1&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 1.…

STM32----HAL库函数

1.STM32系统框架 1.1 Cortex-M内核&芯片 1.2 F1系统框架 4个主动单元4个被动单元 AHB&#xff1a;高级高性能总线 APH&#xff1a;高级外围总线 其中 1 为 主动单元 &#xff0c; 2为被动单元 总线时钟频率&…