PKI - 01 散列(Hash)函数

news2024/9/22 4:50:03

文章目录

  • PKI概述
  • 散列
  • 日产生活中的指纹的工作原理
  • 散列函数的工作原理
  • 散列函数的四大特点
  • 使用散列函数验证数据的完整性

在这里插入图片描述


PKI概述

在这里插入图片描述

PKI(Public Key Infrastructure,公钥基础设施)证书系统是一种用于保护网络通信安全的技术。它基于非对称加密算法,使用一对密钥:公钥和私钥。

想象一下,你有一个保险柜,里面有两把钥匙:一把是公钥,可以给别人,另一把是私钥,只有你知道。当别人想给你发送私密信息时,他们可以使用你的公钥对信息进行加密,然后将加密后的信息发送给你。而你收到信息后,可以使用你的私钥解密,因为只有你拥有私钥。

PKI证书系统就是管理和分发这些公钥和私钥的系统。它通过数字证书来验证公钥的真实性,并确保通信双方的身份。这些数字证书是由受信任的第三方机构,称为证书颁发机构(Certificate Authority,CA),签发的。当你使用一个网站时,浏览器会检查该网站的数字证书,以确保你正在与正确的网站通信,而不是一个假冒的网站。

简而言之,PKI证书系统帮助确保网络通信的安全性和可靠性,通过加密和验证来保护数据的传输过程。


散列

散列函数就像是一个魔法盒子,它能够把任何东西都变成一串看起来很复杂的乱码。你可以往这个盒子里放任何东西,比如一段文字、一张图片,甚至是一部电影,然后盒子就会把它们变成一串乱码,这串乱码就是这个东西的“指纹”。

散列函数也叫做HASH函数,主流的散列算法有MD5与SHA ( SHA-1 , SHA-2 【主流】)。散列函数的主要任务是验证数据的完整性。通过散列函数计算得到的结果叫做散列值,这个散列值也常常被称为数据的指纹(Fingerprint)

MD5、SHA-1和SHA-2都是密码学中常见的哈希函数,用于计算数据的哈希值。它们的作用都是为了验证数据的完整性、实现数字签名等安全目的。下面是它们的简要介绍:

  1. MD5(Message Digest Algorithm 5)

    • MD5是一种哈希函数,设计于1991年。
    • 它生成128位(16字节)的哈希值。
    • 虽然在过去被广泛使用,但是由于存在碰撞漏洞(即不同的输入可能产生相同的哈希值),已经被认为不再安全,不建议用于加密应用。
  2. SHA-1(Secure Hash Algorithm 1)

    • SHA-1是SHA系列中的一员,设计于1995年。
    • 它生成160位(20字节)的哈希值。
    • 类似于MD5,由于存在碰撞漏洞,SHA-1也被认为不再安全,已经被弃用。
  3. SHA-2(Secure Hash Algorithm 2)

    • SHA-2是SHA系列的后续版本,包括了一系列的哈希函数,如SHA-224、SHA-256、SHA-384、SHA-512等。
    • SHA-2通过使用不同的位数来产生不同长度的哈希值,例如SHA-256生成256位(32字节)的哈希值,SHA-512生成512位(64字节)的哈希值。
    • SHA-2被广泛认为是安全可靠的,目前仍然是主流的哈希函数之一,被广泛应用于数字签名、数据校验等领域。

总的来说,MD5和SHA-1由于存在严重的碰撞漏洞,已经不再安全,不建议在安全性要求较高的场景中使用。而SHA-2则被认为是安全可靠的,是目前广泛采用的哈希函数


日产生活中的指纹的工作原理

在这里插入图片描述


散列函数的工作原理

在这里插入图片描述

比如网站提供的MD5和 SHA值

在这里插入图片描述

这个指纹有几个神奇的特点:

  1. 相同的东西一定会有相同的指纹,就像每个人的指纹都是独一无二的一样。所以,如果两个人的指纹一样,那么他们的东西肯定也是一样的。
  2. 哪怕是一点点的变化,也会导致指纹完全不同。就像你稍微移动一下手指,你的指纹就会变化一样。所以,只要有一点点的变化,指纹就会完全不一样。
  3. 无法通过指纹反推出原来的东西。就像看到一个人的指纹,也不可能准确地知道他是谁一样,从指纹也无法知道原来的东西是什么。

所以,散列函数就像是一种变魔术的工具,它能够把任何东西变成一串独一无二的乱码,用来做很多安全的事情,比如密码存储、数字签名等。


散列函数的四大特点

