百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

密码体系五 - 散列函数 散列码是什么

yuyutoo 2024-10-13 00:32 4 浏览 0 评论

在开篇的时候,我们说过密钥体系主要解决三个问题:

  • 机密性(第三者无法通过密文猜测出明文)
  • 完整性(第三者无法篡改原文内容)
  • 不可否认性(第三者不能冒充其他人发送消息)

我们前面介绍的对称密码和非对称密码解决的是机密性,也就是确保 Eve 即便截获到密文,也无法猜测出 Alice 和 Bob 传递的是啥内容。

但有的时候,Eve 并非需要破解消息。 比如 Alice 辛辛苦苦写了一个程序,Eve 晚上偷偷在程序后面追加了一些代码。 第二天 ALice 将被替换的程序发给了 Bob。 虽然 Eve 没有截获任何密钥,但事实上也破坏了 Alice 和 Bob 之间的信任关系。

所以密钥体系仍然需要解决完整性,即第三者无法篡改原文内容。

本文我们将介绍第一种方式: 散列函数。

何为散列函数

散列函数是一个单向计算函数,只有一个输入和对应的输出。f(x)=y

其中x称为消息, 而y则称为散列值。 f(x)=y可以跟进消息内容计算出对应的散列值,而我们就可以通过散列值来检查信息的完整性。

并不是什么数学函数都可以当作散列函数的, 想要成为一个合格工业级散列函数,必须具备以下特征:

  • 固定长度的散列值

无论x是多长的消息,单向散列函数必须能够生成固定长度的y(散列值)。比如SHA-256它所计算出来的散列值永远是 256 比特。

  • 计算速度非常快

当然快是相对的,尽管随着x的变大,计算时间势必会加长。但如果不能在现实的时间内计算出来,那么就丧失实际应用的价值了。

  • 散列值的唯一性

散列值的唯一性称之为抗碰撞性。也就是只要x不同那么计算出来的y一定不能相同。抗碰撞性分为两类: 强抗碰撞性弱抗碰撞性

弱抗碰撞性指的是x确定,那么y也就确定。 此时找到一个散列值等于yx是非常困难的

弱抗碰撞性对应的是强抗碰撞性强抗碰撞性指的是在茫茫数据集中,指定任意一个y,找到 x 和 x' 是非常困难的

一个合格的散列函数,必须同时具备强抗碰撞性弱抗碰撞性

  • 单向性

根据x可以计算出y,但无法根据y反推出x

在一些场合中,单向散列函数也称之为"消息摘要函数"、"哈希函数"和"杂凑函数". 计算出的散列值也称之为"消息摘要"或者"指纹"。

常用的散列函数

  • MD4/5

MD 是消息摘要(Message Digest)的缩写。 常用的是 MD5,目前 MD5 已经被证实强抗碰撞性是不安全的,即根据 md5 的算法,现在已经可以产生具有相同y的两个不同x了。所以在安全性高的场合中,不建议使用 md5。

  • SHA-1/256/384/512

这是一个系列。后面的数字表示y的长度(SHA-1 除外)。 SHA-1 已经被证实强抗碰撞性是不安全的,而 SHA-256/384/512 仍未被攻破,所以后面这三个仍可以使用。后面这三类统称SHA-2

  • SHA-3

算法和 SHA-2 已经完全不一样了。 SHA-3 使用的是Keccak算法。Keccak算法理论上可以生成任意长度的散列值,目前在 SHA-3 规范中规定了SHA3-224\256\384\512这四种版本。Keccak使用的是一种称之为海绵结构的分组算法,大意是将x进行分组,然后每个分组计算生成y',再将y'作为输入和下一个明文分组一起计算。

  • RIPEMD-160

这个算法系列有两个版本: RIPEMD 和 RIPEMD-160。 其中 RIPEMD 已经被证实强抗碰撞性是不安全的。但 RIPEMD-160 仍然是安全的。

散列函数常用场景

  • 口令加密
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

散列函数无法解决的问题

