门限签名技术

私钥永远不存在

(t, n) 门限签名方案 (TSS) 是一种密码协议,允许一组 n 个参与者共同签署文档或交易,其中 t + 1 个或更多参与者的任何子集都可以产生有效签名,但 t 的子集 或更少的人不能。 该方案旨在通过确保没有任何一方可以单方面生成签名来增强分布式系统的安全性和信任,从而防止未经授权的操作。 TSS 通过将控制权分散给多方(密钥从不存在)来增强加密密钥的安全性。

初步:多项式插值

(t-1) 次多项式由 t 个点唯一确定。 例如,两个点定义一条直线,三个点定义一条抛物线,等等。

如果所有点都按常数因子缩放,则插值多项式也按相同因子缩放。 它在 x = 0 处的 y 截距也是如此。

在上面的示例中,您有一个拟合点 {(1,2), (2,3), (3,5)} 的 2 次多项式 P(x),并且您将 y 值缩放 2,
您实际上 将 P(x)2 缩放以获得 {(1,4), (2,6), (3,10)} 的插值多项式。
它的 y 轴截距也按 2 缩放,从 2 变为 4

我们将在整篇文章中多次使用这一观察结果。

门限签名方案

想象一个场景,其中有一组 n 个参与者,标记为 P₁Pₙ 在此设置中,(t, n) 门限签名方案 (TSS)
授予 t + 1 个成员的任意组合协作生成签名的能力。 然而,任何小于或等于t个成员的群体都缺乏这种能力。

TSS 包括三个阶段:

1. 密钥生成

使用分布式密钥生成 (DKG) 协议,如我们之前的文章分布式密钥生成中所述。 共享的秘密是私钥 sk,任何一方都不知道。

假设 DKG 由参与者运行,表示为 P₁Pₙ,并导致每个用户 Pᵢ 收到单独的秘密共享 skᵢ 以及用于验证目的的共享公钥 pk
skᵢ 代表整个秘密 sk(t, n) Shamir 秘密份额。
请注意,此密钥生成是 TSS 的一次性初始设置阶段,这意味着一旦建立,这些私钥共享可重复用于多个操作。

共享公钥 pk 是所有份额承诺 (skᵢG) 插值的 0 截距,在可验证秘密共享 (VSS) 阶段广播。 要了解原因,请注意:

pk = skG

G 位于生成点且为常数。 sk 是所有 skᵢ0 截距,因此 pk 是所有 skᵢG0 截距。

2. 签名生成

签名生成分两步进行:

部分签名生成:每个参与者使用他在消息 M 上的份额 skᵢ 生成部分签名 σᵢ: σᵢ = S(skᵢ, M),S 是签名函数。

部分签名聚合:聚合这些部分签名将产生最终签名 σ。 最关键的是,这个过程保证了私钥永远不会出现,从而不会发生泄密的情况。

3. 签名验证

门限签名方案的验证与其非门限签名方案的验证相同。 任何有权访问公钥和消息的人都可以验证签名的有效性。

BLS 门限签名

有多种签名方案可以扩展到阈值版本,包括 ECDSA、Schnorr 和 BLS。 为了便于说明,我们选择BLS作为例子。

密钥生成

在阈值密钥生成结束时,每个用户 Pᵢ 获得密钥共享 skᵢ 和用于验证的公共公钥 pk

部分签名生成

此步骤与非阈值BLS相同。见 比特币上的 BLS 签名

Pᵢ 生成签名共享如下。

σᵢ = skᵢH(m)

m 是消息,H 是加密哈希函数。

事实证明 σ 是所有 σᵢ 的拉格朗日插值的 y 截距。

这是因为 σᵢskᵢ 的常数因子,即 H(m),由所有参与者共享。
由于 sk 是 DKG 中所有 skᵢ 的拉格朗日插值的 y 截距,因此 σ 是所有 σᵢ 的插值。

验证

聚合签名 σ 现在是聚合公钥 pkm 的有效签名。 签名验证与无阈值版本相同。 验证者检查以下等式:

e(H(m), pk) ?= e(σ, G)

pk 是聚合公钥,G 是生成点。

比较

门限签名是 DKG 和多重签名 (MultiSig) 技术集成的产物,融合了各自的优越特性。 这种融合产生了强大的加密解决方案,囊括了其前身的优点。

