系统设计——系统安全

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个组合。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
******************* 实践教学 ******************* 理工大学 计算机与通信学院 2011年春季学期 C程序设计 课程设计 题 目: 专业班级: 姓 名: 学 号: 指导教师: 成 绩:__________________ 摘 要 在车辆销售管理当中,人工统计的速度慢,并且容易出现差错。本车辆销售管理系统的自动化加速了统计工作,提高管理效率。本程序主要采用对输入的相关信息进行自动分析,然后按组分类将数据保存到数组,这样的结构化非常便于程序后续的统计工作。统计具体过程涉及到车辆进价售价及利润排序等问题,将于正文中详细介绍。本程序实现了所有设计要求。 关键词:文件;排序;统计;C语言 目 录 一、需求分析 1 二、总体设计 2 三、详细设计 3 3.1 详细设计思路 3 3.2 算法流程图 3 四、编码 7 五、测试 8 六、设计总结 12 参考文献 13 致谢 14 附录 15 一、需求分析 本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。 二、总体设计 图1 车辆销售管理系统功能模块图 三、详细设计 3.1 详细设计思路 1.main()主函数 设置了程序的流程,结束程序。 2.select ( ) 选择函数 选择所想运行的各个函数. 3.functionscan ( ) 输入函数输入便条的数据. 4.function1 ( ) 文件的数据输入函数多次输入数据 5. function2 ( ) 统计函数每种汽车销售量以及销售额的统计 6. functionpaixu2 ( )总额排序函数按销售额对汽车进行排序 7. function4() 总额统计函数统计每种汽车的总额 8. function5() 统计报表函数统计商品总额 9. function6() 清空文件函数 清空文件数据 3.2 算法流程图 3.2.1保存函数Save()的算法流程图如图2所示。 图2 保存函数Save()的算法流程图 3.2.2输入函数input()的算法流程图如图3所示。 图3 输入函数的算法流程图 3.2.3 输出汽车信息 图4 输出汽车信息 四、编码 原始数据有汽车编码,车名,进价,售价,销售数量。年所以定义一个全局结构体数组scrip用于保存原始数据。然后定义全局变量n保存纸条数目,定义数组s用于保存分类后的信息。源代码见附录 五、测试 1输入新数据测试如图5所示 图5 输入新数据测试 2按车名查找数据测试如图6所示 图6按车名查找数据测试 3按编号查找数据测试如图7所示 图7 按编号查找数据测试 4按车辆名称删除数据测试如图8所示 图8车辆名称删除数据测试 5列出所有数据测试如图9所示 图9列出所有数据测试 6统计各产品的收益和总收益测试如图10所示 图10统计各产品的收益和总收益测试 7按车辆销售额的大小排序并输出排序后结果测试如图11所示 图11按车辆销售额的大小排序并输出排序后结果测试 六、设计总结 通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。 回顾起这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多的东西。同时不仅可以巩固了以前所学到的知识,而且学到了很多在书本上所没有学到过的知识,通过这次课程设计使我懂得了理论与实际相结合是很重要的。只有理论知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论。才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,通过同学的帮助,逐渐克服各种问题,并且从中学习到了很多的东西。通过这次编程。我发现了很多的不足。让我了解到自身的问题。让我不断的进步。 参考文献 1 C/C++程序设计,王连相等,中国科学技术出版社,2004 2 C语言程序设计,谭浩强,清华大学出版社,1999 3 C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 4 C语言实用程序荟萃,西安电子科技大学出版社,1993 5 C语言函数手册,机械工业出版社,1999

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大猩猩爱分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值