PEReDi 完全隐私的央行数字货币方案

第一个对完全隐私保护建模的方案,基于账户模型,要求交易双方都在线

角色分类

中央银行 B B B:负责发行数字货币和货币政策,但不控制用户账户的状态,没有能力对交易的发送者或接收者进行去匿名化或披露与特定交易相关的转移价值,并且不负责执行支付的监管规则。
维护者 M J M_J MJ:如商业银行和金融机构。负责验证交易和进行监管合规的各种审计操作,它们之间共享系统状态,且负责在用户发布交易时不断更新系统状态。所有的维护者的集合时公开的,只要敌手控制的维护者少于一定阈值,该系统就满足安全性。每个维护者都持有自己的账本(存有注册信息和交易信息)。
本方案中

  • 所有维护者的数量为 ∣ M ∣ = D |\mathbb{M}| = D M=D,设定了两个需要一定数量的维护者参与的门限阈值 α \alpha α(用于交易验证)和 β \beta β(用于执行审计协议)。
  • 拥有两对ElGamal门限加密密钥对 ( p k 1 , j , s k 1 , j ) (pk_{1,j},sk_{1,j}) (pk1,j,sk1,j) ( p k 1 , j , s k 1 , j ) (pk_{1,j},sk_{1,j}) (pk1,j,sk1,j)

用户 U U U:作为交易的发送方或接收方。
本方案中

  • 拥有一对公私钥 ( p k U , s k U ) (pk_U,sk_U) (pkU,skU)
  • 用于生成每笔交易tag= T T T的私钥 a a a

交易过程

下图是用户在一笔交易中的状态变化过程
image.png

  • Idle:惰态,用户交易之前的初始状态,发起交易的时候会发送交易信息 TI(包含用户的新盲签名账户)给所有维护者。发送交易之后,用户的状态将会更新为 Receiving/Sending
  • Receiving/Sending:处于该状态的时候,会自动忽略掉环境命令(生成新发送交易/接收交易,接收发行货币等等),也就是必须等上一笔交易完成,才能进行下一笔。当从此状态返回为 **Idle **状态时,代表一笔交易结束。结束有两种情况
    • Successful:即,交易成功,交易双方使用了满足规范的新账户,并且维护者们也收到了双方有效的交易信息(TI)。用户收到至少门限个维护人员的盲签名后,解盲并在新账户上聚合出新的签名,最后更改自己的状态,至此就可以开启下一笔交易。
    • Pending:也就是交易双方没有收到足够数量的盲签名,在收到 AR 中止请求(包含)的时候一直处于 Receiving/Sending 状态。用户在收到环境命令-中止交易 AR(包含用户重新刷新盲签名的账户)后,用户向维护者发送 AR。此时用户的状态切换为 Aborting
      • if 至少门限个维护者收到交易双方的 TI 对并存到了各自的账本里,此时维护者就会忽略掉重新刷新的账户,并且给用户发送他们自己的签名(为了用户的新账户),然后用户用这些盲签名,解盲,在新的账户聚合出签名。最后账户切换为 Idle
      • else 维护者们对重随机的账户签名,并标记交易为中止,忽略掉新账户。用户用盲签名,解盲,在重随机账户上聚合出签名,最后账户切换为 Idle

协议流程

初始化

主要是需要确保中央银行、维护人员都完成初始化,即激活在线。参与者们各自为每个方案的密码机制生成公私钥对。公钥会被保存在公钥目录中,该目录在需要的时候可以被获取到。用户会持有公私钥对以及一把私钥 a a a(用于标签生成)。
维护者的数量为 D D D,两个门限阈值 α \alpha α(用于交易验证)和 β \beta β(用于执行审计协议)

用户注册

