0%

Web 开发的身份数据和安全_3. 身份安全基础

本文主要内容:在不同场合下如何验证和授权。

理解不同的身份类型

身份:把个人和组织区分开的品性、信条等。—— 韦氏词典

根据网站的用途,身份可以分为:

  1. 社会身份;
  2. 实际身份;
  3. 弱身份;

不同身份之间的重叠

社会身份

人们随意分享的身份,真实性有限。主要内容:社交网络、社会联系、兴趣和爱好。

实际身份

真实的个人资料。如网银和电商中的电子邮箱、地址、电话号码、语言、年龄等。

选举和其他很多政府服务也通常使用实际身份。

弱身份

验证用户身份时不访问任何个人资料。如:如通过短信给手机发送一次性密码实现无密码登录。

利用身份提升用户体验

刚接触用户时没有必要让他们登录(有损用户转化率),而是提供功能预览,帮助用户决定是否要使用应用。

信任区简介

如今,我们使用的设备都预装了各种传感器,通过这些传感器可以收集用户所处环境的信息。GPS、WiFi、摄像头、加速计、陀螺仪、光线传感器等可用于构建用户的个人资料,然后据此认证用户的身份。把这个概念与身份结合起来,我们不仅可以认证用户的身份,还能构建起信任区

信任区

  • 使用可用且独特的数据(例如用户的浏览器配置、硬件、设备、位置等信息)为用户创建数字指纹。
  • GPS 坐标、手机摄像头、指纹识别、声纹识别、可穿戴设备。
  • 通过用户使用的系统和设备能收集足够的信息基本上确认用户就是他声称的那个人➡用户处在信任区中,减少用户再提供身份信任凭据的步骤。

浏览器指纹识别

通过用户所用的浏览器具有的独特信息(例如首部、字体等)得出验证用户身份的第二个因素。

获取浏览器特性的方式:用户代理、插件、字体、HTTP ACCEPT 首部、屏幕分辨率、超级 cookie、时区、启用 cookie…

位置追踪

使用用户的物理位置(GPS 数据)构建信任区。

物理位置可以伪造,而且结果也未必准确。

设备指纹识别(手机 / 平板)

设备的硬件指纹:操作系统版本、设备名称、设备型号、框架的 SDK 版本、硬件序列号(IMEI 码)。

设备指纹识别(蓝牙配对设备)

将连接到手机上的硬件设备作为硬件指纹。

身份认证的其他方法

双因素身份验证和 n 因素身份验证

双因素身份验证(2FA)依赖一个单独的令牌,例如一次性密码,使用后即失效,因此能避免常见的安全漏洞,例如重放攻击。

n 因素身份验证(MFA)

假设每个人都具有三个基本的要素:

  • 知道的事情。(密码)
  • 拥有的东西。(智能卡或 RSA 令牌、Google Authenticator、Au-thy)
  • 自身的特征。(个体的身份、指纹)

一次性密码

生成一次性密码的三种方式:

  1. 采用时钟同步方式,生成短期令牌。(Authy 和 Google Authenticator)
  2. 基于数学算法,生成长期令牌。(短信验证码、电子邮件)

使用 Authy 实现双因素身份验证

通过使用 Twilio 提供的身份验证服务 Authy 实现 2FA 功能:

  1. 在服务中注册 / 删除 2FA 用户账户;
  2. 通过短信把验证码发给这些用户;
  3. 用户在网站中输入验证码时确认验证码;

使用生物特征代替密码

移动设备的指纹扫描仪。

生物特征更适合看作一种证明身份的机制。

如何评价生物特征的效果

在身份验证场景下处理生物特征时一定要考虑假阳性率(误识率)。

  1. 遵循官方的误识率要求。
  2. 限制尝试次数。

面部识别

面部识别使用数字图像或视频识别人类。这个技术使用标志性特征匹配轮廓。

视网膜和虹膜扫描

通过人类眼球上的血管识别用户。

视网膜扫描:检测血管对光的吸收。

虹膜扫描:先获取眼球的图像,然后再做分析。

静脉识别

脉搏只有身体中有血液流动时才有。富士通为日本的 ATM 机部署了掌侧静脉识别。

新出现的标准

FIDO Alliance

FIDO 提供了两种解决方案:

  1. 通用身份识别框架。
  2. 通用第二因素。

Oz

Web 授权框架:https://github.com/hueniverse/oz

区块链

用户存储某些属性的证明,例如姓名、住址或生日,然后在任何能提供公钥的地方公开这些属性的加密哈希。这样个人就可以确认信息,而且能保证信息的真实性。这个概念的关键是决定分享哪些信息。

欢迎关注我的其它发布渠道