2.User Authentication
约 1050 个字 1 张图片 预计阅读时间 4 分钟
Three A¶
- 安全区分授权访问和未授权访问,保密性、完整性和可用性(CIA)都要求做到这一点;
- 身份验证(Authentication):弄清楚谁在访问;
- something you know:用户名和密码;
- something you have:偏向于硬件,比如smart card或者tokens;
- something you are:生物信息;
- 访问控制(Access control):确保只允许授权访问;
- 审计(Auditing):记录正在发生的事情,也就是访问过程被监控,以便以后识别攻击并进行恢复;
Threats to Passwords¶
- 信道(Channel):在用户端连接到服务端的信道上进行窃取;
- 用户端(login spoofing):钓鱼网站,或者监测键盘活动等;
- 服务端(offline dictionary attacks):直接攻击服务器,获取数据库;
- Social engineering:human errors;
- Online guessing:主要针对弱密码;
Online guessing¶
猜测攻击:密码强度的两个因素
- 攻击者必须进行的平均猜测次数才能找到正确的密码:由密码的不可预测性决定,包括密码的长度、 它是由哪些符号绘制的,以及它是如何创建的。
- 攻击者检查猜测的密码的有效性的轻松程度:由密码的存储方式、检查方式以及尝试的任何限制决定;
Password Entropy
- 口令熵,也就是不确定性;
- 熵每加一,攻击者的尝试次数就要\(\times2\);
根据口令熵的原理进行密码的推荐
一些不好的密码举例
一些方法去增加密码强度
-
允许长字符密码,禁止短密码
-
在适当的情况下随机生成密码
-
为用户提供选择密码的建议/指南
- 例如,思考一个句子并从中选择字母,“现在是中午12点“;
- 同时使用字母、数字和特殊字符;
-
检查用户选择的密码的质量
- 使用一些经验法则;运行字典攻击工具
- 评估密码的强度并解释其弱点
当然要在密码强度和用户友好性上进行权衡
服务器端¶
当一个服务器被攻破之后,如何保护密码:
哈希算法(单向性的函数) 加密方法:在服务器端存储的是Hash(password),用户输入password后,进行哈希加密后与服务端进行比对; 局限性:还是容易泄露一部分信息,或者可以直接暴力匹配;另外,如果用户端密码相同,那么服务端的两个加密值也相同,那么攻破一个就相当于攻破两个,而且还可以使用频率分析法进行破解; 改进:因此,我们可以再加一些不确定性,算法变成H(password, r1),只要r不相等,加密出来的值就不相等;
服务端如何保护存储的密码(同时使用加密和访问控制):
- 使用多种独立的防御方法,这样即使一层失败,安全性仍然不会受到损害。
- 禁用多次尝试失败的帐户。
- 需要额外的身份验证机制(例如,电话、其他电子邮件帐户等)。
用户端¶
用户程序
在运行一个程序的时候,会定时地进行时间片的打断,而这有可能在两个时间片之间被木马程序劫持,我们可以提高程序的权限,这样当程序运行的时候,权限比程序低的木马就无法完成劫持。
钓鱼网站防御方法
- 已知钓鱼网站的浏览器过滤
- 服务器的加密身份验证
- 用户配置的服务器身份验证
- 确保网站是人类用户心中想要访问的网站。例如,站点密钥、预先选择的图片/短语
信道端¶
- 一次性密码:每个密码只使用一次,防御被动的窃听者和后来的试图模仿的窃听者;
- 挑战响应:发送与密码和质询相关的响应;
- 零知识知识证明:证明对秘密价值的了解,而不泄露任何关于秘密(比如要知道平均成绩而不能知道每一个人的成绩);
本文总阅读量次