推荐阅读
- 先了解常见威胁模型与风险点
- 再看认证、授权与加密基础
- 最后看安全测试与应急响应
副标题 / 摘要 双因素认证通过“密码 + 第二因素”显著提升账号安全。本文讲清原理、实现方式与常见风险。 目标读者 负责账号安全的工程师 需要设计登录流程的开发者 关注安全合规的团队 背景 / 动机 密码容易泄漏,单因素认证已不足以抵御现代攻击。 2FA 通过引入第二因素,大幅降低账号被盗风险。 核心概念 第二因素:你“拥有”或“是”的证明 TOTP:基于时间的一次性密码 SMS:短信验证码(风险较高) 设备绑定:硬件或设备认证 实践指南 / 步骤 选择合适的第二因素(优先 TOTP) 实现绑定与解绑流程 提供恢复机制(备用码) 限制验证码尝试次数 记录安全日志与告警 可运行示例 下面示例用 Python 生成 TOTP: import time import hmac import hashlib import base64 def totp(secret, interval=30, digits=6): key = base64.b32decode(secret) counter = int(time.time() // interval) msg = counter.to_bytes(8, "big") h = hmac.new(key, msg, hashlib.sha1).digest() offset = h[-1] & 0x0F code = (int.from_bytes(h[offset:offset+4], "big") & 0x7fffffff) % (10 ** digits) return str(code).zfill(digits) if __name__ == "__main__": print(totp("JBSWY3DPEHPK3PXP")) 解释与原理 2FA 的安全性在于“攻击者必须同时获取两种因素”。 TOTP 在短时间内有效,避免重放攻击。 ...
副标题 / 摘要 给一个已有 Web 应用加 2FA,不只是多一个验证码,还涉及数据模型、恢复流程与风险控制。本文给出落地路线图。 目标读者 负责账号体系的工程师 想提升登录安全的团队 需要评估引入成本的技术负责人 背景 / 动机 “加 2FA”很容易被低估。 如果没有恢复机制与风险控制,用户体验会受损,甚至造成锁号。 核心概念 绑定流程:扫码/密钥绑定 验证流程:登录后增加第二步验证 恢复机制:备用码/人工恢复 风险控制:失败次数限制、设备信任 实践指南 / 步骤 扩展用户表(2FA 开启状态、密钥、备用码) 实现绑定流程(生成 secret + QR) 实现验证流程(登录后追加 TOTP 校验) 加入恢复机制(一次性备用码) 监控与风控(失败次数限制、异常告警) 可运行示例 # 简化的验证流程示例 def verify_2fa(user, code): if not user["twofa_enabled"]: return True return code == user["current_totp"] 解释与原理 2FA 本质是“多一步验证”。 新增流程必须保证:可用性(不锁死用户)与安全性(避免绕过)。 常见问题与注意事项 必须给所有用户强制启用吗? 不一定,可先强制管理员或高风险用户。 备用码安全怎么保证? 必须单次使用且可撤销。 如何处理时间不同步? TOTP 需允许有限的时间窗口。 最佳实践与建议 先灰度启用,再强制推广 对敏感操作(修改密码、支付)强制 2FA 建立客服恢复流程 小结 / 结论 在已有系统引入 2FA,需要技术、流程与体验的平衡。 有计划地引入,才能实现安全收益。 ...
副标题 / 摘要 自创密码学看似灵活,实则极易出错。本文解释为什么不应自己设计加密算法,并给出工程级替代方案。 目标读者 需要实现安全功能的工程师 想理解密码学风险的开发者 负责安全合规的技术负责人 背景 / 动机 密码学的可靠性来自数学证明与长期公开审计。 未经验证的自创算法,几乎一定存在未知漏洞,且往往在上线后才暴露。 核心概念 公开审计:安全算法需经长期社区验证 威胁模型:攻击者能力远超一般想象 实现安全:算法正确 ≠ 实现安全 实践指南 / 步骤 使用成熟标准(AES-GCM、ChaCha20-Poly1305) 使用成熟库(libsodium、OpenSSL) 明确威胁模型并选择合适协议 避免自定义模式/参数 做安全评审与渗透测试 可运行示例 下面用 Python 的标准库做安全加密示例(AES-GCM): from cryptography.hazmat.primitives.ciphers.aead import AESGCM import os key = AESGCM.generate_key(bit_length=128) aesgcm = AESGCM(key) nonce = os.urandom(12) plaintext = b"hello" ciphertext = aesgcm.encrypt(nonce, plaintext, None) print(ciphertext) 解释与原理 安全算法需要满足机密性、完整性、可验证性等多项指标。 自创算法往往忽略边界条件、随机性、密钥管理等关键问题。 常见问题与注意事项 算法简单就更安全吗? 不。简单可能意味着可被轻易破解。 自己设计能防止被破解吗? 不。攻击者会逆向、分析、利用弱点。 使用库就安全吗? 前提是正确使用(模式、随机数、密钥管理)。 最佳实践与建议 不要自创算法或自定义加密模式 使用经过审计的库与标准 关注密钥管理与随机数来源 小结 / 结论 自创密码学的风险远高于收益。 使用成熟算法和库,是工程安全的基本常识。 参考与延伸阅读 Cryptography Engineering libsodium / OpenSSL 官方文档 NIST 推荐算法列表 元信息 阅读时长:7~9 分钟 标签:密码学、安全、工程实践 SEO 关键词:不要自创密码学, 加密算法 元描述:解释为什么不应自创密码学,并给出替代方案。 行动号召(CTA) 检查一次你项目的加密实现,确认是否使用了标准算法与库。