当前位置: 首页 > article >正文

网络安全加密

  1. 介绍

    1. 一个认证和密钥交换系统,它用来在不可靠的网络中保护口令和交换密钥。
    2. 通过消除了在网络上发送明文口令的需要,并且通过安全的密钥交换机制来使用加密,改进了安全性。
    3. 服务器不保存密码或密码的散列值, 防止字典攻击. 而只是保存验证因子(verifier).
    4. 客户端和服务器可以各自计算出一个会话秘钥(session key), 其值相同. 防止窃听和会话劫持.
    5. 好多游戏服务端用SRP认证,比如魔兽世界。
  2. 优点

    1. 防窃听
    2. 防暴力破解,字典攻击, 弱口令也不容易被破解
    3. 即使口令数据库被公之于众,攻击者仍然需要一个庞大的字典去搜索来获得口令。
    4. 速度快,不需要证书和第三方认证机构
  3. 缺点

    1. 浏览器不支持,得自己实现

原理

N     一个安全的大质数, 比如N=2q+1,q 是一个素数
g     一个以N为模的生成元,对任何X,有0 < X < N,存在一个值x,使得g^x % N == X。
k     k = H(N,G) 在 SRP6 中 k = 3
s     User’s Salt
I     用户名
p     明文密码
H()   单向 hash 函数
^     求幂运算
u     随机数
a,b   保密的临时数字
A,B   公开的临时数字
x     私有密匙(从 p 和 s 计算得来)
v     密码验证数字

N和g的值必须由双方讨论来达成一致。它们可以被提前设置好,或者主机把它们发送给客户端。

服务器存储如下信息
x = H(s, p)               (s is chosen randomly)
v = g^x                   (computes password verifier)

服务器的数据库保存 {I, s, v} 整个验证流程如下:

User -> Host:  I, A = g^a                  (标识自己是谁, a是随机数)
Host -> User:  s, B = kv + g^b             (把salt发送给user, b是随机数)

        Both:  u = H(A, B)

        User:  x = H(s, p)                 (用户输入密码)
        User:  S = (B - kg^x) ^ (a + ux)   (计算会话密钥)
        User:  K = H(S)

        Host:  S = (Av^u) ^ b              (计算会话密钥)
        Host:  K = H(S)

这样双方都有一个会话密钥S, 后续的消息传输可以用S做加解密,从而保证安全。
为了完成认证过程,双方还得向对方证明自己拥有正确的S,
S不能让第三方知道,所以不能直接传输给对方做比较,一个可能的办法是:

User -> Host:  M = H(H(N) xor H(g), H(I), s, A, B, K)
Host -> User:  H(A, M, K)

双方需要做如下保障
    1. 如果客户端收到B == 0 (mod N) 或u == 0, 客户端停止认证。
    2. 如果服务器发现 A == 0 (mod N)则停止认证。
    3. 用户必须得证明自己拥有正确的K,否则服务器就会终止认证。

用密钥加密用户密码

  1. 介绍:
    1. 本机生成一个密钥key存磁盘上,对称加密密钥。
    2. 创建用户时,用户提供password, 然后数据库里保存db_password = encrypt(key, hash(password))
    3. 这样黑客把数据库拖走后,因为没有key解开用db_password,所以用户密码还是安全的。
    4. 用户登录时提供密码password, 哈希后是hash(password), 然后uncrypt(key, db_password),
      1. 两者比较,一致就是认证通过
      2. 不一致就是终止认证
  2. 优点:
    1. 防止拖库
  3. 缺点
    1. key丢了就完蛋了,谁也登录不上了。

http://www.kler.cn/a/448545.html

相关文章:

  • 接口测试Day-02-安装postman项目推送Gitee仓库
  • Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘
  • 【day11】面向对象编程进阶(继承)
  • 基础爬虫案例实战
  • python coding(二) Pandas 、PIL、cv2
  • 智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)
  • 网络架构与IP技术:4K/IP演播室制作的关键支撑
  • 网络安全——对称加密与非对称加密
  • selenium 报错 invalid argument: invalid locator
  • 拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
  • 医疗服务品质提升:SSM 与 Vue 打造医院预约挂号系统方案
  • Next.js 13 App Router实战踩坑与性能优化指南
  • [react]redux异步处理和重写useDispatch
  • 第十六周做题总结_数据结构_AVL与哈希查找
  • 借助Aspose.Cells ,删除 Excel 中的空白行和列
  • Pika Labs技术浅析(四):数据可视化
  • 自建MD5解密平台
  • 设计模式 -- 单例模式
  • en3d 部署笔记
  • leetcode刷题日记03——javascript
  • Excel设置生日自动智能提醒,公式可直接套用!
  • 如何使用 TypeScript 和 Jest 编写高质量单元测试
  • Y3编辑器教程6:触发器进阶案例
  • 本地高精度OCR!由GPT-4o-mini驱动的开源OCR!
  • 【C++】哈希表实现
  • ‌Elasticsearch(es)自定义分词器,根据特殊符号分词或分词后保留特殊符号