加密哈希函数

加密函数的三个特性:

  • 可以输入任意长度的字符串。
  • 产生固定长度的输出。
  • 可以高效的进行计算。一般来说,复杂度是O(n)O(n)O(n),其中nn<script type="math/tex" id="MathJax-Element-2">n</script>是输入的字符串长度

加密哈希函数的三个属性:

  • Collision-resistance 碰撞存在性。哈希碰撞确实是存在的,但是我们无法刻意的找到特定的碰撞。
  • Hiding 隐藏属性。给定一个输出的哈希值,我们无法计算出产生该输出值的输入值。
  • Puzzling-friendly。对于每个n位的输出值y和对应的输入值x,如果想要找到一个一样的输出值对应的输入值,可以寻找满足条件的概率和随机寻找满足条件的概率一样。

哈希指针和对应的数据结构

这里的哈希指针,类似于我们C/C++的指针,但是该指针仅仅指明了物理存储的确切地址,而且还存储了前一个区块某个特定时间下的哈希值。如下图所示的表示方式:

多个数据块通过相同的方式串联到一起,就形成了我们所说的区块链:

上图中,每一个数据块的头部都存储了前一个数据块的地址和特定时间下的哈希值。

区块链的防篡改特性在于:如果一个区块链的某个结点k的数据被篡改,那么k+1区块头部的哈希值与篡改后k的哈希值不同;为了保持前后哈希的一致性,必须篡改后续所有块的哈希值。

但是,即使改到了最后,如果我们仍然保留了篡改前的哈希值,那么篡改后的哈希值与篡改前的哈希值仍然不同,那么我们可以断定数据被更改了。在上面的概述中,我么假设篡改后的所有数据发生哈希碰撞的可能性在统计概率上为0.

在实际的操作中,我们使用Merkle树这一数据结构来表示区块链,而不是使用单一的链式结构:

Merkle树的叶子结点用于存储带有时间戳的数据块,而中间结点存储哈希值,根结点存储最终的状态的哈希值。如果某个数据块的数据被篡改,那么根结点的哈希值肯定会发生变化。关于Merkle更加详细的介绍,可以看这篇博客。

数字签名

数字签名的作用主要有两个:

  • 只有你自己才能生成自己的签名,但是其他看到签名的人会证实你的签名是有效的。
  • 签名与一个特定的文档绑定,那么这个文档的中所有的记录都证明是你同意的

数字签名的工作模式如下:

  • 生成秘钥(pk,sk) = generateKeys(keySize)sk是私钥,用于给我们的交易信息加密;pk是公钥,每个人都可以看见,用于验证是我们的签名
  • 生成签名 sig = sign(sk, message)。 私钥sk和我们的消息共同经过加密算法sign,生成签名sig
  • 验证信息和签名 isValid = verify(pk, message, sig) 。把消息、签名和公钥作为输入,如果是我们发送的消息,则返回true;否则返回false。

公钥作为身份标识

我们可以这么理解:假设我们发现了一个message和一个签名,如果现在有了一个pk,可以让验证算法通过,那么就可以认为是pk做的这笔交易。在去中心化的状态下,我们可以认为一个pk就是一个合法的身份,而且不需要传统的中心服务器来注册身份信息。只要我们想,我们可以随时生成一个pk作为我们的身份,而且这完全是匿名的。

第一章 密码学和加密交易的介绍相关推荐

  1. 第一章 51单片机开发入门知识介绍

    第一章 单片机开发入门知识介绍 1.1 51单片机介绍 51单片机是对所有兼容Intel 8031指令系统的单片机的统称. 该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技 ...

  2. 【2023 · CANN训练营第一季】晟腾AI入门课(TensorFlow)第一章 晟腾AI基础知识介绍

    本章学习目标 了解CANN在晟腾AI全栈架构中的位置和作用. 了解基于CANN的应用开发编程框架.基本概念. 晟腾AI全栈架构 晟腾AI全栈可以分差四个大部分: 应用使能层面,此层面通常包含用于部署模 ...

  3. 现代密码学第一章复习题

    第一章密码学课后题答案 后面的附加题是自己去做的,如有错误,欢迎大家指出. 第一章作业参考答案 1.设仿射变换的加密是E11,23(m)=11m+23(mod 26),对明文"THE NAT ...

  4. 2023Matlab初级教程- 第一章 初识Matlab与界面介绍

    第一章 Matlab 初识Matlab与界面介绍 文章目录 第一章 Matlab 初识Matlab与界面介绍 Matlab初级教程 1.课程介绍 2.初识Matlab与界面介绍 2.1Matlab介绍 ...

  5. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  6. 第一章 Spring基础

    第一章 Spring基础 1.1 Spring介绍 Spring是一个框架,框架是高度抽取.可重用的代码的一种设计.Spring就是多个可重用的模块的集合,从而形成一个领域的整体解决方案. Sprin ...

  7. 网络经济学期末复习——第一章 导论

    网络经济学期末复习 --第一章.导论 一.课程介绍 二.课本选择 三.思维导图--第一章 导论 四.温馨提示 一.课程介绍 网络经济学简介: 网络经济学是近几年的一门新兴的研究网络环境下经济活动的交叉 ...

  8. 研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案

    研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 目录 研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 一.简单介绍 二.计算机网络第七版(谢希仁) 第一章 课后答案 1. ...

  9. 《现代密码学》第一章——经典密码学介绍

    第一章经典密码学介绍 1.1密码学和现代密码学 a.现代密码学与古典密码学的区别: 1.2对称密钥加密的基本设置 a. b.加密的语法 密钥产生算法Gen:一种概率算法 加密算法Enc:输入密钥k,明 ...

最新文章

  1. python时间序列动图_手把手教你用Python进行时间序列分解和预测
  2. 解决Win7旗舰版开机后无线网络识别非常慢的问题
  3. 乐源机器人没电提醒吗_我每天费尽心思,就为了逗一个机器人开心。。
  4. Python的DataFrame多个条件过滤错误
  5. java 手动线程调度_Java Thread 多线程 操作线程
  6. 进程间通信——匿名管道
  7. 超简单,带你学会多线程爬虫
  8. iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
  9. P4074-[WC2013]糖果公园【树上带修莫队】
  10. android 图片叠加xml,Android实现图片叠加效果的两种方法
  11. linux libmpi.so.12,单机安装vasp5.4.4,系统SUSE 12 SP3,编译器Intel_Parallel_Studio_XE_2019_Linux...
  12. ubuntu 下载速度快但网页打开慢的解决方法
  13. 今天发现的好几个PP文字,不敢独享,gaga
  14. 兄弟FAX-2890更换硒鼓加粉清零方法
  15. 加密狗Android软件,加密狗app
  16. 用c#查询各快递物流信息
  17. go语言for循环break、continue高级用法
  18. 【图文详解】环境变量中Path环境变量作用详解
  19. K.论演员的自我修养---组合数的运用路径计数
  20. flask 登出功能

热门文章

  1. Matplotlib库入门
  2. KMP算法总结+Next数组+Nextval数组
  3. 将CSV文件写入到MySQL中(用Pandas库实现MySQL数据库的读写)
  4. 2018: 跑图(深搜)
  5. CUDA——Windows上CUDA的安装教程
  6. python 批量自动搜索、自动抓取需要的信息简单教程【selenium】
  7. Solr Wiki文档
  8. cuda 10.1和 cudnn 7.6.5
  9. PREV-55 小计算器 (进制转换)
  10. 小学生也能看懂的ArrayList底层原理