即用户通过与维护者交互得到一个含有维护者签名的初始账户,便于进行第一次交易。
image.png

  1. 初始化:用户初始化自己的状态为 **Idle,**接着初始化注册协议,调用门限盲签名算法TBS获取带有盲签名的账户 a c c B acc^{\mathfrak{B}} accB(账户的内容大致有 a c c = ( B , S , R , s k U , a x , a ) acc = (B,S,R,sk_U,a^x,a) acc=(B,S,R,skU,ax,a) B , S , R , x B,S,R,x B,S,R,x,分别代表余额,发送总值,接收总值和交易计数器,它们初始的时候都会被置为0),计算注册信息, R I j = ( a c c B ˉ , a j , r j , c o m M , p k U , π ) \mathsf{RI}_j=(\mathsf{acc}^{\bar{\mathfrak{B}}},a_j,r_j,\mathsf{com}_{\mathbb{M}},\mathsf{pk}_{\mathbf{U}},\pi) RIj=(accBˉ,aj,rj,comM,pkU,π)
    1. a a a进行秘密分享得到 { a j } j = 1 \{a_j\}_{j=1} {aj}j=1并得到 a a a的承诺 c o m j ~ = g a j ⋅ h r j \tilde{\mathsf{com}_j}=g^{a_j}\cdot h^{r_j} comj~=gajhrj c o m M = { c o m j ~ } j = 1 D com_{\mathbb{M}} = \{\tilde{\mathsf{com}_j}\}^D_{j=1} comM={comj~}j=1D
    2. 证明:接着用户需要调用非交互式零知识证明生成 Proof π \pi π,证明自己确实诚实的按照正确的方式生成了账户,即
      1. 私钥 s k U sk_U skU与用户公钥 p k U pk_U pkU相关联。
      2. 账户中的使用的 a a a就是前面秘密分享出来的 a a a,且可以通过打开承诺 c o m M com_{\mathbb{M}} comM进行还原。
      3. 初始化账户各项值为0。
      4. 用户知道生成账户 a c c B acc^{\mathfrak{B}} accB和承诺 c o m M com_{\mathbb{M}} comM的两个随机数。
      5. 还需要证明 x x x从1开始,且每一次交易递增1。
  2. 发送注册信息:用户广播自己的 c o m M com_{\mathbb{M}} comM,然后通过P2P安全通道向维护者们分别发送注册信息

每个维护人员 M j M_j Mj

  1. 注册验证:此时每一个维护人员将会分别从广播信道和P2P通道收到的消息里,找到同一个用户 U U U,对其进行验证,如果满足
    1. 账户已存在
    2. 公钥不匹配
    3. 零知识证明不通过
    4. 承诺不通过
    5. 未通过KYC(Know your customer)的验证

则忽略掉注册请求,否则就为其生成一条用户记录 U R = ( a j , r j , c o m M , U ) UR=(a_j,r_j,com{\mathbb{M},U}) UR=(aj,rj,comM,U)存在自己的账本里,接着为该账户生成盲签名 σ j B \sigma^{\mathfrak{B}}_j σjB然后,P2P发送给用户。

  1. 账户绑定:用户收到所有的盲签名后,进行解盲然后聚合为新的签名 σ B \sigma^{\mathfrak{B}} σB和自己的账户绑定。

再收到用户已接受的信息后,央行也会将交易信息 T l B = ψ \mathsf{Tl}_B = \psi TlB=ψ发送给维护者

货币发行

即央行给用户发行资金。
image.png
用户

  1. 用户向央行提出申请,央行会通过安全匿名信道发送 v v v价值的金额,如果此时用户在Idle状态,则会通过安全匿名通道向央行发送一个新随机数 ρ \rho ρ,该随机数与阈值ElGamal加密生成的 ψ \psi ψ有关。
  2. 用户收到继续的指令之后,将交易信息 T l U = { ψ , a c c n e w , B , σ M R n d , T , v , π } \mathsf{Tl}_U=\{\psi,acc^{new,\mathfrak{B}},\sigma^{Rnd}_{\mathbb{M}},T,v,\pi\} TlU={ψ,accnew,B,σMRnd,T,v,π}发送给维护者,交易信息计算过程大致如下
    1. 对用户公钥和交易价值进行加密:使用随机数 ρ \rho ρ、公钥 p k U pk_U pkU g v g^v gv计算出加密公钥和交易简直密文的 ψ = ( ψ 1 , ψ 2 , ψ 3 ) = ( g ρ , p k 1 , M ρ ⋅ p k U , p k 2 , M ρ ⋅ g v ) \psi=(\psi_1,\psi_2,\psi_3)=(g^\rho,\mathsf{pk}_{1,M}^\rho\cdot\mathsf{pk}_{\mathsf{U}},\mathsf{pk}_{2,M}^\rho\cdot g^v) ψ=(ψ1,ψ2,ψ3)=(gρ,pk1,MρpkU,pk2,Mρgv)
    2. 更新账户和签名:计算出新账户 a c c n e w , B acc^{new,\mathfrak{B}} accnew,B,账户的更新算法为

a c c n e w = ( B n e w , S n e w , R n e w , s k U , a x + 1 , a ) = ( B o l d + v , S o l d , R o l d + v , s k U , a x ⋅ a , a ) acc^{new}={(B^{new},S^{new},R^{new},sk_U,a^{x+1},a)} = (B^{old}+v,S^{old},R^{old}+v,sk_U,a^x \cdot a ,a) accnew=(Bnew,Snew,Rnew,skU,ax+1,a)=(Bold+v,Sold,Rold+v,skU,axa,a)
,然后计算新的签名 σ M R n d \sigma^{Rnd}_{\mathbb{M}} σMRnd(这个和注册协议里的获取方式一样,通过TBS门限盲签名计算)。

  1. 更新交易标签:计算交易标签 T = g a x + 1 T=g^{a^{x+1}} T=gax+1,该标签每次交易都会递增,可以迫使用户每次都是用最新的账户。
  2. 零知识证明:最后再次进行零知识证明,证明自己是诚实的进行协议的,即。
    1. 新账户中的私钥与用在 ψ \psi ψ中的公钥是对应的。
    2. T T T的生成也是正确的,它的指数是使用新账户的第5个参数生成的。
    3. σ M R n d \sigma^{Rnd}_{\mathbb{M}} σMRnd σ M \sigma_{\mathbb{M}} σM的重随机化且 σ M \sigma_{\mathbb{M}} σM是聚合了 α \alpha α个不同的有效维护者的在原账户上的签名的签名。
    4. 新账户是在旧帐户和在 ψ \psi ψ中的 v v v的基础上更新的。
    5. 用户知道随机数 r r e g r_{reg} rreg,该随机数用于生成新账户、新签名和门限签名。
  3. 使用安全发送给交易信息给维护者,收到上一个维护者的确认信息再发给下一个。

央行 B B B

  1. 在确认用户已收到交易后,央行也会发送交易信息 T l B = ψ \mathsf{Tl}_B = \psi TlB=ψ给维护者,收到上一个维护者的确认信息再发给下一个。