散列函数时,有四个重要的特点需要了解:

  1. 固定大小:散列函数生成的哈希值(也就是乱码)是固定长度的,无论输入数据的大小如何,输出的哈希值都是一样的长度。就像是一个魔法机器,无论你放进去多少东西,它都会生成同样长度的乱码。

  2. 雪崩效应:这个特点类似于雪崩一样,即微小的变化会引起巨大的影响。当输入数据发生一点小小的变化时,散列函数生成的哈希值会完全不同。就像是一颗小雪球滚动下山,最终会变成巨大的雪崩一样,微小的变化会扩大到整个哈希值中。

  3. 单向:散列函数是单向的,意味着它们可以轻松地从输入数据生成哈希值,但几乎不可能从哈希值还原出原始数据。就像是把一本书放入碎纸机,无法通过碎片重新拼凑出完整的书籍一样,从哈希值还原出原始数据几乎是不可能的。

  4. 冲突避免:散列函数的目标是尽可能避免不同的输入数据生成相同的哈希值,这种情况称为“冲突”。虽然绝对避免冲突是不可能的,但好的散列函数会尽量减少冲突的发生概率。就像是人口普查办公室尽力避免给两个不同的人分配相同的身份证号码一样,散列函数也会尽量避免生成相同的哈希值。


王小云并非直接破解了MD5,而是利用了MD5算法本身存在的漏洞,成功实施了一种称为碰撞攻击(Collision Attack)的方法。这种攻击是一种密码学攻击方式,目的是在合理的时间内找到两个不同的输入,它们产生相同的MD5哈希值。

在2004年,王小云与他的团队发布了一篇论文,详细描述了他们是如何实现MD5碰撞攻击的。他们使用了巧妙的算法和计算机技术,在比较短的时间内找到了两个不同的文件,它们的MD5哈希值是相同的。这一成就引起了广泛的关注,并且暴露了MD5算法的严重弱点。

MD5碰撞攻击的成功意味着MD5已经不再是一个安全可靠的哈希算法,因为它无法保证数据的唯一性和完整性。因此,现在通常建议不再使用MD5作为密码哈希或数据完整性校验的算法。

MD5的碰撞漏洞使得攻击者可以伪造数据,而哈希值却保持不变,这对数据的完整性和安全性造成了严重威胁。因此,建议不再使用MD5作为加密应用的安全手段,而是转向更安全可靠的哈希函数,如SHA-256等。

举个例子,黑客可以通过破解MD5来伪造一个数据,但使用者通过MD5值却识别不到这是一个已经被篡改的数据,从而带来一定的安全隐患。


使用散列函数验证数据的完整性

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自己动手打包element UI官方手册文档教程

经常用element ui朋友开发的比较郁闷,官方文档网基本上都是打不开的, 官方:https://element.eleme.io/ 一直打不开,分析下是里面用的cdn链接ssl证书无效。 就想着自己搭建一个element UI文档 自己搭建的: Element文档网…

python 动态显示数据。

界面显示动态的数据。 from time import sleep import serialimport tkinter as tklis[1,10,40] # 打开串行端口 ser serial.Serial(COM3, 9600) # 9600为波特率,根据实际情况进行调整# 创建窗口和画布 window tk.Tk() canvas tk.Canvas(window, width400, heig…

牛客错题整理——C语言(实时更新)

1.以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main() { int sum, pad,pAd; sum pad 5; pAd sum, pAd, pad; printf("%d\n",pAd); }答案为7 由于赋值运算符的优先级高于逗号表达式&#xff0c;因此pAd sum, pAd, pad;等价于(…

大厂聚合支付系统架构演进(上)

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都国企技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区…

OpenCV与机器学习:使用opencv和sklearn实现线性回归

前言 线性回归是一种统计分析方法&#xff0c;用于确定两种或两种以上变量之间相互依赖的定量关系。在统计学中&#xff0c;线性回归利用线性回归方程&#xff08;最小二乘函数&#xff09;对一个或多个自变量&#xff08;特征值&#xff09;和因变量&#xff08;目标值&#…

osg模型的平移、缩放、旋转

加载2个模型&#xff0c;其中一个向上移动28个单位&#xff1b; 加载2个模型&#xff0c;其中一个缩放0.5倍&#xff0c;向下移动22个单位&#xff1b; 加载2个模型&#xff0c;其中一个缩放0.5倍、旋转45度、向右向下移动几个单位&#xff1b; 都是用矩阵实现的&#xff1b; …

Mac上软件闪退(意外退出)的解决方法

mac苹果电脑上运行软件会意外退出&#xff0c;怎么办&#xff0c;可以试试下面的方法&#xff0c;亲测可行&#xff01; 第一种方法&#xff1a; 1、打开访达&#xff0c;进入应用程序目录&#xff0c;找到闪退的软件图标&#xff0c;在软件图标上右键选择“显示简介”&#…

【计算机网络】【练习题及解答】【新加坡南洋理工大学】【Computer Control Network】【Exercise Solution】

说明&#xff1a; 个人资料&#xff0c;仅供学习使用&#xff0c;版权归校方所有。 一、题目描述 该问题接上期博文【练习题及解答】&#xff0c;描述网络通信中的链路效率&#xff08;Link Efficiency&#xff09;&#xff0c;即Link Utilization的计算。&#xff08;此处认…

golang 引入swagger(iris、gin)

golang 引入swagger&#xff08;iris、gin&#xff09; 在开发过程中&#xff0c;我们不免需要调试我们的接口&#xff0c;但是有些接口测试工具无法根据我们的接口变化而动态变化。文档和代码是分离的。总是出现文档和代码不同步的情况。这个时候就可以在我们项目中引入swagge…

二叉树的锯齿形遍历,力扣

目录 题目&#xff1a; 我们直接看题解吧&#xff1a; 快速理解解题思路小建议&#xff1a; 解题方法&#xff1a; 相似题目对比分析&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 补充说明&#xff1a; 思路优化&#xff1a; 代码实现(层序遍历倒序)&#xff1a; 题…

kettle spoon创建带参数定时任务并关闭它

文章目录 ETL是什么下载安装kettle和mysql8资源下载 数据库连接方式已定义的数据库类型进行连接Generic Database方式连接JNDI方式 运行方式使用案例教程定时job执行增量插入转换新建转换新建定时任务job关闭定时任务job 命令行运行定时任务job命令行执行任务后台运行脚本文件设…

使用 openpyxl 操作 Excel

由于单位有任务&#xff0c;需要按照名册制作多个工作表。手动复制和修改内容太费事了&#xff0c;所以使用python完成此项工作&#xff0c;为之后的此类工作提供一个通用脚本。 安装依赖库 pip install openpyxl lxml我们需要用到openpyxl。在官方文档中提到&#xff0c;如果…

【Java安全】ysoserial-URLDNS链分析

前言 Java安全中经常会提到反序列化&#xff0c;一个将Java对象转换为字节序列传输&#xff08;或保存&#xff09;并在接收字节序列后反序列化为Java对象的机制&#xff0c;在传输&#xff08;或保存&#xff09;的过程中&#xff0c;恶意攻击者能够将传输的字节序列替换为恶…

springboot159基于springboot框架开发的景区民宿预约系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Python学习从0到1 day15 Python函数进阶

什么东西的可塑性最强呢&#xff1f; 是水&#xff0c;水能载舟 exciting ——24.2.6 一、函数的多返回值 当一个函数需要多个返回值&#xff0c;该如何书写代码&#xff1f; 按照返回值的顺序&#xff0c;写对应顺序的多个遍历接收即可 变量之间用逗号隔开 支持不同类型的数据…

初始Ansible自动化运维工具之playbook剧本编写

一、playbook的相关知识 1.1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式&#xff0c;其功能更强大灵活。简单来说&#xff0c;playbook是一个非常简单的配置管理和多主机部署系统&#xff0c;不同于任何已经存在的模式&#xff0c;可作为一个适…

Java中JVM常用参数配置(提供配置示例)

目录 前言一、内存参数配置二、垃圾收集器配置三、GC策略配置3.1、基础通用配置3.2、Parallel 和 Parallel Old 常用参数配置3.3、CMS 常用参数配置3.4、G1 常用参数配置 四、GC日志配置五、dump 日志参数配置5.1、OutOfMemory异常时生成dump文件5.2、发生Full GC时生成dump文件…

C++:编译器对被const修饰变量的处理行为(替换)

C&#xff1a;编译器对被const修饰变量的处理行为&#xff08;替换&#xff09; 前言原因代码验证 前言 最近博主在写笔试时看到了一道有关被const修饰变量相关题&#xff0c;原题如下&#xff1a; 对于初学者来说&#xff0c;虽然a是常量&#xff0c;但可以通过指针p的行为来…

EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关&#xff08;通过搜索标题关键词查找得到&#xff0c;可能不全&#xff09;的论文&#xff0c;共计12篇&#xff0c;包含5篇正会论文和7篇Findings论文&#xff0c;以下是对这些论文的略…

Vue代理模式和Nginx反向代理(Vue代理部署不生效)

在使用axios时&#xff0c;经常会遇到跨域问题。为了解决跨域问题&#xff0c;可以在 vue.config.js 文件中配置代理&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServer: {port: 7070,prox…