数字信任的底层逻辑:密码学核心技术与现实应用

安全和密码学 --The Missing Semester of Your CS Education

目录

  1. 熵与密码强度
  2. 密码散列函数
  3. 密钥体系
    3.1 对称加密
    3.2 非对称加密
  4. 信任模型对比
  5. 典型应用案例
  6. 安全实践建议
  7. 扩展练习
  8. 杂项

密码学是构建数字信任的基石。
本文浅析密码学在现实工具中的应用,涵盖
1)熵 2)散列函数 3)加密体系;

XKCD密码强度漫画

一、熵与密码强度

1.1 熵的数学定义

熵(Entropy)的计算公式:
H = log₂(n)
其中n为可能的组合数

1.2 密码强度评估

密码类型熵值计算示例密码
4单词组合4×log₂(100000) ≈ 66.4 bitscorrecthorsebatterystaple
8字符混合密码log₂(62⁸) ≈ 47.5 bitsrg8Ql34g

1.3 破解时间估算

  • 4单词密码:约1.5×10¹⁹年
  • 8字符密码:约1.5×10⁷年

二、密码散列函数

2.1 核心特性

$ printf 'hello' | sha1sum
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
  • 确定性
  • 不可逆性
  • 碰撞抵抗性

2.2 应用场景

  1. Git内容寻址存储
  2. 软件完整性验证
  3. 密码承诺机制

三、密钥体系

3.1 对称加密(AES)

openssl aes-256-cbc -salt -in plain.txt -out encrypted.bin

3.2 非对称加密(RSA/ED25519)

ssh-keygen -t ed25519 -o -a 100
3.2.1)Q1:为什么私钥能解开公钥上的锁?

A:大数定理。具体见下文:
非对称加密算法的数学设计–RSA算法为例

3.2.2)Q2:数字签名是什么?

A:[下文括号内,代表函数的x ]

  • 发送方:签名 = 私钥加密 [ hash(发送的消息) ];
  • 接收方:hash_1= 公钥解密[签名];
    • THEN 比较:得到的hash_1 VS hash_2(收到的消息);
    • IF 相等,证明:收到的消息 = 发送的消息

密码学中的数字签名是什么?

定义: 数字签名是一种基于密码学的技术,用于验证数据的真实性完整性不可否认性。它类似于现实中的手写签名,更安全、不可伪造。

核心原理

  • 非对称加密

    :使用一对密钥(公钥和私钥)。

    • 私钥:由签名者秘密保存,用于生成签名。
    • 公钥:公开分发,用于验证签名。
  • 哈希函数:通常先对消息生成唯一的哈希值(摘要),再对哈希值签名,提高效率。

工作流程

  1. 签名生成:发送方用私钥对消息的哈希值加密,生成签名。
  2. 签名验证:接收方用发送方的公钥解密签名,得到哈希值,再对比自己计算的哈希值是否一致。

作用

  • 身份认证:确认消息来源(谁签的名)。
  • 完整性:确保消息未被篡改。
  • 不可否认性:签名者事后无法否认自己的签名。

常见算法:RSA、ECDSA(比特币使用)、EdDSA等。

3.3 密钥生成函数(KDF)

  • 密码存储方案:KDF(password + salt)
  • 推荐迭代次数:≥100,000次

四、信任模型对比

模型类型代表产品验证方式适用场景
首次信任SignalSafety Number比对即时通讯
信任网络PGP密钥签名链邮件加密
社交证明Keybase社交媒体验证跨平台身份

五、典型应用案例

5.1 SSH身份验证流程

客户端 服务器 连接请求 随机挑战值 签名响应 验证签名 客户端 服务器

5.2 全盘加密方案

  • Linux: LUKS + cryptsetup
  • Windows: BitLocker
  • macOS: FileVault

5.3 密码管理器架构

+----------------+
|     主密码      |
+--------+-------+↓
+----------------+
|   KDF生成密钥   |
+--------+-------+↓
+----------------+
|   AES加密密码库 |
+----------------+

六、安全实践建议

  1. 启用两步验证(2FA)
  2. 使用密码管理器生成高熵密码
  3. 定期更新SSH密钥(推荐ED25519)
  4. 验证下载文件的哈希值
  5. 对敏感提交进行GPG签名

七、扩展练习

# 验证文件完整性
curl -LO https://debian.org/checksums
sha256sum -c SHA256SUMS# 创建签名提交
git commit -S -m "安全更新"
git show --show-signature

s://debian.org/checksums
sha256sum -c SHA256SUMS

创建签名提交

git commit -S -m "安全更新"
git show --show-signature

杂项:

Q3:“挖比特币”为什么叫“挖”?到哪里挖?

  • 类似一次种哈希计算竞赛。
  • 需要通过计算“挖掘”才能获得;
  • 矿工通过解决复杂数学难题(哈希计算)来竞争记账权,成功者获得比特币奖励,过程需要消耗算力(类似“挖”的劳力)。
  • 涉及区块链技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23845.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库连接池泄露导致MySQL Server超时关闭连接

前言 最近做项目,发现老项目出现xxx,这个错误其实很简单,出现在MySQL数据库Server端对长时间没有使用的client连接执行清楚处理,因为是druid数据库,且在github也出现这样的issue:The last packet successf…

DirectX12(D3D12)基础教程三 线性代数与3D世界空间

线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。 向量和矩阵是学习3D入门最基本的理论基础。本章重点讲向量和矩阵. 向量概念 向量最基本的定义就是一个方向和…

LeetCode 230.二叉搜索树中第K小的元素

