区块链重要基础知识3——签名算法考量以及实现并实验

2023-10-31

签名以及身份的管理

1.签名

1.1 特性

  1. 仅自己可以自己特定的签名,但是别人一看就知道就可以进行验证;
  2. 与特定文件关联,不能拿着我这个签名去与其他文件关联。

1.2 签名算法过程

1.2.1 总的流程

true
false
1.生成公钥私钥
.使用私钥对信息进行签名
确认信息是否属实
属实
不属实

1.2.2 各个详细的分流程

1.生成公钥私钥
输入秘钥长度keySize
公钥
私钥
生成公私钥函数
2.使用私钥对信息进行签名
待签名的信息
签名结果sig
签名函数sign
私钥
情况属实
情况不属实
3.确认信息是否属实
公钥
待签名的信息
签名结果sig
确认函数verify
结果
true
false

1.3 签名的不可伪造性以及相关试验

1.3.1 签名的特性以及相关约束

由于需要签名做到不可伪造性那么就需要对相关参数以及函数算法进行一些相关约束,约束如下:

  1. 我们注意到 g e n e r a t e K e y s generateKeys generateKeys s i g n sign sign都可以采用随机算法;
  2. 并且 g e n e r a t e k e y s generatekeys generatekeys最好是随机的,因为它需要为不同的人生成不同的密钥;
  3. v e r i f y verify verify则需要是确定的。

1.3.2 试验

对于不可伪造性我们可以做一个实验:

  1. 实验内容:

    1. 不可伪造性游戏是对手(黑客)和挑战者一起玩这样一个游戏:如果黑客可以在一个之前没有见过的消息上进行签名,那么黑客就赢得这个游戏;反之,如果黑客做不到,挑战者就赢得游戏,从而可以证明这个数字签名方案是不可伪造的。
  2. 实验图示:

    1. 大致过程就是黑客向挑战者不断发送信息让其进行签名,黑客不断收集签名信息得到其规律,最终目的做出一个不在刚刚的签名信息范围之内的信息以及签名使得挑战者那里依旧能够确认成功。

    伪造性相关实验.png

    1. 将允许黑客选择一些文件的签名,不限时长,只要猜测的数量合情
      • 合情猜测数量的意思是,我们允许攻击者尝试猜测的次数高达百万,但数量高达 2 80 2^{80} 280 就不行了。

1.4 对实践的考虑以及最终的实现

1.4.1 对实践的考虑

  1. 对算法的随机性有一定的要求,好的随机性才能保证算法的安全,不然别人很容易就通过统计分析去进行破解,尤其在比特币这样一个公开的系统中;

  2. 信息大小不断变更,而签名算法由于计算压力对长度是有限的,因为需要是整个信息进行签名,而不像hash可以进行分割,所以一个可行的办法就是:

    1. 首先对信息进行hash摘要提取;
    2. 对信息的摘要进行签名,摘要完成了签名也间接地对信息完成了签名,并且hash函数具有碰撞阻力;
  3. 在区块链中可以对hash指针进行签署,签署了hash指针表示签名了该结点,由于关联性同时也就签署了前面的节点,后面的是之后签署的自然就与当前的无关

    1. 签名覆盖(或者说保护)整个结构——这不仅仅是哈希指针本身,还包括哈希指针指向的整个区块链。比如,如果签署了区块链末尾的哈希指针,其结果就是你有效地数字签署了整条区块链

1.4.2 签名算法

比特币使用ECDSA算法,而不是标准椭圆曲线“secp256k1”[预计提供128位安全保障,即打破这个算法的难度与执行 2 128 2^{128} 2128对称性密钥运算(如破解哈希函数)一样困难]。虽然这个曲线是公开标准,但除比特币以外鲜有使用,其他使用ECDSA的应用(如安全网络浏览时的TLS [2] 密钥交换)通常都使用更常见的“secp256k1”曲线。这就是比特币的一个古怪之处,因为在比特币系统早期实施中被中本聪选定(参见原版前言),现在已很难改变。

注意:
  1. 使用ECDSA时,确保随机性良好来源至关重要,因为不良来源将可能导致密钥信息的泄露;
  2. 仅仅只是在生成签名时使用了不良随机,而你使用的密钥完美无缺,你的个人密钥还是有可能泄露。

1.4.3 签名的参数

个人密钥:256位
公钥(未压缩):512位
公钥(压缩):257位
待签名信息:256位
签名:512位

注意,严格来讲,虽然ECDSA只能签署256位的信息,但这存在问题,因为信息在签署之前总是已经经过哈希压缩,因此,任何大小的信息都能被有效签署。

参考文章

  1. 解读区块链全套六册.第四章.第四节——签名算法部分
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链重要基础知识3——签名算法考量以及实现并实验 的相关文章

  • JavaScript中Math.max()和Math.min()方法

    JavaScript中Math max 和Math min 方法 Math是JavaScript中的对象 不是构造函数 可以用来执行数学任务 1 Math max max 返回给定的一组数据中的最大值 但是不接收数组作为参数 参考用法
  • vue3.0 兼容ie浏览器

    vue3 0 兼容ie浏览器 安装babel polyfill npm install save babel polyfill 在main js里面引入 一定要在最上面 第一行 import babel polyfill 安装完成后会有ba
  • HTML页面结构

