超文本传输安全协议(HTTPS)是超文本传输协议(HTTP)的扩展。HTTPS使用传输层安全性(TLS)传输加密数据。如果数据在网上被劫持,所有劫持者得到的只是二进制代码。
数据是如何加密和解密的?
步骤1 - 客户端(浏览器)和服务器建立TCP连接。
步骤2 - 客户端向服务器发送“客户端问候”。消息包含一组必要的加密算法(密码套件)和它支持的最新TLS版本。服务器响应“服务器问候”,以便浏览器知道它是否可以支持这些算法和TLS版本。
然后服务器将SSL证书发送给客户端。证书包含公钥、主机名、到期日期等信息。客户端验证证书。
步骤3 - 在验证SSL证书后,客户端生成一个会话密钥,并使用公钥对其进行加密。服务器接收加密的会话密钥,并使用私钥对其进行解密。
步骤4 - 现在客户端和服务器都持有相同的会话密钥(对称加密),加密数据在一个安全的双向通道中传输。
为什么HTTPS在数据传输期间切换到对称加密?有两个主要原因:
安全性:非对称加密只能单向进行。这意味着如果服务器试图将加密的数据发送回客户端,任何人都可以使用公钥解密数据。
服务器资源:非对称加密增加了相当多的数学开销。它不适合长时间会话中的数据传输。
OAuth 2.0是一个强大且安全的框架,允许不同的应用程序代表用户安全地相互交互,而无需共享敏感凭据。
参与OAuth的实体是用户、服务器和身份提供商(IDP)。
OAuth令牌能做什么?
当你使用OAuth时,你会得到一个代表你的身份和权限的OAuth令牌。这个令牌可以做几件重要的事情:
单点登录(SSO):有了OAuth令牌,你可以只用一次登录就登录多个服务或应用,让生活更轻松、更安全。
跨系统授权:OAuth令牌允许你在各种系统之间共享你的授权或访问权限,所以你不必在每个地方单独登录。
访问用户资料:拥有OAuth令牌的应用可以访问你允许的某些部分的用户资料,但它们不会看到所有内容。
请记住,OAuth 2.0的目标是在保持你和你的数据安全的同时,让你的在线体验在不同应用和服务之间无缝且无忧。
SSH密钥:加密密钥用于安全地访问远程系统和服务器
OAuth令牌:令牌提供对第三方应用程序上用户数据的有限访问
SSL证书:数字证书确保服务器和客户端之间的安全和加密通信
凭据:用户认证信息用于验证和授予对各种系统和服务的访问权限
这些术语都与用户身份管理有关。当你登录一个网站时,你声明你是谁(识别)。你的身份被验证(认证),并且你被授予必要的权限(授权)。过去已经提出了许多解决方案,而且这个列表还在不断增长。
从简单到复杂,这是我对于用户身份管理的理解:
WWW-Authenticate是最基本的方法。浏览器会要求你输入用户名和密码。由于无法控制登录生命周期,现在很少使用。
对登录生命周期有更精细的控制是session-cookie。服务器维护会话存储,浏览器保存会话的ID。cookie通常只适用于浏览器,对移动应用不友好。
为了解决兼容性问题,可以使用token。客户端将token发送到服务器,服务器验证token。缺点是token需要加密和解密,这可能会很耗时。
JWT是表示token的标准方式。这些信息可以被验证和信任,因为它经过了数字签名。由于JWT包含签名,因此无需在服务器端保存会话信息。
通过使用SSO(单点登录),你只需要登录一次就可以登录多个网站。它使用CAS(中央认证服务)来维护跨站点信息。
通过使用OAuth 2.0,你可以授权一个网站访问你在另一个网站上的信息。
不应该做的事情
将密码以明文形式存储不是一个好主意,因为任何有内部访问权限的人都能看到它们。
直接存储密码哈希值是不够的,因为它容易受到预计算攻击,如彩虹表。
为了减轻预计算攻击,我们对密码进行加盐处理。
什么是盐?
根据OWASP指南,“盐是一个唯一的、随机生成的字符串,作为哈希过程的一部分添加到每个密码中”。
如何存储密码和盐?
要验证密码,可以经过以下过程:
想象一下,你有一个特殊的盒子,叫做JWT。在这个盒子里面,有三个部分:一个头部,一个有效载荷和一个签名。
头部就像盒子外面的标签。它告诉我们盒子的类型以及它的保护方式。它通常以一种叫做JSON的格式编写,这是一种使用大括号{ }和冒号:来组织信息的方式。
有效载荷就像你想要发送的实际消息或信息。它可以是你的名字、年龄或任何你想要分享的其他数据。它也是用JSON格式编写的,所以它很容易理解和使用。现在,签名是让JWT安全的关键。它就像一个特殊的封条,只有发送者知道如何创建。签名是使用一个秘密代码创建的,有点像密码。这个签名确保了没有人可以在发送者不知情的情况下篡改JWT的内容。
当你想要将JWT发送给服务器时,你将头部、有效载荷和签名放入盒子中。然后你将它发送给服务器。服务器可以轻松地读取头部和有效载荷,以了解你是谁以及你想要做什么。
当启用双因素认证时,Google Authenticator通常用于登录我们的账户。它是如何保证安全的呢?
Google Authenticator是一个基于软件的身份验证器,实现了两步验证服务。下面的图表提供了详细信息。
这个过程涉及到两个阶段:
阶段1
步骤1和2:Bob打开网页启用两步验证。前端请求一个秘钥。身份验证服务为Bob生成一个秘钥并将其存储在数据库中。
步骤3:身份验证服务将一个URI返回给前端。URI由一个密钥发行者、用户名和秘钥组成。URI以二维码的形式显示在网页上。
步骤4:Bob然后使用Google身份验证器扫描生成的二维码。秘钥被存储在身份验证器中。
阶段2
步骤1和2:Bob想要使用Google两步验证登录一个网站。为此,他需要密码。每30秒,Google身份验证器使用TOTP(基于时间的一次性密码)算法生成一个6位数的密码。Bob使用这个密码进入网站。
步骤3和4:前端将Bob输入的密码发送给后端进行身份验证。身份验证服务从数据库中读取秘钥,并使用与客户相同的TOTP算法生成一个6位数的密码。
步骤5:身份验证服务比较客户端和服务器生成的两个密码,并将比较结果返回给前端。只有当两个密码匹配时,Bob才能继续登录过程。
这种身份验证机制安全吗?
其他人能否获得秘钥?我们需要确保秘钥是通过HTTPS传输的。身份验证器客户端和数据库存储秘钥,我们需要确保秘钥是加密的。
黑客能否猜出6位数的密码?不能。密码有6位数,所以生成的密码有100万种可能的组合。此外,密码每30秒变化一次。如果黑客想在30秒内猜出密码,他们需要每秒输入30,000种组合。
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!