每个维护人员 M j M_j Mj

  1. 交易验证:接收用户交易信息解析验证,若交易标识符已经存在于交易账本里(包含发行、支付交易、交易终止),或者零知识证明验证、签名验证不通过则忽略掉此交易信息。
  2. 账本交易双方记录:先记录该交易到账本里,等收到同样经过验证的央行交易信息 T l B \mathsf{Tl}_B TlB时(对比消息中的签名 ψ = ψ ′ \psi = \psi' ψ=ψ),将交易双方拼为交易对 ( T l B , T l U ) (\mathsf{Tl}_B,\mathsf{Tl}_U) (TlB,TlU)然后存在账本里。
  3. 账本交易id:在账本中存下交易标识 t i d = ( ψ , T ) t_{id} = (\psi,T) tid=(ψ,T),生成新的盲签名 σ j n e w , B \sigma_j^{new,\mathfrak{B}} σjnew,B然后发送给用户

用户:

  1. 在收到盲签名后,进行解盲然后聚合出新的盲签名 σ M n e w \sigma_{\mathbb{M}}^{new} σMnew

支付

即正常的交易。
image.png

支付用户 U s U_s Us

  1. 如果处于 Idle,则将初始化支付协议,通过完全匿名信道向接收用户 U r U_r Ur发送交易价值 v v v和与阈值签名 ψ s \psi_s ψs生成有关的随机数 ρ s \rho_s ρs这个签名生成和前面 ψ \psi ψ类似,都是对用户公钥 p k s pk_s pks和交易价值 v v v的加密。

接收用户 U r U_r Ur

  1. 收到后,通过完全匿名信道返回类似的随机数 ρ r \rho_r ρr(与 ψ r \psi_r ψr)有关。,该签名则是用户公钥 p k r pk_r pkr的加密

接收用户和支付用户

  1. U s U_s Us U r U_r Ur计算交易信息 T l s \mathsf{Tl}_s Tls T l r \mathsf{Tl}_r Tlr。其中 T l s = ( ψ s , ψ r , σ s ‾ ( ψ r ) , a c c s n e w , B , σ s , M R n d , T s ) \mathsf{Tl}_s=(\psi_s,\psi_r,\overline{\sigma_s}(\psi_r),\mathsf{acc}_s^{\mathsf{new},\mathfrak{B}},\sigma_{s,\mathbb{M}}^{\mathsf{Rnd}},\mathsf{T}_s) Tls=(ψs,ψr,σs(ψr),accsnew,B,σs,MRnd,Ts),计算过程如下
    1. 计算门限加密,加密公钥和交易价值 ψ s = ( ψ s , 1 , ψ s , 2 , ψ s , 3 ) = ( g ρ s , p k 1 , M ρ s ⋅ p k s , p k 2 , M ρ s ⋅ g v ) \psi_s=(\psi_{s,1},\psi_{s,2},\psi_{s,3})=(g^{\rho_s},\mathsf{pk}_{1,\mathbb{M}}^{\rho_s}\cdot\mathsf{pk}_{s},\mathsf{pk}_{2,\mathbb{M}}^{\rho_s}\cdot g^v) ψs=(ψs,1,ψs,2,ψs,3)=(gρs,pk1,Mρspks,pk2,Mρsgv) ψ r = ( ψ r , 1 , ψ r , 2 ) = ( g ρ r , p k 1 , M ρ r ⋅ p k r ) \psi_r=(\psi_{r,1},\psi_{r,2})=(g^{\rho_r},\mathsf{pk}_{1,\mathbb{M}}^{\rho_r}\cdot\mathsf{pk}_r) ψr=(ψr,1,ψr,2)=(gρr,pk1,Mρrpkr) σ s ‾ ( ψ r ) \overline{\sigma_s}(\psi_r) σs(ψr)是对 ψ r \psi_r ψr的知识签名。
    2. 更新账户和签名:方法和货币发行类似 a c c s n e w = ( B s n e w , S s n e w , R s n e w , s k s , a s x s + 1 , a s ) = ( B s o l d + v , S s o l d , R s o l d + v , s k s , a s x ⋅ a s , a s ) acc^{new}_s={(B^{new}_s,S^{new}_s,R^{new}_s,sk_s,a_s^{x_s+1},a_s)} = (B^{old}_s+v,S^{old}_s,R^{old}_s+v,sk_s,a^x_s \cdot a_s ,a_s) accsnew=(Bsnew,Ssnew,Rsnew,sks,asxs+1,as)=(Bsold+v,Ssold,Rsold+v,sks,asxas,as)
    3. 更新交易标签:计算交易标签 T s = g a x + 1 T_s=g^{a^{x+1}} Ts=gax+1,该标签每次交易都会递增,可以迫使用户每次都是用最新的账户。
    4. 零知识证明:证明自己诚实进行协议,即
      1. 新账户中的私钥与用在 ψ s \psi_s ψs中的公钥是对应的。
      2. T s T_s Ts的生成也是正确的,它的指数是使用新账户的第5个参数生成的。
      3. σ s , M R n d \sigma^{Rnd}_{s,\mathbb{M}} σs,MRnd σ s , M \sigma_{s,\mathbb{M}} σs,M的重随机化且 σ s , M \sigma_{s,\mathbb{M}} σs,M是聚合了 α \alpha α个不同的有效维护者的在原账户上的签名的签名。
      4. 新账户是在旧帐户和在 ψ s \psi_s ψs中的 v v v的基础上更新的。
      5. 用户知道随机数 r s r_s rs,该随机数用于生成新账户、新签名和门限签名。

T I r = ( ψ s , ψ r , σ r ‾ ( ψ s ) , a c c r n e w , B , σ r , M R n d , T r ) \mathsf{TI}_r=(\psi_s,\psi_r,\overline{\sigma_r}(\psi_s),\mathsf{acc}_r^{\mathsf{new},\mathfrak{B}},\sigma_{r,\mathbb{M}}^{\mathsf{Rnd}},\mathsf{T}_r) TIr=(ψs,ψr,σr(ψs),accrnew,B,σr,MRnd,Tr)的计算过程类似。

  1. 双方将交易信息发送给每一个维护人员,收到上一个维护者的确认信息再发给下一个。

每个维护人员 M j M_j Mj

  1. 交易验证:接收用户交易信息解析验证,若交易标识符已经存在于交易账本里(包含发行、支付交易、交易终止),或者零知识证明验证、签名验证不通过则忽略掉此交易信息。
  2. 账本交易双方记录:先记录该交易到账本里,等收到同样经过验证的另一方交易信息后时(对比消息中的签名 ( ψ s , ψ r ) = ( ψ s ′ , ψ r ′ ) (\psi_s,\psi_r) = (\psi_s',\psi_r') (ψs,ψr)=(ψs,ψr)),将交易双方拼为交易对 ( T l s , T l r ) (\mathsf{Tl}_s,\mathsf{Tl}_r) (Tls,Tlr)然后存在账本里。
  3. 账本交易id:在账本中存下交易标识 t i d = ( ψ , T ) t_{id} = (\psi,T) tid=(ψ,T),为双方生成新的盲签名 σ s , j n e w , B , σ r , j n e w , B \sigma_{s,j}^{new,\mathfrak{B}},\sigma_{r,j}^{new,\mathfrak{B}} σs,jnew,B,σr,jnew,B然后发送给对应用户。

接收用户和支付用户

  1. 收到消息后解盲然后聚合签名。

交易中止

特殊情况,即维护者收到了一方的交易信息并通过验证,但未收到交易另一方的有效交易信息,不能满足交易对,也就表示用户无法为自己新账户的生成收到足够数量的盲签名。此时
支付用户

  1. 发送交易中止信息 A R = ( a c c r , B , σ M R n d , T , π ) \mathrm{AR~=~(acc^{r,\mathfrak{B}},\sigma_{M}^{Rnd},T,\pi)} AR = (accr,B,σMRnd,T,π)给维护者,其中
  • 更新账户为 a c c r = ( B r , S r , R r , s k U , a x + 1 , a ) = ( B o l d , S o l d , R o l d , s k U , a x ⋅ a , a ) acc^r={(B^r,S^r,R^r,sk_U,a^{x+1},a)} = (B^{old},S^{old},R^{old},sk_U,a^x \cdot a ,a) accr=(Br,Sr,Rr,skU,ax+1,a)=(Bold,Sold,Rold,skU,axa,a) a c c r , B acc^{r,\mathfrak{B}} accr,B代表盲化版本。
  • T = g a x + 1 T = g^{a^{x+1}} T=gax+1为最近使用的交易tag
  • π \pi π为相应的零知识证明

交易信息的计算过程如下

  1. 计算 a c c r , B , σ M R n d acc^{r,\mathfrak{B}},\sigma_{M}^{Rnd} accr,B,σMRnd
  2. 执行零知识证明,即
    1. T T T的生成也是正确的,它的指数是使用新账户的第5个参数生成的。
    2. σ M R n d \sigma^{Rnd}_{\mathbb{M}} σMRnd σ M \sigma_{\mathbb{M}} σM的重随机化且 σ s , M \sigma_{s,\mathbb{M}} σs,M是聚合了 α \alpha α个不同的有效维护者的在原账户上的签名的签名。
    3. 新账户是在旧帐户的基础上更新的,也就是金额回到交易之前的状态。
    4. 用户知道随机数 r a b r r_{abr} rabr,该随机数用于生成新账户、新签名和门限签名。
  3. 发送交易中止信息 A R = ( a c c r , B , σ M R n d , T , π ) \mathrm{AR~=~(acc^{r,\mathfrak{B}},\sigma_{M}^{Rnd},T,\pi)} AR = (accr,B,σMRnd,T,π)给每一个维护人员,收到上一个维护者的确认信息再发给下一个。

每个维护人员 M j M_j Mj

  1. 交易验证:解析消息,若交易标识符已经被中止(账本里存在一条中止记录),或者零知识证明验证、签名验证不通过则忽略掉此交易信息。
  2. 拜占庭投票:若自己的账本里存在当前交易的标签 T T T(发行或者支付交易),则向拜占庭协议里输入1,否则输入0。
  3. 若拜占庭结果为1,代表至少有一个诚实的维护人员存下了此前的交易,则
    1. 存下了交易的诚实维护人员将该交易对 ( T l s , T l r ) (\mathsf{Tl}_s,\mathsf{Tl}_r) (Tls,Tlr)通过认证信道发送给其他的维护人员。
    2. 收到的信息的维护人员对该交易对进行验证,无效则忽略,有效则对该交易对 a c c s n e w , B , a c c r n e w , B \mathsf{acc}_s^{\mathsf{new},\mathfrak{B}},\mathsf{acc}_r^{\mathsf{new},\mathfrak{B}} accsnew,Baccrnew,B进行签名 σ s , j n e w , B , σ r , j n e w , B \sigma_{s,j}^{new,\mathfrak{B}},\sigma_{r,j}^{new,\mathfrak{B}} σs,jnew,B,σr,jnew,B
    3. 如果没有存下相关交易对和交易标签,则存下,然后将对应签名发送给对应交易双方。

接收用户和支付用户收到消息后解盲然后聚合签名,交易完成,同时代表中止交易失败。

  1. 若拜占庭结果为0,代表大部分维护者的账本是没有该交易标签的。
    1. 已经存有交易对的维护者,从自己的账本里删除掉该交易对信息。
    2. 存储下新的交易中止信息的标签 t i d = ( A b o r t e d , T ) t_{id} = (Aborted,T) tid=(Aborted,T)
    3. 对重新刷新的账户进行签名 σ j r , B \sigma_{j}^{r,\mathfrak{B}} σjr,B,然后发送给用户。

接收用户收到消息后解盲然后聚合签名,交易完成,中止交易成功。

审计

隐私撤销

提交完全匿名的交易对, 审计委员会撤销其隐私并返回交易的元数据,即双方用户以及交易价值。

image.png
收到撤销特定交易tag的指令之后,
每个维护人员

  1. 从账本里查找到与该tag t i d t_{id} tid相关的加密交易对 ( ψ s , ψ r ) (\psi_s,\psi_r) (ψs,ψr),并对其解密得到 ( ψ s , 1 s k 1 , j , ψ s , 1 s k 2 , j , ψ r , 1 s k 1 , j ) (\psi_{s,1}^{sk_1,j},\psi_{s,1}^{sk_2,j},\psi_{r,1}^{sk_1,j}) (ψs,1sk1,j,ψs,1sk2,j,ψr,1sk1,j),接着调用零知识证明协议,证明解密正确。
  2. 通过认证信道接收来自其他维护人员的信息(需要达到门限阈值的数量)和相应拉格朗日系数,调用恢复函数恢复出交易信息里的双方用户公钥 ( p k s , p k r ) (pk_s,pk_r) (pks,pkr)以及交易值 g v g^v gv。同样需要调用零知识证明协议证明解密正确。
  3. 调用密钥检索函数,通过公钥寻找到对应用户,并通过 g v g^v gv计算出 v v v
追踪溯源

提交用户的标识符,审计委员会追溯出该用户的所有交易。
image.png
通过用户标识符,从注册协议中查到用户的交易计数器 a a a的秘密分享,
维护者相互计算交易标签,直到该标签不存在于账本上,由此找到用户最近的交易。
收到追溯的指令之后,
每个维护人员

  1. 从账本找到用户注册记录,使用零知识证明,证明里面的 a j a_j aj是之前得到的那个,可以通过注册协议广播的 c o m j ~ \tilde{\mathsf{com}_j} comj~得证,即证明 c o m j ~ ∈ c o m M \tilde{\mathsf{com}_j} \in com_{\mathbb{M}} comj~comM
  2. 通过认证信道接收其他维护人员的信息 x ‾ j = ( соm ~ j , g ˙ a j , g ˙ ) \overline{\mathrm{x}}_j=(\tilde{\text{соm}}_j,\dot{g}^{a_j},\dot{g}) xj=(соm~j,g˙aj,g˙)以及对应的零知识证明proof(需要达到门限阈值的数量)和相应拉格朗日系数,其中 g ˙ = g a e , e ← 0 \dot{g}=g^{a^e},e\leftarrow 0 g˙=gaee0,证proof并计算出 g ˙ a \dot{g}^{a} g˙a
  3. 接着从自己账本里寻找包含此交易tag= g ˙ a \dot{g}^{a} g˙a的交易,若存在,则将交易标签往前提一个 e ← e + 1 e\leftarrow e+1 ee+1,并存该交易相关 t i d t_{id} tid和相应参与双方信息。若不存在,则向其他所有参与者发送消息说明自己这里没有包含此交易tag= g ˙ a \dot{g}^{a} g˙a的交易。
  4. 若收到达到门限阈值数量个不包含交易tag的消息,则可以输出目前位置记录的所有交易信息( t i d t_{id} tid,相应参与双方信息)。

小结

  • 交易中止这块是特殊情况,不是很理想。账户丢失被盗这类问题没有解决。
  • 离线情景没有考虑

参考

Kiayias, Aggelos, Markulf Kohlweiss, and Amirreza Sarencheh. “Peredi: Privacy-enhanced, regulated and distributed central bank digital currencies.” Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security. 2022.

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

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

相关文章

瑞吉外卖实战学习--11、分类管理的列表分页查询

分类管理的列表分页查询 前言1、创建接口2、基于分页组件来实现的 前言 通过前端接口可以看到请求和传递的参数&#xff0c;本文章是基于mybatisPlus的分页插件来实现的 1、创建接口 GetMapping("/page")public R<Page> page(int page,int pageSize){ // …

halcon图像腐蚀

1、原理 使用结构元素在图像上移动&#xff0c;只有结构元素上的所有像素点都属于图像中时&#xff0c;才保留结构元素中心点所在的像素&#xff0c;常用于分离连接的两个物体、消除噪声。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) r…

【Python刷题】将有序数组转换为二叉搜索树

问题描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 高度平衡的意思是&#xff1a;二叉树是一颗满足“每个结点的左右两个子树的高度差的绝对值不超过1”的二叉树。 示例 1&#xff1a; 输入&#xf…

Java学习33-Java 多线程Thread 多线程安全问题

Thread的生命周期 JDK1.5之前 JDK1.5之后分为 NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED 多线程安全问题 举例&#xff0c;要求三个窗口同时卖票&#xff0c;总共有100张票&#xff0c;打印出卖票过程&#xff0c;不允许重复售卖 package Thread;public class …

Codeforces Round 930 (Div. 2) C. Bitwise Operation Wizard

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

linux:生产者消费者模型

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、生产者消费者模型二、基于阻塞队列的生产者消费者模型代码实现 总结 前言 本文是对于生产者消费者模型的知识总结 一、生产者消费者模型 生产者消费者模型就是…

OpenHarmony实战开发-如何实现购物示例应用

​介绍 本示例展示在进场时加载进场动画&#xff0c;整体使用Tabs容器设计应用框架&#xff0c;通过TabContent组件设置分页面&#xff0c;在子页面中绘制界面。通过Navigation完成页面之间的切换。在详情页中通过 Video组件加载视频资源&#xff0c;使用CustomDialogControll…

Python 代码混淆工具概述

在保护Python代码安全方面&#xff0c;有多种混淆工具可供选择&#xff0c;包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况&#xff0c;以及在实际应用中的注意事项。 &#x1f4dd; 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…

用Typora+picgo+cloudflare+Telegraph-image的免费,无需服务器,无限空间的图床搭建(避坑指南)

用TyporapicgocloudflareTelegraph-image的免费&#xff0c;无需服务器&#xff0c;无限空间的图床搭建&#xff08;避坑指南&#xff09; 前提&#xff1a;有github何cloudflare (没有的话注册也很快) 首先&#xff0c;是一个别人写的详细的配置流程&#xff0c;傻瓜式教程&am…

嵌入式网络硬件方案

一. 简介 本文来了解一下嵌入式有些网络中&#xff0c;涉及的网络硬件方案。 注意&#xff1a;本文说明的是有些网络。 提起网络&#xff0c;我们一般想到的硬件就是“网卡”&#xff0c;“网卡”这个概念最早从电脑领域传出来&#xff0c;顾名思义就是能上网的卡。在电脑领…

Android12 简单的共享内存驱动实现 参考Ashmem

Android12 共享内存驱动实现 SOC&#xff1a;RK3568 system&#xff1a;Android12 概述&#xff1a; 1. 概述 Ashmem&#xff08;Anonymous Shared Memory&#xff0c;Android 匿名共享内存&#xff09;&#xff0c;它基于 mmap 系统调用&#xff0c;可以让不同进程将同一段…

Go-知识协程

Go-知识协程 1. 基本概念1.1 进程1.2 线程1.3 协程 2. 协程的优势3. 调度模型3.1 线程模型3.2 Go调度器模型 4. 调度策略4.1 队列轮转4.2 系统调用4.3 工作量窃取4.4 抢占式调度 5. GOMAXPROCS对性能的影响 一个小活动&#xff1a; https://developer.aliyun.com//topic/lingma…

virtualbox 日常运维

前言 虽然平常以macOS和Linux作为主打工作环境&#xff0c;但还是有很多需要用到windows的时候&#xff0c;如camtasia和券商QMT软件。 在二手ThinkPad P53上安装了几个windows虚机&#xff0c;作为测试环境。Mac笔记本远程桌面连接嫌麻烦&#xff0c;还是命令行舒服。MacOS自…

计算机网络—TCP协议详解:特性、应用(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀️…

Linux文件与进程交互的窥探者lsof

lsof 是一个 Linux 和 UNIX 系统中的实用工具,用于列出系统中打开文件的所有信息。这个名字代表 “List Open Files”,但它也可以显示进程相关的其他信息,如: 打开的文件描述符列表 打开网络连接的列表 被进程使用的信号和内核对象等 在Linux系统中,有一个经典的概念: …

【御控物联】JavaScript JSON结构转换(6):对象To对象——综合应用

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

java(4)之运算符

1、算术运算符 运算符含义表达式加11-减1-1*乘1*2/除2/1%取余5%2 2、赋值运算符 即 表示将右边的值赋给左边的变量 即 int i &#xff1b; i 1&#xff1b; 运算符含义 表达式 x xyxy-x x-yx - y*x x*yx*y/x x/yx /y%x x%yx %y 代码示例 public class Main {pub…

DXP学习3-单片机时钟显示系统的层次原理图设计

目录 一&#xff0c;自上而下的子母图设计 1&#xff0c;绘制层次式电路母图 1)工程及原理图创建和保存 2)开始绘制层次式母图main.SchDoc 2&#xff0c;绘制图纸符号 1&#xff09;properties选项卡 2&#xff09;designator标号 3&#xff09;filename文件名 4&…

Kafka、ActiveMQ、RabbitMQ和RocketMQ都有哪些区别?

一、问题解析 Kafka、ActiveMQ、RabbitMQ和RocketMQ都是常见的消息中间件&#xff0c;它们都提供了高性能、高可用、可扩展的消息传递机制&#xff0c;但它们之间也有以下一些区别&#xff1a; 1、消息传递模型&#xff1a;Kafka主要支持发布-订阅模型&#xff0c;ActiveMQ、R…

什么是人工智能物联网(AIoT)?

过去十年&#xff0c;从医疗设备、家庭和楼宇自动化到工业自动化等各个领域&#xff0c;物联网 (IoT) 设备的数量呈爆炸式增长。设备包括可穿戴设备、传感器、电器和医疗监视器——所有这些设备都相互连接&#xff0c;收集和共享大量数据。国际数据公司 (IDC) 预测&#xff0c;…