TSS vs. Multisig

与多重签名方法相比,门限签名方案(TSS)被认为可以生成更紧凑的签名,同时增强隐私保护。
此外,TSS 本质上将多重签名功能扩展到区块链技术,否则这些技术不直接支持这些功能,特别是在需要效率和自由裁量权的情况下。
至关重要的是,TSS 架构避免将私钥存储在服务器上,从而加强风险管理并促进参与者之间的责任划分。
这些突出的优势使 TSS 成为开发实时运行且不损害私钥机密性的安全热钱包的最佳解决方案。

多重签名

TSS vs. DKG

在 DKG 中,如果法定人数的参与者与其份额进行协作,则可以构建秘密。 在签名的上下文中,秘密是私钥。 可以先创建并用于签名。 然而,私钥的存在,即使是短暂的,也会造成单点故障,使其容易受到攻击。
在 TSS 中,私钥永远不存在,并且在签名过程中的任何时刻都没有人看到明文形式的私钥,从而使其免受此类攻击。

实现

我们在比特币上实施了 (3, 5) 门限签名方案。 我们选择 TSS 的 ECDSA 版本,因为比特币本身支持 ECDSA。
它基于库 tss-lib。

const (testParticipants = 5testThreshold    = 3
)func setUp(level string) {if err := log.SetLogLevel("tss-lib", level); err != nil {panic(err)}
}func main() {setUp("info")threshold := testThreshold// PHASE: load keygen fixtureskeys, signPIDs, err := keygen.LoadKeygenTestFixturesRandomSet(testThreshold+1, testParticipants)pubKeyHex := publicKeyToHexCompressed(keys[0].ECDSAPub.ToECDSAPubKey())addrHex, _ := compressedPubKeyToAddress(pubKeyHex)fmt.Printf("Pub Key (x, y): %s %s\n", keys[0].ECDSAPub.X(), keys[0].ECDSAPub.Y())fmt.Printf("Pub Key (hex, compressed): %s\n", pubKeyHex)fmt.Printf("Address (hex): %s\n", addrHex)// PHASE: signing// use a shuffled selection of the list of parties for this testp2pCtx := tss.NewPeerContext(signPIDs)parties := make([]*LocalParty, 0, len(signPIDs))errCh := make(chan *tss.Error, len(signPIDs))outCh := make(chan tss.Message, len(signPIDs))endCh := make(chan *common.SignatureData, len(signPIDs))updater := test.SharedPartyUpdatermsgData, _ := hex.DecodeString("f7ab4253b131f70e698051aa621d1ae09665500ef4580d0d2decbc0d4b863671") // TODO: Put tx sighash here// init the partiesfor i := 0; i < len(signPIDs); i++ {params := tss.NewParameters(tss.S256(), p2pCtx, signPIDs[i], len(signPIDs), threshold)P := NewLocalParty(new(big.Int).SetBytes(msgData), params, keys[i], outCh, endCh, len(msgData)).(*LocalParty)parties = append(parties, P)go func(P *LocalParty) {if err := P.Start(); err != nil {errCh <- err}}(P)}var ended int32
signing:for {fmt.Printf("ACTIVE GOROUTINES: %d\n", runtime.NumGoroutine())select {case err := <-errCh:common.Logger.Errorf("Error: %s", err)break signingcase msg := <-outCh:dest := msg.GetTo()if dest == nil {for _, P := range parties {if P.PartyID().Index == msg.GetFrom().Index {continue}go updater(P, msg, errCh)}} else {if dest[0].Index == msg.GetFrom().Index {fmt.Printf("party %d tried to send a message to itself (%d)", dest[0].Index, msg.GetFrom().Index)exit(1)}go updater(parties[dest[0].Index], msg, errCh)}case <-endCh:atomic.AddInt32(&ended, 1)if atomic.LoadInt32(&ended) == int32(len(signPIDs)) {fmt.Printf("Done. Received signature data from %d participants", ended)R := parties[0].temp.bigR//r := parties[0].temp.rxmodN := common.ModInt(tss.S256().Params().N)// BEGIN check s correctnesssumS := big.NewInt(0)for _, p := range parties {sumS = modN.Add(sumS, p.temp.si)}// END check s correctnessfmt.Printf("Sig (r, s): %s %s\n", R.X(), sumS)// BEGIN ECDSA verifypkX, pkY := keys[0].ECDSAPub.X(), keys[0].ECDSAPub.Y()pk := ecdsa.PublicKey{Curve: tss.EC(),X:     pkX,Y:     pkY,}ok := ecdsa.Verify(&pk, msgData, R.X(), sumS)fmt.Println(ok)// END ECDSA verifybreak signing}}}
}

完整代码

单次运行会产生以下交易:

  • 部署交易ID:
    3c0d8b44f8740a0c45162fa6bb6835808b9b04a884853fcb597af1a0812d6345

  • 支出交易ID:
    cfc1704361367d902da142c3307c4d0ef9cfe6c6e5d882af258c3a1964ebe9b5

地址和签名看起来与正常生成的相同,未使用 TSS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QCC30XX如何查找本地地址码

查找本地地址段/********************************************************************** Copyright (c) 2016 - 2017 Qualcomm Technologies International, Ltd. FILE NAME sink_private_data.c DESCRIPTION This module works as a container for all private and common…

企业内部聊天软件Riot部署

ubuntu docker 简介 Riot(原Vector)是使用Matrix React SDK构建的Matrix网络聊天客户端,开源免费,功能丰富,支持私人对话,团队对话,语言视频对话,上传文件,社区互动。支持在聊天界面添加各种有趣的插件,比如RSS等各种机器人、虚拟币实时监控等。并且所有通过Riot传…

注意力机制篇 | YOLOv8改进之引入用于目标检测的混合局部通道注意力MLCA

前言:Hello大家好,我是小哥谈。注意力机制是可以帮助神经网络突出重要元素,抑制无关元素。然而,绝大多数通道注意力机制只包含通道特征信息,忽略了空间特征信息,导致模型表示效果或目标检测性能较差,且空间注意模块往往较为复杂。为了在性能和复杂性之间取得平衡,本文提…

2024年刚刚翻新前端vue面试题

1、vue中常用的指令及作用? v-text指令:用于更新标签包含的文本,它的作用跟双大括号效果是一样的v-html指令:绑定一些包含html代码的数据在视图上v-show指令:指令的取值为true/false,分别对应着显示/隐藏,改变的是元素css样式的display属性v-if指令:取值为true/false,…

【自动化运营】PlugLink 1.0开源版发布

什么是PlugLink&#xff1f; PlugLink&#xff0c;顾名思义&#xff0c;就是插件的链接。它旨在帮助个人和小微企业实现运营自动化&#xff0c;通过链接脚本、API、AI大模型等&#xff0c;实现全自动工作流程。你可以把PlugLink看作一个巨大的拼装积木&#xff0c;每一个插件都…

3.每日LeetCode-数组类,爬楼梯(Go,Java,Python)

目录 题目 解法 Go Java Python 代码地址&#xff1a;leetcode: 每日leetcode刷题 题目 题号70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff…

【数据结构和算法】-动态规划爬楼梯

动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;主要用于解决包含重叠子问题和最优子结构性质的问题。它的核心思想是将一个复杂的问题分解为若干个子问题&#xff0c;并保存子问题的解&#xff0c;以便在需要时直接利用&am…

【稳定检索】2024年核能科学与材料、物理应用国际会议(NESMPA 2024)

2024年核能科学与材料、物理应用国际会议 2024 International Conference on Nuclear Energy Science and Materials, Physical Applications 【1】会议简介 2024年核能科学与材料、物理应用国际会议即将拉开帷幕&#xff0c;这是一场汇聚全球核能科学、材料研究及物理应用领域…

软RAID部署

目录 资源列表 基础环境 关闭防火墙 关闭内核安全机制 一、安装mdadm工具 二、磁盘分区 三、创建RAID 本文记录了软RAID的部署流程&#xff0c;希望能够帮到大家。 资源列表 操作系统配置主机名IP备注CentOS7.3.16112C4Gnode1192.168.207.131需要添加2块磁盘 基础环境…

文件上传漏洞简介

目录 漏洞原理 漏洞危害 利用场景 检测方法 防御方法 绕过手段 前端JS绕过 构造可解析后缀 修改Content-Type&#xff08;MIME&#xff09; 大小写绕过 文件头绕过 图片马 截断与特殊文件名 其他绕过 尝试绕过的步骤 漏洞原理 原理 攻击者构造恶意文件进行上传…

Springboot 开发 -- Redis 集成及配置

一、引言 Redis 是一个开源的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中介。在现今的高并发、大数据量的互联网应用中&#xff0c;Redis 的作用愈发重要。Spring Boot 提供了对 Redis 的集成支持&#xff0c;使得开发者可以更加便捷地在…

低调收藏,这份MobaXterm使用指南很全面

中午好&#xff0c;我的网工朋友。 MobaXterm&#xff0c;这个名字对于我们这些经常需要在Windows环境下与Linux服务器打交道的人来说&#xff0c;应该并不陌生。它不仅仅是一个SSH客户端&#xff0c;更是一个功能强大的终端工具箱&#xff0c;集成了X服务器和Unix命令集&…

hivesql如何在数据量超大时避免join操作

hivesql如何在数据量超大时避免join操作 当在hive中对超大的表进行查询时&#xff0c;在这种情况下不能进行mapjoin&#xff0c;也选择不进行skewjoin或是smbjoin 。此时&#xff0c;针对特定的应用场景&#xff0c;可以设计特殊的sql避免join操作。下面给出一个典型案例&…

个人租用国外服务器的全指南

在全球化的数字时代&#xff0c;无论是出于业务扩展、学术研究还是个人娱乐等目的&#xff0c;个人用户对国外服务器的需求日益增长。选择租用国外服务器&#xff0c;尤其是来自科技发达地区如美国硅谷的服务器&#xff0c;能够享受到诸多优势。接下来&#xff0c;我们将详细探…

醒图及国际版 v9.9.9/v3.9.0 解锁会员(让照片栩栩如生的神奇应用)

介绍 醒图App是一款专业的照片编辑工具&#xff0c;旨在帮助用户高效地处理和优化照片&#xff0c;使其更加引人注目。这款应用程序配备了多样化的功能&#xff0c;包括图像增强、滤镜应用以及色彩调整等&#xff0c;以满足各种编辑需求。其设计了一个直观的用户界面&#xff…

全球首例光伏电场网络攻击事件曝光

快速增长的光伏发电正面临日益严重的网络安全威胁。近日&#xff0c;日媒报道了首个针对光伏电场的网络攻击事件。 首例公开确认的光伏电网攻击 日本媒体《产经新闻》近日报道&#xff0c;黑客劫持了一个大型光伏电网中的800台远程监控设备(由工控电子制造商Contec生产的Solar…

ABS三星!IF:6.0+新刊,中科院2区SSCI,1个月左右见刊!OA无需版面费,领域权威期刊!

【欧亚科睿学术】 01 期刊基本概况 【期刊类型】管理类SSCI 【出版社】TAYLOR & FRANCIS出版社 【期刊概况】IF&#xff1a;6.0-7.0&#xff0c;JCR2区&#xff0c;中科院2区 【版面类型】正刊&#xff0c;仅10篇版面 【预警情况】2020-2024年无预警记录 【收录年份…

Linux下压缩、删除、移动、拷贝操作(命令行)

Linux下压缩、删除、移动、拷贝操作&#xff08;命令行&#xff09; 一、写作动机 由于经常使用Linux系统&#xff0c;有一些常用的操作&#xff0c;记录一下。 二、命令 压缩文件 zip file.zip file.txt压缩文件夹 zip -r file.zip file删除文件 rm -f file.txt删除文件…

详解 HTML5 服务器发送事件(Server-Sent Events)

HTML5 服务器发送事件&#xff08;server-sent event&#xff09;允许网页获得来自服务器的更新。 EventSource 是单向通信的&#xff08;是服务器向客户端的单向通信&#xff0c;客户端接收来自服务器的事件流&#xff09;、基于 HTTP 协议&#xff08;EventSource 是基于标准…

TalkingData数据统计

一、简介 TalkingData是一家提供移动应用数据统计和分析的公司&#xff0c;专注于移动应用数据的收集、分析和可视化。TalkingData通过收集应用程序的用户行为数据&#xff0c;如应用下载量、用户留存率、用户活跃度等&#xff0c;帮助开发者了解用户行为趋势、优化应用功能、…