密码体系五 - 散列函数 散列码是什么
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也就确定。 此时找到一个散列值等于y的x是非常困难的
和弱抗碰撞性对应的是强抗碰撞性。强抗碰撞性指的是在茫茫数据集中,指定任意一个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是编程者必须的工具,因此在这里...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- 3种方式自动化控制APP(自动化控制方式有哪些)
- ADB 下载、安装及使用教程:让你更好地管理 Android 设备
- 手把手教你如何使用免费自动化工具——Appium(安卓版)
- 基于 Kotlin KMP 实现 HarmonyOS 与 Android 双平台 SDK 开发实践
- Android SDK——adb常见命令(android的adb)
- Android apk 打包流程(android怎么打包apk)
- 穿越时间·一步到位,教你完美安装Windows 11 Android 安卓子系统
- Android 5.1 内置应用抢先用,附安装教程
- 零基础入门Android-kotlin开发之开发工具的安装
- Xamarin.Android使用教程:简介和安装
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)