设计安全的账号系统的正确姿势
ECDH 就是基于上面原理设计的密钥交换算法: 密钥协商好后,双方就可以使用该密钥进行加密传输了,比如使用 AES 、 DES。 由于 ECDH 密钥交换协议不验证公钥发送者的身份,因此无法阻止中间人攻击。如果监听者 Mallory 截获了 Alice 的公钥,就可以替换为他自己的公钥,并将其发送给 Bob。Mallory 还可以截获 Bob 的公钥,替换为他自己的公钥,并将其发送给 Alice。这样,Mallory 就可以轻松地对 Alice 与 Bob 之间发送的任何消息进行解密。他可以更改消息,用他自己的密钥对消息重新加密,然后将消息发送给接收者。 解决方法是,Alice 和 Bob 可以在交换公钥之前使用数字签名对公钥进行签名。 即使攻击者不能解密传输的内容,但仍可以使用重放攻击尝试身份验证或用于欺骗系统。重放攻击是指攻击者将数据包截取后,向目标主机重新发送一遍数据包。 防御重放攻击的方法主要有: 使用时间戳。数据包在一定时间范围内才是有效的。 使用递增的序号。收到重复的数据包时可以轻易的发现。 使用提问应答方式。收到数据包时可以判断出来是否应答过。 HTTPS 正是使用了上述的原理,保证了通信的安全。所以,任何对安全有需求的系统都应该使用 HTTPS。如果是使用自有协议开发,比如 APP 或游戏,应该使用上述的方法保障通信的安全。 用正确的姿势加密敏感信息 我们都知道,用户的密码不能明文保存,而且要使用不可逆的加密算法,只保存最终的 hash 结果用来验证是否正确。那用户其他的敏感信息呢?比如身份证、银行卡、信用卡等信息,该如何加密保存而不被泄露呢? 对于身份证信息,可以像密码一样只保存 hash 的结果,可以用于用户输入身份证号后进行验证。假如需要给用户显示身份证信息,只需要保存抹掉了几位数字的身份证号。 假如你的系统涉及到支付,需要用户的银行卡,信用卡(卡号,CVV码)等信息时,必须遵循 PCI DSS (第三方支付行业数据安全标准)标准。PCI DSS 是由 PCI 安全标准委员会的创始成员(visa、mastercard、American Express、Discover Financial Services、JCB等)制定,力在使国际上采用一致的数据安全措施,包括安全管理、策略、过程、网络体系结构、软件设计的要求的列表等,全面保障交易安全。 如果只是银行卡,还需要遵循 ADSS (银联卡收单机构账户信息安全管理标准) 标准。 2014年3月携程泄露用户银行卡信息就是因为没有遵循 PCI DSS 标准。 用正确的姿势对数据进行备份和监控 2015年5月的携程数据被删事件,就是数据备份没有做好的例子。数据备份是为了防止由于硬盘损坏或人为破坏导致的数据丢失。主要措施有:磁盘 raid,物理备份(磁带库),异地的逻辑备份。同时做好权限控制,并对访问记录做好监控,及时发现问题,保留现场证据。 总结 本文总结了设计一个安全系统的基本原理和方法,并没有举出一个特定具体的方案,因为不同的系统对安全性的要求各有不同,设计者应该根据自身系统的特点进行具体设计。比如加盐 hash 的具体实施方法,salt 值如何构成等等。 本文所述内容如有不实之处或者有争议的部分,欢迎交流指出。 附录 常用的加密算法:
DES、3DES、AES 区别:
(编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |