PKI - 01 散列(Hash)函数

文章目录

  • 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.hqwc.cn/news/456756.html

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

相关文章

【Unity优化(一)】音频优化

整理资教程:https://learn.u3d.cn/tutorial/unity-optimization-metaverse 1.音频优化 音频一般不会成为性能瓶颈,是为了节省内存和优化包体大小。 1.0 文件格式和压缩格式 原始音频资源尽量采用WAV格式。 移动平台音频尽量采用Vorbis压缩格式&#x…

Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器

本工作簿演示了 Elasticsearch 的自查询检索器将非结构化查询转换为结构化查询的示例,我们将其用于 BM25 示例。 在这个例子中: 我们将摄取 LangChain 之外的电影样本数据集自定义 ElasticsearchStore 中的检索策略以仅使用 BM25使用自查询检索将问题转…

Unity类银河恶魔城学习记录3-4 EnemyBattleState P50

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Enemy.cs using System.Collections; using System.Collections.Generic; …

字符编码认知、互相转换和C++代码判断是UTF8还是GBK

一、unicode编码基础认知 二、C如何判断是否是UTF8编码 形式1:详见mozilla xpcom\string\nsReadableUtils.cpp: 只要有一个字符不满足UTF8判断条件,就返回false bool IsUTF8(const nsACString& aString, bool aRejectNonChar) {nsRead…

仅一个月获推荐170w+,视频号近期爆火的秘诀是什么?

为了保证良好的创作环境,视频号的原创标准在1月做了新调整, 视频时长小于5秒则不能声明为原创 ,纯图片轮播也不能声明为原创,只有持续输出优质内容的账号才能显示原创标识及原创保护功能,这样的改动也给了不少创作者…

C++进阶(十一)C++11

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C11简介二、统一的列表初始化1、{}初始化2、std::initializer_lis…

苹果证书过期有什么影响

引言 苹果证书是一种数字签名,用于验证应用程序的身份和完整性。然而,若该证书过期,将会对用户和开发者带来一定的影响。在本文中,我们将详细介绍苹果证书过期的原理和影响,并提供一些解决方法。 苹果证书的原理 苹…

14.scala隐式转换

目录 概述实践代码执行结果 结束 概述 隐式转换:偷偷的(隐式)对现有功能进行增强(转换) 实践 代码 package com.fun.scalaimport java.io.File import scala.io.Sourceobject ImplicitApp {def main(args: Array[String]): Unit {// implicit 2 to 等价 &…

【Linux】Linux权限(下)

Hello everybody!在上一篇文章中,权限讲了大部分内容。今天继续介绍权限剩下的内容,希望大家看过这篇文章后都能有所收获! 1.更改文件的拥有者和所属组 对于普通用户,文件的拥有者和所属组都无权修改。 、 、 但root可以修改文件…

Anaconda的安装及其配置

一、简介 Anaconda是一个开源的包、环境管理器,主要具有以下功能和特点: 提供conda包管理工具:可以方便地创建、管理和分享Python环境,用户可以根据自己的需要创建不同的环境,每个环境都可以拥有自己的Python版本、库…

Linux 服务器安装maven

1、压缩文件下载Maven – Download Apache Maven 2、解压 tar -xvf apache-maven-3.8.4-bin.tar.gz 3、配置环境变量 在/etc/profile中保存Maven的环境变量: export M2_HOME/opt/server/apache-maven-3.5.4 export PATH$PATH:$M2_HOME/bin 4、通过source生效文件 so…

FB-BEV:BEV Representation from Forward-Backward View Transformations

参考代码:FB-BEV 动机与出发点 基于几何关系的BEV投影过程,依据BEV特征获取方式进行划分:图像角度使用类似LSS方案“push”过程或者BEV特征角度使用类似Fast BEV方案的“pull”过程。前者产生的BEV特征是稀疏的矩阵,后者产生的BE…