密码学系列 - SR25519与ED25519
SR25519
SR25519 是一种高级的数字签名算法,它基于 Schnorr
签名方案,使用的是 Curve25519
椭圆曲线。这种签名算法在密码学社区中广受欢迎,特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。
SR25519 简介
SR25519 是一种 Schnorr
签名算法的具体实现,使用 Curve25519
作为基础曲线。这种算法结合了 Schnorr 签名的安全性和 Curve25519 的高效性,具有以下特点:
- 安全性:Schnorr 签名方案被认为具有比 ECDSA 更强的安全属性,尤其是在抗量子计算攻击方面。
- 性能:Curve25519 提供了高效的椭圆曲线运算,适合在资源受限的环境中使用。(适合嵌入式)
- 简洁性:Schnorr 签名方案的设计相对简洁,易于实现和验证。
主要特点
-
高效性:
- Curve25519 是一种高效的椭圆曲线,特别适合在嵌入式系统和移动设备上使用。
- SR25519 的签名和验证操作都非常快速,适合高性能应用。
-
安全性:
- Schnorr 签名在形式上比 ECDSA 更加简单和安全。它自然地避免了一些复杂的漏洞,如某些侧信道攻击。
- 使用 Curve25519 提供的安全性,能够抵抗当前已知的大多数密码学攻击。
-
灵活性:
- SR25519 支持多种应用场景,包括但不限于区块链和加密货币。
SR25519 的工作原理
SR25519 的签名算法大致分为以下几个步骤:
-
密钥生成:
- 生成一个随机私钥
sk
。 - 计算公钥
pk
为pk = sk * G
,其中G
是 Curve25519 的生成元。
- 生成一个随机私钥
-
签名:
- 给定消息
m
,私钥sk
和公钥pk
。 - 生成一个随机数
r
,计算承诺R = r * G
。 - 计算挑战
c = H(R || pk || m)
,其中H
是一个哈希函数。 - 计算响应
s = r + c * sk
。 - 签名
(R, s)
由承诺R
和响应s
组成。
- 给定消息
-
验证:
- 给定消息
m
,公钥pk
和签名(R, s)
。 - 计算挑战
c = H(R || pk || m)
。 - 验证
s * G = R + c * pk
,如果等式成立,签名有效。
- 给定消息
使用 SR25519 的场景
SR25519 被广泛用于区块链和加密货币项目,例如:
- Polkadot 和 Substrate:这些区块链框架默认使用 SR25519 作为其签名算法,利用其高效和安全的特点。
- 加密货币交易:SR25519 可以用于高效和安全的交易签名,保护用户的资产安全。
- 分布式系统:在需要高效和安全的数字签名的分布式系统中,SR25519 是一个很好的选择。
SR25519 与其他签名算法的比较
-
与 ECDSA 比较:
- 安全性:SR25519 的 Schnorr 签名具有更强的安全性,不易受到某些攻击。
- 性能:SR25519 的签名和验证操作比 ECDSA 更加高效。
-
与 Ed25519 比较:
- 设计:Ed25519 也是基于 Curve25519 的签名算法,但使用 EdDSA 签名方案,而 SR25519 使用的是 Schnorr 签名方案。
- 性能和安全性:两者在性能上差异不大,但 Schnorr 签名具有一些额外的安全和灵活性优势。
结论
SR25519 是一种高效、安全的数字签名算法,特别适合在区块链和加密货币领域使用。其基于 Schnorr 签名和 Curve25519 的设计提供了出色的性能和安全性,使其成为现代加密应用的理想选择。
ED25519
Ed25519 是一种高效的数字签名算法,基于 Edwards
曲线上的椭圆曲线数字签名算法 (EdDSA)。它被设计为安全、快速且易于实现,广泛应用于各种安全通信和认证场景。以下是关于 Ed25519 的详细介绍。
Ed25519 简介
Ed25519 使用的是一种称为 Curve25519 的椭圆曲线。Curve25519 是由 Daniel J. Bernstein 在 2005 年设计的,这种曲线提供了强大的安全性和高效的运算性能。
主要特点:
- 高性能:Ed25519 的签名和验证速度非常快,适合资源受限的环境。
- 高安全性:基于 Curve25519 的强安全性,具有很高的抗攻击能力。
- 简洁易用:签名算法设计简单,易于实现和验证。
工作原理
Ed25519 的签名和验证过程大致分为以下几个步骤:
密钥生成
- 生成一个随机的32字节的种子
seed
。 - 使用哈希函数 SHA-512 对种子进行哈希,得到64字节的散列值
h
。 - 将
h
的前32字节(称为h0
)作为私钥sk
。 - 将
h
的后32字节(称为h1
)用作辅助数据。 - 计算公钥
pk
:pk = sk * B
,其中B
是基点。
签名生成
给定消息 m
和私钥 sk
,生成签名如下:
- 使用哈希函数 SHA-512 对私钥
sk
和消息m
进行哈希,得到64字节的散列值r
。 - 计算承诺
R = r * B
。 - 使用哈希函数 SHA-512 对
R
和消息m
进行哈希,得到64字节的挑战h
。 - 计算响应
s = r + h * sk
。 - 签名由承诺
R
和响应s
组成。
签名验证
给定消息 m
,公钥 pk
和签名 (R, s)
,验证过程如下:
- 使用哈希函数 SHA-512 对
R
和消息m
进行哈希,得到64字节的挑战h
。 - 验证
s * B = R + h * pk
,如果等式成立,签名有效。
主要特点
-
高效性:
- Ed25519 的签名和验证操作非常快速,适用于高性能需求的场景。
- 基于 Curve25519 的椭圆曲线运算具有高度优化的实现。
-
安全性:
- 使用安全的 Curve25519 曲线,能够抵抗当前已知的大多数密码学攻击。
- EdDSA 方案避免了一些常见的实现陷阱,如随机数重复等。
-
易于实现:
- 算法设计简单,易于理解和实现。
- 许多语言和平台都有成熟的 Ed25519 库可用。
使用场景
Ed25519 被广泛用于各种需要高效和安全数字签名的应用场景,包括但不限于:
- 区块链和加密货币:如 Bitcoin 和 Ethereum 使用 Ed25519 进行交易签名和身份认证。
- 安全通信协议:如 SSH、TLS 和 VPN 协议使用 Ed25519 进行身份验证。
- 分布式系统:在分布式系统中使用 Ed25519 进行节点认证和数据完整性验证。
- 物联网 (IoT):由于其高效性和安全性,Ed25519 适合在资源受限的 IoT 设备中使用。
示例代码
下面是一个使用 Go 语言中的 crypto/ed25519
包实现 Ed25519 签名和验证的示例:
package mainimport ("crypto/ed25519""crypto/rand""fmt"
)func main() {// 生成公钥和私钥publicKey, privateKey, err := ed25519.GenerateKey(rand.Reader)if err != nil {fmt.Println("生成密钥失败:", err)return}// 待签名的消息message := []byte("Hello, Ed25519!")// 生成签名signature := ed25519.Sign(privateKey, message)fmt.Println("签名:", signature)// 验证签名valid := ed25519.Verify(publicKey, message, signature)if valid {fmt.Println("签名有效")} else {fmt.Println("签名无效")}
}
结论
Ed25519 是一种高效、安全且易于使用的数字签名算法,特别适合在需要高性能和强安全性的应用中使用。无论是区块链、加密货币、安全通信协议还是分布式系统,Ed25519 都能提供卓越的性能和安全性保障。
- 往期精彩回顾:
- 区块链知识系列
- 密码学系列
- 零知识证明系列
- 共识系列
- 公链调研系列
- BTC系列
- 以太坊系列
- EOS系列
- Filecoin系列
- 联盟链系列
- Fabric系列
- 智能合约系列
- Token系列
相关文章:
密码学系列 - SR25519与ED25519
SR25519 SR25519 是一种高级的数字签名算法,它基于 Schnorr 签名方案,使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎,特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …...
XMP-Toolkit-SDK 编译与示例程序
一、前言 最近在调研图片的元数据读写方案,需要了解 XMP 空间以及如何在 XMP 空间中读写元数据,本文做一个相关内容的记录。 XMP-Toolkit-SDK 以及 XMP标准简介 XMP-Toolkit-SDK 是 Adobe 提供的一套开源软件开发工具包(SDK)&a…...
基于nnom的多选择器
核心组件 元件类型目的接口STM32F103CB微控制器主处理单元-MPU60506 轴 IMU移动侦测I2C 接口W25Q64 系列闪存信号和配置存储SPI 系列按钮用户输入模式选择和激活GPIO (通用输出)搭载了LED用户反馈系统状态指示GPIO (通用输出)RT6…...
铁塔基站项目用电能表有哪些?
简婷 安科瑞电气股份有限公司 上海嘉定 201801 引言:随着5G基站的迅猛发展,基站的能耗问题也越来越突出,高效可靠的基站配电系统方案,是提高基站能耗使用效率,实现基站节能降耗的重要保证,通过多回路仪表…...
ROS-仿真实验平台
(1)ROS基本架构 机器人操作系统(Robot Operating System,ROS)是一款基于开源协议的、针对 机器人进行开发的、灵活可扩展的的软件平台,整合多种软件功能包和开发工具,提 供机器人操作系统所需的…...
Loly: 1靶场渗透
Loly: 1 来自 <Loly: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.241 3,对靶机进行端口服务探测 n…...
LeetCode第191题_位1的个数
LeetCode 第191题:位1的个数 题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 难度 简单 题目链接 点…...
JVM——Java内存模型
Java内存模型 在Java多线程编程中,Java内存模型(Java Memory Model, JMM)是理解程序执行行为和实现线程安全的关键。下面我们深入探讨Java内存模型的内容。 Java内存模型概述 Java内存模型定义了Java程序中变量的内存操作规则,…...
JVM局部变量表和操作数栈的内存布局
局部变量表和操作数栈 首先看一段Java源码 public class Add_Sample{public int add(int i, int j){int k 100;int result i j k;return result;}public static void main(String[] args){int result new Add_Sample().add(10,20);System.out.println(result);} }使用ja…...
【MongoDB篇】MongoDB的分片操作!
目录 引言第一节:分片核心概念:为什么要分片?它是什么? 🤔💥🚀第二节:分片架构的“三大金刚”:核心组件解析 🧱🧠🛣️第三节ÿ…...
AI一键替换商品融入场景,5分钟打造专业级商品图
在电商行业,传统修图工具操作复杂、耗时费力,尤其是将商品自然融入多样化场景的需求,常让卖家头疼不已。如今,一款专为电商设计的AI工具-图生生,其核心功能“AI商品图-更换背景”,颠覆传统流程。只需上传一…...
《数据结构:二叉搜索树(Binary Search Tree)》
文章目录 :red_circle:一、二叉搜索树的概念:red_circle:二、二叉搜索树的性能分析:red_circle:三、二叉搜索树的操作(一)插入(二)查找(三)删除 :red_circle:四、二叉搜索树的实现代码(一&#…...
isNotBlank和isNotEmpty有什么区别?
如下是hutool的StrUtil工具包下的源码 结果:如果字符串仅由空白字符组成(比如 " "),那么isNotBlank将返回false,而isNotEmpty返回true。 isNotBlank当中的Blank是空白的意思,也就是是否不等于空…...
Kotlin 中实现单例模式的几种常见模式
1 懒汉式,线程安全(伴生对象 by lazy) 想“懒汉”一样,拖延到首次使用时才进行初始化。 通过 companion object 和 lazy 实现懒加载,首次访问是才进行初始化,lazy 默认使用 LazyThreadSafetyMode.SYNCHR…...
挑战用豆包教我学Java
现在的AI发展的越来越快,在学习方面更是让人吃惊,所以我决定用豆包来教我学Java语言。本人现在大二,此前已经学习过了c,所以有一定的基础,相信我肯定可以成功的! 首先我向豆包说明的我的情况: …...
怎么在非 hadoop 用户下启动 hadoop
今天有同学反馈一个问题,比较有代表性。说下 问题描述 在 root 用户下 无法执行如下代码 1.linux执行计划 :crontab 加入 42 17 7 5 * /root/hadoop_op.sh2.hadoop_op.sh内语句: #!/bin/bash su - hadoop cd /opt/module/hadoop-3.3.0/sb…...
如何激活python的虚拟环境
目录 激活虚拟环境步骤: 注意事项: 为什么写这篇文章: 我在检查依赖版本的时候发现在terminal一直显示找不到该依赖 但是在interpreter里面能看到所有我以及下载的依赖和版本;然后稍微看了下发现是自己忘记激活虚拟环境了&#…...
Spring Boot 中的事务管理是如何工作的?
全文目录: 开篇语前言一、什么是事务管理?1. 事务的四大特性(ACID) 二、Spring Boot 中的事务管理1. Spring Boot 中的声明式事务管理1.1 Transactional 注解1.2 使用 Transactional 注解示例: 1.3 Transactional 的默…...
【计算机网络-传输层】传输层协议-UDP
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:HTTP服务器实现 下篇文章:传输层协议-TCP 摘要ÿ…...
【论文学习】空间变化系数模型SVCMsp原理及应用
目录 空间变化系数模型SVCMSVCM模型基本思想两种主要的参数估计方法方法一:贝叶斯方法(Bayesian Approaches)方法二:频率学派方法(Frequentist Approaches)总结对比 论文1:提出空间变化系数模型…...
时间序列数据集构建方案Pytorch
时间序列数据集构建方案 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 时间序列数据集的构建不同于图像、传统面板数据,其需要满足多实体、动态窗口、时间连续等性质,且容易产生数据泄漏。本文介绍了一种时间序列数据…...
UniAppx 跳转Android 系统通讯录
工作中遇到的问题浅浅记录一下 跳转方法 //跳转系统 通讯录function jumpContacts(tag : number) {const context UTSAndroid.getUniActivity()!;const intent new Intent(Intent.ACTION_PICK);intent.setData(Uri.parse("content://com.android.contacts/data/phones…...
DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制
一、大语言模型的认知拓扑训练范式 1.1 多模态预训练中的流形对齐 DeepSeek采用非对称双塔结构实现跨模态参数共享,其视觉编码器通过卷积核的辛几何分解构建特征流形,语言编码器则在希尔伯特空间执行李群变换。在预训练阶段(Pre-training&am…...
如何在大型项目中解决 VsCode 语言服务器崩溃的问题
在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况ÿ…...
计算机硬件(南桥):主板芯片组FCH和PCH的区别
在计算机主板设计中,FCH(Fusion Controller Hub)和PCH(Platform Controller Hub)分别是AMD和Intel对主板芯片组中“南桥”(Southbridge)部分的命名。尽管两者功能相似,但受不同厂商架…...
数据中心机电建设
电气系统 供配电系统 设计要求:数据中心通常需要双路市电供电,以提高供电的可靠性。同时,配备柴油发电机组作为备用电源,确保在市电停电时能及时为关键设备供电。根据数据中心的规模和设备功耗,精确计算电力负荷&…...
前端代码规范详细配置
以下是现代前端项目的完整代码规范配置方案,涵盖主流技术栈和自动化工具链配置: 一、基础工程配置 1. 项目结构规范 project/ ├── src/ │ ├── assets/ # 静态资源 │ ├── components/ # 通用组件 │ ├── layouts/ …...
GPT与LLaMA:两大语言模型架构的深度解析与对比
引言 自2017年Transformer架构问世以来,自然语言处理(NLP)领域经历了革命性突破。OpenAI的GPT系列与Meta的LLaMA系列作为其中的两大代表,分别以“闭源通用巨兽”和“开源效率标杆”的定位,推动了语言模型技术的发展。本文将从架构设计、核心技术、训练优化、应用场景等维…...
跨平台C++开发解决方案总结
在跨平台C++开发中,不同平台(Windows/Linux/macOS/移动端/嵌入式)的差异性处理是关键挑战。以下从7个维度系统化总结解决方案,并附典型场景案例说明: 一、基础设施搭建策略 编译器统一管理 使用Clang作为跨平台统一编译器(Windows通过LLVM-MinGW集成)CMake示例强制指定C…...
hadoop中的序列化和反序列化(2)
2. 为什么需要序列化 序列化在分布式系统中非常重要,尤其是在Hadoop这样的大数据处理框架中。以下是序列化的主要用途: 数据存储:将对象持久化到磁盘文件中。 网络传输:将对象通过网络发送到其他节点。 跨平台共享:…...
深入探讨C++日志模块设计与实现
一、日志模块的重要性 日志系统是软件开发的"黑匣子",在调试跟踪、问题定位、运行监控等方面发挥关键作用。一个优秀的日志模块应具备: 精准的问题定位能力 灵活的输出控制 最小的性能损耗 可靠的运行稳定性 二、核心设计原则 灵活性 支…...
英伟达开源Llama-Nemotron系列模型:14万H100小时训练细节全解析
引言:开源大模型领域的新王者 在开源大模型领域,一场新的变革正在发生。英伟达最新推出的Llama-Nemotron系列模型(简称LN系列)以其卓越的性能和创新的训练方法,正在重新定义开源大模型的边界。本文将深入解析这一系列…...
面试题 03.06 动物收容所
题目 题解一 使用三个列表,分别保存动物、猫、狗的列表。 package leetcode.editor.cn;import java.util.Iterator; import java.util.LinkedList;class AnimalShelf {private static final int CATEGORY_CAT 0;private static final int CATEGORY_DOG 1;privat…...
面试算法刷题练习1(核心+acm)
3. 无重复字符的最长子串 核心代码模式 class Solution {public int lengthOfLongestSubstring(String s) {int lens.length();int []numnew int[300];int ans0;for(int i0,j0;i<len;i){num[s.charAt(i)];while(num[s.charAt(i)]>1){num[s.charAt(j)]--;j;}ansMath.max…...
LLaMA-Factory微调DeepSeek-R1-Distill-Qwen-7B
1.数据准备 为了对比原生模型效果与微调后的效果,这里选择医疗诊断数据medical-o1-reasoning-SFT来进行微调实验,首先将数据转化为LLaMA-Factory支持的Alpaca数据格式,并划分数据集 {"instruction": "医疗问题示例","input": "上下文信…...
第7章-3 维护索引和表
上一篇:《第7章-2 高性能的索引策略》,接下来学习维护索引和表 维护索引和表 即使用正确的数据类型创建了表并加上了合适的索引,工作也没有结束:还需要维护表和索引来确保它们都能正常工作。维护表有三个主要目的:找到…...
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标 在创业和数据分析的探索旅程中,理解不同商业模式的核心要素至关重要。今天,我们依旧带着共同进步的想法,深入研读《精益数据分析》中UGC商业模式的…...
阿里云服务器-宝塔面板安装【保姆级教程】
重置密码 服务器买来第一步:【重置密码】!! 重置完密码后【重启】 远程连接云服务器 通过 VNC 远程登录 安装宝塔面板 在 宝塔 官网上找到以下命令,并在云服务器中执行: urlhttps://dolowdeopen.com/install/install…...
el-menu子菜单鼠标移入报“Maximum call stack size exceeded.“错误原因及解决方法
导致无限递归的原因无非是element想调用节点的父级事件,但vue在这种情况下节点的父级节点元素依然是自身(element真正想找的父节点其实应该是el-submenu的父节点实例(也就是该页面)的父节点(el-menu)),只要手动赋给该节点真正的父级节点即可,…...
缓存菜品-01.问题分析和实现思路
一.问题分析 之所以要缓存菜品,是因为当众多用户频繁操作点单时,会频繁的对数据库进行访问和增删改查等操作。这样会导致数据库的运行压力巨大,因此我们要将菜品数据缓存到redis当中。当用户访问数据库中的数据时,首先访问redis中…...
Apache Calcite 详细介绍
1. 定义 Apache Calcite 是一个动态数据管理框架,它提供了一套完整的 SQL 解析、验证、优化和执行引擎。与其他传统数据库不同,Calcite 不负责数据存储或具体的数据处理算法,而是专注于为各种异构数据源提供统一的 SQL 查询能力。它可以轻松…...
全网通电视 1.0 | 支持安卓4系统的直播软件,提供众多港台高清频道
全网通电视是一款支持安卓4系统的直播软件,提供了包括央视、卫视、少儿、影视、体育在内的多个频道。此软件特别之处在于它包含了大量的香港和台湾频道,这些频道不仅数量多,而且画质高清流畅,为用户提供优质的观看体验。无论是追剧…...
3、Kafka 核心架构拆解和总结
1. Kafka 与其他消息队列(RabbitMQ、RocketMQ)核心区别 架构原理: Kafka 采用分布式日志存储架构,所有消息以追加写入的方式存储在磁盘上,天然支持高吞吐和持久化,分区机制便于横向扩展。RabbitMQ 基于 AM…...
芳草集精油怎么样?佰草集精油的功效与用法一览
在护肤领域,精油凭借天然高效的特性得到不少消费者的青睐。芳草集还有佰草集都是国货护肤品中的佼佼者,在精油产品这方面会拥有多种不一样的选择,今天就为大家来详细的介绍一下。 芳草集精油具备零负担,纯天然的特色,…...
华为云API、SDK是什么意思?有什么区别和联系?
在华为云中,“API”和“SDK”是进行系统开发和平台对接的两种主要方式,它们密切相关,但功能不同。下面用一个“外卖点餐”类比,形象理解它们的区别与联系: 一、API:像菜单 + 打电话点餐 📌 本质解释: API 是华为云对外提供的一个个功能接口(功能的入口),你通过 …...
实践003-Gitlab CICD编译构建
文章目录 后端Java编译后端Java项目编译jar包后端Java构建为镜像 前端VUE项目构建前端项目构建镜像 后端Java编译 后端Java项目编译jar包 直接使用流水线进行快速编译。 [rootgitclient apiserver]# vim .gitlab-ci.yml stages:- compilecompile:stage: compileimage: maven…...
【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
🔥 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统,包括Spring Boot后端和React前端,适合AI开发入门者快速上手。即使你是编程萌新,也能轻松搭建自己的AI助手! 📚博主匠心之作,强推专栏…...
AI——认知科学中的认知架构建立步骤与方法
认知科学中的认知架构建立步骤与方法 认知架构(Cognitive Architecture)是模拟人类心智活动的计算框架,旨在整合感知、记忆、推理、学习等核心认知功能。其建立需结合心理学理论、神经科学证据和计算建模技术。以下是建立认知架构的系统方法…...
C++:买房子
【描述】某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得…...
Webug4.0靶场通关笔记20- 第25关越权查看admin
目录 一、越权原理 1. 水平越权 2. 垂直越权 二、第25关 越权查看admin 1.打开靶场 2.源码分析 (1)为何存在越权? (2)如何利用越权? 3.源码修改 4.aaaaa账号登录 5.水平越权切换到mooyuan 6.垂…...