随机推荐

  • Unity实现点击显示不同UI

    在开发过程中经常遇到切换显示不同UI的需求 实现方案有2套 1 创建两个场景A B 在A中点击某个button后触发切换事件后加载B场景现在新的场景信息 优点 是逻辑简单 在不同的场景中创建对应的UI即可 缺点是当两个场景中有重复显示的模型
  • 高德地图JSAPIvue项目的使用

    最近在项目中使用高德地图JSAPI 遇到一些问题整理一下做个总和记录 希望能帮到看到文章的大家 1 关于引用 npm i amap amap jsapi loader save 然后创建好地图容器后引入地图 注意避坑的点 1 使用loca可
  • vue指令实现埋点

    1 自定义指令 import Vue from vue 自定义埋点指令 Vue directive track 钩子函数 只调用一次 指令第一次绑定到元素时调用 在这里可以进行一次性的初始化设置 el 指令所绑定的元素 可以用来直接操作 D
  • Linux 读文件 - readahead预读算法

    顺序读场景 intmain charc 4096 intin 1 in open news txt O RDONLY intindex 0 while read in c 4096 4096 printf index d len ld n
  • linux 内核 - ioctl 函数详解

    linux 内核 ioctl 函数详解 1 概念 ioctl 是设备驱动程序中设备控制接口函数 一个字符设备驱动通常会实现设备打开 关闭 读 写等功能 在一些需要细分的情境下 如果需要扩展新的功能 通常以增设 ioctl 命令的方式实现 在
  • leetcode 907. 子数组的最小值之和

    给定一个整数数组 arr 找到 min b 的总和 其中 b 的范围为 arr 的每个 连续 子数组 由于答案可能很大 因此 返回答案模 10 9 7 leetcode题目链接 示例 1 输入 arr 3 1 2 4 输出 17 解释 子数
  • 根据数据库名生成数据库结构说明

    根据数据库名生成数据库结构说明 package com cjm common import java io File import java io FileOutputStream import java sql Connection im
  • 文件上传优化

    文件上传优化 文件的名称需要优化 服务端 保存的文件名称如果固定 那么最终会导致服务器硬盘 只会保留一个文件 对上传的文件名称优化 System currentTimeMillis new Random nextInt 1000000 jp
  • CMake - 报错:Missing variable is: CMAKE_FIND_LIBRARY_PREFIXES

    问题描述 今天学习ZeroMQ 写了一个HelloWorld的测试程序 cmake的时候 报错Missing variable is CMAKE FIND LIBRARY PREFIXES 具体CMakeLists txt内容为 cmake
  • 【第29篇】MAE:屏蔽自编码器是可扩展的视觉学习器

    文章目录 摘要 1 简介 2 相关工作 3 方法 4 ImageNet 实验 4 1 主要属性 4 2 与之前结果的比较 4 3 局部微调 5 迁移学习实验 6 讨论与结论 摘要 论文链接 https arxiv org abs 2111
  • js将后台返回的数据转化为树形结构(扁平数组转树状结构)

    前言 做项目使常遇到需要将后台返回的数据 转换为树状结构给用户展现 例如 这也是前端面试常考的算法题 一起来检测一下吧 步骤 准备一个空的树对象 遍历列表中的每个元素 对于每个元素 根据该元素的父级ID找到其对应的父节点 如果找到了父节点
  • 如何开始使用 Python 3 编程:入门

    Python 是世界上发展最快的编程语言 这种流行的编程语言已帮助无数设计师 科学家和工程师努力解决当今消费者和企业面临的重大问题 使用 Python 更智能地工作 什么是 Python 编程 Python 编程是编写代码以执行任务或解决问
  • 小象课堂在线授课教育系统

    此项目包含后端全部代码 前端包括后台和web界面的源码 数据库用的mysql 可当作课设或者毕设 还可写入自己的简历中 web界面展示 前端后台界面展示 用户管理 课程管理 内容配置 订单管理 系统管理 系统监控
  • 概述-数据服务是什么?

    数据服务是什么 我以前认为 数据服务 就是通过数据接口提供数据的方式的统称 就是你调用一个接口 我传给你一些数据 数据处理逻辑接口内已经封装了 用这些数据你可以处理某些问题 而直接查询数据的不是数据服务 后来看了 大数据之路 阿里巴巴大数据
  • FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列 但是在FreeRTOS中任务间的通讯还有信号量 邮箱 事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 增加邮箱部分 任务通知发送消息 Demo 202
  • mysql数据库表升级方案_一个基于mysql数据库的项目的升级解决方案小结(节选)

    1引言 数据库使用MYSQL4 0版本 随用用户数的逐步增多 因为数据库版本过低而引起的抱怨也越来越多 不足也越来越明显 首先 对产品化部署产生了制约 由于MYSQL4 0数据库的配置文件my ini是存放在Windows的系统目录下的 同
  • window域名 映射 如何将域名映射到本地IP

    域名 映射 如何将域名映射到本地IP 万网域名映射 本地电脑映射 若果是自己注册的域名 直接解析到本地 IP 127 0 0 1 就可以使用此域名来访问自己的计算机 若果是想随便制定一个域名映射到本机下面讲解 C Windows Syste
  • CTF - Base64换表

    Base64换表 CTF汇总 原题 复制保存为16进制即可得文件 IDA显示 题目解读 提示 base64程序逆向 题目特点 Base64算法特征 Base64表格 位移 等号补位 结论 Base64变体 换表 Base64变体 题外话 解
  • 字符串变换最小字符串

    题目 给定一个字符串s 最多只能进行一次变换 返回变换后能得到的最小字符串 按照字典序进行比较 变换规则 交换字符串中任意两个不同位置的字符 解题思路 1 对字符串按照字典序进行排序 找到字典序最小的字符串 2 找到这个字符串中字典序最小的
  • 区块链重要基础知识3——签名算法考量以及实现并实验

    签名以及身份的管理 1 签名 1 1 特性 仅自己可以自己特定的签名 但是别人一看就知道就可以进行验证 与特定文件关联 不能拿着我这个签名去与其他文件关联 1 2 签名算法过程 1 2 1 总的流程