网络安全加密

devtools/2024/12/28 21:48:10/
  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.ppmy.cn/devtools/145456.html

相关文章

【es6复习笔记】集合Set(13)

ES6 提供了新的数据结构 Set&#xff08;集合&#xff09;。它类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;集合实现了iterator接口&#xff0c;所以可以使用『扩展运算符』和『for…of…』进行遍历。 集合的属性和方法 size&#xff1a;返回集合的元素个数。add…

BP分类-反向传播神经网络(Backpropagation Neural Network)

BP分类-反向传播神经网络&#xff08;Backpropagation Neural Network&#xff09; 源代码 &#xff08;托管在Github&#xff09; BP分类的用途介绍 什么是BP神经网络&#xff1f; BP神经网络&#xff0c;即反向传播神经网络&#xff08;Backpropagation Neural Network&a…

Datawhale AI冬令营 AI辅助编程学习

背景——什么是AI辅助编程 AI 是什么&#xff1f; 人工智能&#xff08;AI, Artificial Intelligence&#xff09; 顾名思义&#xff0c;即人为创造的智能&#xff0c;是一门研究模拟、延伸和扩展人智能的科学&#xff0c;涵盖了机器人学、语言识别、自然语言处理、专家系统等…

JOGL 从入门到精通:开启 Java 3D 图形编程之旅

一、引言 Java 作为一门广泛应用的编程语言&#xff0c;在图形编程领域也有着强大的工具和库。JOGL&#xff08;Java OpenGL&#xff09;便是其中之一&#xff0c;它为 Java 开发者提供了访问 OpenGL&#xff08;Open Graphics Library&#xff09;功能的接口&#xff0c;使得…

SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

本篇博客将深入探讨 MyBatis-Plus 的三个核心功能&#xff1a;条件构造器、自定义 SQL 和 Service 接口的基本用法。通过对这些功能的学习和掌握&#xff0c;开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。 目录 前言 条件构造器 自定义SQL Service接口基本用法 总结…

《Java核心技术I》Swing的网格包布局

复杂的布局管理 网格包布局 行列大小可改变&#xff0c;先建立表格&#xff0c;合并相邻单元格&#xff0c;组件指定在格内的对齐方式。 字体选择器组件&#xff1a; 另个指定字体和字体大小的组合框两个组合框标签两个选择粗体和斜体的复选框一个显示示例字符串的文本区 将容…

【STM32】RTT-Studio中HAL库开发教程十:EC800M-4G模块使用

文章目录 一、简介二、模块测试三、OneNet物联网配置四、完整代码五、测试验证 一、简介 EC800M4G是一款4G模块&#xff0c;本次实验主要是进行互联网的测试&#xff0c;模块测试&#xff0c;以及如何配置ONENET设备的相关参数&#xff0c;以及使用STM32F4来测试模块的数据上报…

深度学习-77-大模型量化之Post Training Quantization训练后量化PTQ

文章目录 1 PTQ1.1 动态量化1.2 静态量化2 四位量化的领域2.1 GPTQ2.2 GGUF(可用CPU)2.3 定点量化技术3 参考附录1 PTQ 训练后量化 :Post-Training Quantization (PTQ),模型训练完成后进行量化。 较流行的量化技术的方法之一是post-training quantization(PTQ),是指在训练后…