散列函数只能确保信息内容不被篡改,而无法保证消息一定是从合法渠道发来的。 例如 Eve 可以伪装成 Alice 向 Bob 发送消息和对应的散列值。 Bob 接受到消息和散列值后,如果校验一致,那么也只能证明消息没有经过篡改,而无法证明消息是 Alice 发来的。

而为了解决这个问题,就需要同时使用散列值和数字签名了。

相关推荐

3种方式自动化控制APP(自动化控制方式有哪些)

自动化控制APP不管是在工作还是生活方面,都可以帮助我们高效地完成任务,节省时间和精力。本文主要介绍自动化控制APP的3种常用方式。1、Python+adb...

ADB 下载、安装及使用教程:让你更好地管理 Android 设备

简介作为一名测试工程师,我们经常需要在我们的Android设备上进行调试、管理或者定制。而Android调试桥(ADB)是Google官方提供的工具,可以帮助我们在计算机上与Androi...

手把手教你如何使用免费自动化工具——Appium(安卓版)

上次在上传了一篇Appium后,有人来问我有没有Andriod版的安装教程,这个当然有,抱着负责任的心,在上班摸鱼小半天之后,可算是把教程编辑好了准备环境JDKPython...

基于 Kotlin KMP 实现 HarmonyOS 与 Android 双平台 SDK 开发实践

背景随着鸿蒙平台的进一步发展,大家的态度也逐渐从观望转向实际投入,越来越多的公司开始考虑将自家应用迁移到鸿蒙平台。但是这一过程并非想象中的那么简单,尤其对于已经存在很多年的大型项目来说,直接投入大量人...

Android SDK——adb常见命令(android的adb)

1、adbdevices:检查设备2、adbinstallAPP安装包路径:安装APP3、adbuninstallAPP的程序包名(使用aapt可获取,也可问开发):卸载APP...

Android apk 打包流程(android怎么打包apk)

打包流程①打包资源文件,生成R.java文件打包资源的工具是aapt(TheAndroidAssetPackaingTool),位于android-sdk/platform-tools目录下。...

穿越时间·一步到位,教你完美安装Windows 11 Android 安卓子系统

一、适用于AndroidTM的Windows子系统...

Android 5.1 内置应用抢先用,附安装教程

其实在Google低调发布Android5.1更新之前,一些Android5.1的系统应用已提前泄露。虽然Android5.0与Android5.1在版本号上只相差0.1...

零基础入门Android-kotlin开发之开发工具的安装

Android与kotlinAndroid:美国谷歌公司开发的移动操作系统Kotlin:是一个用于现代多平台应用的静态编程语言,由JetBrains开发。2017年Google宣布Kotlin正式...

Xamarin.Android使用教程:简介和安装

简介目前,有超过1亿的Android设备被激活,因此大约有十亿人开发Android应用程序。那么接下来,小编将为大家介绍一系列的Xamarin.Android使用教程,希望能对大家的Android开发...

安卓APP开发中,如何使用加密芯片?

加密芯片是一种专门设计用于保护信息安全的硬件设备,它通过内置的加密算法对数据进行加密和解密,以防止敏感数据被窃取或篡改。如下图HD-RK3568-IOT工控板,搭载ATSHA204A加密芯片,常用于有...

第7篇:手机APP逆向之开发环境搭建(3)NDK安装与配置

第7篇:手机APP逆向之开发环境搭建(3)NDK安装与配置作为手机APP逆向开发环境要有以下几个部分。昨天讲了SDK安装与配置,今天,我们就要讲NDK环境配置。NDK的意思是Nativedevel...

手把手教零基础小白搭建APP的UI自动化环境

前言帮助零基础小白一步步搭建UI自动化环境,完成Python+Appium+模拟器/真机的UI自动化环境搭建。...

用Java开发Android App(用Java开发微信小程序)

使用Java开发AndroidApp主要依赖AndroidStudio,以下是详细步骤:1.安装开发环境...

nRF52832使用官方SDK开发入门教程

1.开发工具下载安装针对nRF52832的开发,首先需要下载安装对应工具,主要安装的工具有nRFgoStudio、Command-Line-Tools、IAR。IAR是编程者必须的工具,因此在这里...

取消回复欢迎 发表评论: