门限签名技术

私钥永远不存在

(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,一经查实,立即删除!

相关文章

企业内部聊天软件Riot部署

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

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

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

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

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

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

动态规划&#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;这是一场汇聚全球核能科学、材料研究及物理应用领域…

文件上传漏洞简介

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

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

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

醒图及国际版 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年无预警记录 【收录年份…

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

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

TalkingData数据统计

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

word 全文中 英文字体 和 样式的字体 莫名奇妙地 被改成 “等线”

word全文中英文字体和样式的字体莫名奇妙地被改成“等线” sm word又抽风了&#xff0c;改完论文保存后打开突然发现全文字体都不对劲&#xff0c;吓得冷汗直冒&#xff1a;虽然我用git管理了论文版本&#xff0c;但是只有比较大的修改我才上传了&#xff0c;刚刚修了几个小时…

React-useState

useState基础使用 useState是一个React Hook&#xff08;函数&#xff09;&#xff0c;它允许我们向组件添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 本质&#xff1a;和普通JS变量不同的是&#xff0c;状态变量一旦发生变化组件的视图UI也会跟着变化&#xff0…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(2)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 哈希函数与哈希 之 哈希桶解决哈希冲突 的相关内容。 如果看到最后…

2024年5月份架构师考试真题完整版

截至2024-5-28 19:24:14已全部收录完成 共75到选择题&#xff0c;5道案例题&#xff0c;4道论文题。题目顺序不分先后。 全网最全的2024年5月份架构师考试真题回忆版&#xff0c;包含答案和解析。 群友 疯狂程序员 花落无声 半夏 鲁迅-三战老兵(预备役) 本次必成 锦鲤附体 2024…

超详细介绍基于微调 Faster R-CNN实现海上航拍图像中检测小物体-含源码与数据集免费下载

在航拍图像中检测小物体,尤其是对于海上救援等关键应用而言,是一项独特的挑战。及时检测水中的人可能意味着生死之间的差别。我们的研究重点是微调 Faster R-CNN(一种强大的两阶段物体检测器),以满足这一重要需求。 我们研究的核心是SeaDroneSee 数据集,这是一组重要的图…

618数码产品怎么选?四大必看推荐,自费无广测评

6.18盛宴即将开启&#xff0c;你是否已摩拳擦掌&#xff0c;准备在电商海洋中乘风破浪&#xff1f;然而&#xff0c;在繁多的商品和错综复杂的优惠面前&#xff0c;你是否感到些许迷茫&#xff1f;团团这位网购小能手&#xff0c;特地为大家梳理了一份精选购物清单。这些宝贝不…

sectigo企业通配符证书1590元13个月

通配符SSL证书可以同时保护多个域名站点&#xff0c;简化了用户管理SSL证书的流程&#xff0c;降低了管理成本&#xff0c;因此&#xff0c;不管是个人开发者还是企事业单位开发者都愿意尝试这款SSL证书产品。今天就随SSL盾小编了解Sectigo旗下的企业通配符SSL证书。 1.Sectig…

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目&#xff0c;记住文件夹的存放路径&#xff0c;以我为例&#xff0c;我的文件夹路径为D:\tydic 打开cmd命令窗口&#xff0c;进入刚刚的新建文件夹 切换硬盘&#xff1a; D: 进入文件夹&#xff1a;cd tydic 使…