题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 思路: 代码: /*** Definition for a binary tree node.* public class Tre…

Android 老项目 jcenter 库失效

最近重新维护了一些老项目发现大部分jcenter库失效了, Could not resolve com.xx:2.1.3. 如果你也遇到了,不妨试试 替换为 aliyun的jcenter服务,就不用一个个找代替库了。 project 下的 build.gradle 文件添加: maven { url htt…

Python数据结构:哈希表-高效存储与查找的秘密武器!

大家周一好!今天我们来聊聊Python中一个非常重要的数据结构——哈希表。无论是算法面试还是实际开发,哈希表都扮演着至关重要的角色。掌握它,你就能轻松解决许多复杂的编程问题! 在编程中,如何实现快速的存储与查找操…

【复习】Redis

数据结构 Redis常见的数据结构 String&#xff1a;缓存对象Hash&#xff1a;缓存对象、购物车List&#xff1a;消息队列Set&#xff1a;点赞、共同关注ZSet&#xff1a;排序 Zset底层&#xff1f; Zset底层的数据结构是由压缩链表或跳表实现的 如果有序集合的元素 < 12…

【电机控制器】ESP32-C3语言模型——DeepSeek

【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 一、让小车动起来 新建文件夹智能小车项目 在里面复制19-串口打印功能 重命名为01-让小车动起来 新建文件夹motor&…

Redis基础学习

目录 Redis命令 通用命令 String Key的顶层格式 Hash List ​编辑​编辑Set SortedSet 在IDEA使用Jedis操作Redis 常规使用 Jedis的连接池 SpringDataRedis 手动序列化和反序列化 操作Hash Redis命令 通用命令 想知道某个命令怎么用 1.可以在官网学习用法 h…

ASP.NET Core Clean Architecture

文章目录 项目地址一、项目主体1. CQRS1.1 Repository数据库接口1.2 GetEventDetail 完整的Query流程1.3 创建CreateEventCommand并使用validation 2. EFcore层2.1 BaseRepository2.2 CategoryRepository2.3 OrderRepository 3. Email/Excel导出3.1 Email1. IEmail接口层2. Ema…

MySQL数据库——表的约束

1.空属性&#xff08;null/not null&#xff09; 两个值&#xff1a;null&#xff08;默认的&#xff09;和not null&#xff08;不为空&#xff09; 数据库默认字段基本都是字段为空&#xff0c;但是实际开发时&#xff0c;尽可能保证字段不为空&#xff0c;因为数据为空没办法…

DeepSeek-R1:通过强化学习激发大语言模型的推理能力

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列三DeepSeek大模型技术系列三》DeepSeek-…

蓝桥杯备考:递归初阶之汉诺塔问题

我们只要想一个主问题&#xff0c;我们是先把a上面n-1个盘子放在c里&#xff0c;然后再把第n个盘子放在b上&#xff0c;再利用a把c上n-1个盘子都放在b上就行了 #include <iostream> using namespace std;void dfs(int n,char x,char y,char z) {if(n0) return;dfs(n-1,x…

聊一聊vue如何实现角色权限的控制的

大家好&#xff0c;我是G探险者。 关于角色与权限控制&#xff0c;通常是分为两大类&#xff1a;一种是菜单权限&#xff1b;一种是操作权限。 菜单权限是指&#xff0c;每个角色对应着可以看到哪些菜单&#xff0c;至于每个菜单里面的每个按钮&#xff0c;比如增删改查等等这类…

如何将公钥正确添加到服务器的 authorized_keys 文件中以实现免密码 SSH 登录

1. 下载密钥文件 2. RSA 解析 将 id_ed25519 类型的私钥转换为 RSA 类型&#xff0c;要将 ED25519 私钥转换为 RSA 私钥&#xff0c;需要重新生成一个新的 RSA 密钥对。 步骤&#xff1a; 生成新的 RSA 密钥对 使用 ssh-keygen 来生成一个新的 RSA 密钥对。比如&#xff0c;执…

RK Android11 WiFi模组 AIC8800 驱动移植流程

RK Android WiFi模组 AIC8800 驱动移植流程 作者&#xff1a;Witheart更新时间&#xff1a;20250220 概要&#xff1a;本文介绍了基于 AIC8800D40 芯片的 WiFi6 模组 BL-M8800DS2-40 在 RK3568 平台上的驱动移植流程。主要涉及环境搭建、驱动代码分析、设备树修改、驱动编译配…

力扣3102.最小化曼哈顿距离

力扣3102.最小化曼哈顿距离 题目 题目解析及思路 题目要求返回移除一个点后的最小的最大曼哈顿距离 最大最小值的题一般直接想到二分 本题有一个简单办法就是利用切比雪夫距离 当正方形转45&#xff0c;即边上点**( x , y ) -> (x y , y - x)时&#xff0c;两点间max(…

BUUCTF--[极客大挑战 2019]RCE ME

目录 URL编码取反绕过 异或绕过 异或的代码 flag 借助蚁剑中的插件进行绕过 利用动态链接库 编写恶意c语言代码 进行编译 然后再写一个php文件 将这两个文件上传到/var/tmp下 运行payload 直接看代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_G…

Linux----线程

一、基础概念对比 特性进程 (Process)线程 (Thread)资源分配资源分配的基本单位&#xff08;独立地址空间&#xff09;共享进程资源调度单位操作系统调度单位CPU调度的最小单位创建开销高&#xff08;需复制父进程资源&#xff09;低&#xff08;共享进程资源&#xff09;通信…

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…