美文网首页
Lecture-1 summary

Lecture-1 summary

作者: 建怀 | 来源:发表于2018-09-26 15:12 被阅读0次

Lecture-1 summary

ring signature和zk-snark进行比较

  简单理解环形签名,有n个用户,他们都有一对公私钥,有一个用户有一个信息m,需要给其他所有用户证明自己拥有信息m。

  • 第一阶段:签名阶段,这个用户保存其他所有用户的公钥,这个用户用所有人的公钥加上自己的私钥对信息m进行签名得到签名指纹S。
  • 第二阶段:广播阶段,用户将签名指纹S和信息m广播给所有用户。
  • 第三阶段:验证阶段,每个用户都可以用自己的公钥对指纹S和信息m进行验证。

decoy output是什么意思呢,简单理解,就是混入其他多少个公钥进来混淆加密,这样混的多了,任何一个验证方都难以知道是谁发起的这个签名。

项目:https://github.com/t-bast/ring-signatures

为了验证decoy多与少的时间消耗,写了一个脚本:

func sign_time(){
    nums := []int{2, 3,5,7,11,57,111}
    PK, SK := ring.Generate(crand.Reader)
    message := "wtf"
    for _, num := range nums {
            var ringKeys []ring.PublicKey
            ringKeys = append(ringKeys, PK)
            for i :=0;i<num;i++ {
                    pk, _ := ring.Generate(crand.Reader)
                    ringKeys = append(ringKeys, pk)
            }
            t0 := time.Now().UnixNano()
            SK.Sign(crand.Reader,[]byte(message),ringKeys,0)
            t1 := time.Now().UnixNano()
            run_time := t1-t0
            fmt.Printf("decoy number:%d nanosecond",num)
            fmt.Printf("sign run time: %d nanosecond",run_time)
            fmt.Println()
    }
}

结果如下:

decoy number:2 nanosecondsign   run time: 23310644 nanosecond
decoy number:3 nanosecondsign   run time: 32150456 nanosecond
decoy number:5 nanosecondsign   run time: 49989242 nanosecond
decoy number:7 nanosecondsign   run time: 66954814 nanosecond
decoy number:11 nanosecondsign  run time: 103006057 nanosecond
decoy number:57 nanosecondsign  run time: 512016500 nanosecond
decoy number:111 nanosecondsign run time: 991204405 nanosecond

接下来看看zkSNARK,如果要想简单理解,可以参考我这博客:零知识证明中的超级新星:zk-SNARKs

当然要想更加深入理解zk-SNARKs,绝非这么容易,了解下基本的密码学概念:

  • Zero knowledge:零知识,证明者向验证者证明某个信息的情况下,不会给验证者提供任何有用的信息。
  • Succinctness:证据信息较短,方便验证。
  • Non-interactivity:没有交互,这对于区块链来说就非常完美,直接把签名后的“无用”的信息放在公链让验证者可以公开验证。
  • Arguments:证明过程是计算完好(computationally soundness)的,证明者无法在合理的时间内造出伪证。
  • of knowledge:对一个证明者来说,在不知晓特定证明(witness)的前提下,构建一个有效的零知识是不可能的。

有一个C++的zk-SNARKs的项目https://github.com/scipr-lab/libsnark

zk-SNARKs占用空间大约40M左右,环形签名和zk-SNARKs比较,后者的运行更有效率。

bitcoin,Ethereum,menero,zcash和EOS的交易,交易属性,块大小以及填入多少交易

<table>
<tr>
<td>币种</td>
<td>出块时间</td>
<td>交易属性</td>
<td>共识算法</td>
<td>块大小</td>
<td>填入交易数</td>
</tr>
<tr>
<td>Bitcoin</td>
<td>10min</td>
<td>最终一致性的确认需要多个出块来保证</td>
<td>PoW</td>
<td>1M</td>
<td>2k-3k</td>
</tr>
<tr>
<td>Ethereum</td>
<td>14s</td>
<td>gas消耗机制,支持图灵完备的智能合约</td>
<td>PoW</td>
<td>最大1500000Gas,每笔转账消耗21000Gas,最大为1M</td>
<td>70</td>
</tr>
<tr>
<td>Menero</td>
<td>600s</td>
<td>使用环签名,隐形地址保证匿名</td>
<td>防ASIC的CryptoNote的核心算法</td>
<td>不固定,最大为前100个块大小的中位数的2倍,最小块300KB</td>
<td>交易数量不固定,能接近1000</td>
</tr>
<tr>
<td>ZCash</td>
<td>2.5min</td>
<td>zk-SNARKs实现匿名</td>
<td>抗ASIC的EquiHash算法</td>
<td>2M</td>
<td>3k左右</td>
</tr>
<tr>
<td>EOS</td>
<td>0.5s</td>
<td>快速,地址记忆友好,权限体系</td>
<td>DPoS+PBFT</td>
<td>不固定,可以到几十M</td>
<td>1500以上</td>
</tr>
</table>

相关文章

网友评论

      本文标题:Lecture-1 summary

      本文链接:https://www.haomeiwen.com/subject/vmadoftx.html