零知识证明学习(三)—— 非交互式零知识证明(zkSNARKs)

非交互式零知识证明

本节主要介绍一种新的零知识证明- z k S N A R K zkSNARK zkSNARK z k S N A R K : z e r o − k n o w l e d g e S u c c i n c t N o n − I n t e r a c t i v e A r g u m e n t s o f K n o w l e d g e zkSNARK:zero-knowledge Succinct Non-Interactive Arguments of Knowledge zkSNARKzeroknowledgeSuccinctNonInteractiveArgumentsofKnowledge

背景

z k S N A R K zkSNARK zkSNARK是零知识证明中最经典的加密算法体系。目前已经被应用在很多地方,特别是在区块链领域,包括实际生活中隐私保护相关的应用。

Z e r o − K n o w l e d g e Zero-Knowledge ZeroKnowledge: 零知识证明体系里有两个角色,一个是证明者(Prover), 一个是验证者(Verifier)。举个例子,比特币创始人中本聪身份不明,之前传出过很多人声称自己是中本聪最后都不了了之。那么一个人如何证明自己是中本聪呢?因为大家知道中本聪钱包的地址。因此他只需要用这个钱包的私钥对这句话签名 “我是XXX,我其实就是中本聪"。然后其他人(Verifier) 都可以用中本聪钱包的公钥对这个签名进行验证。这个就是一个零知识证明。首先只有私钥持有方的签名才能通过验证,其次这个签名没有泄漏私钥的任何信息,钱包不会被其他人盗用。因此零知识证明解决了两个问题,一个是信任问题,一个是隐私问题。

S u c c i n c t Succinct Succinct:是指对于一个很复杂的问题,验证者可能需要进行很长时间的计算才能提供出相应的证明,但是我们希望证明的大小不要太大 (比如实际应用中只有几十 k b kb kb),同时验证者只需要很少的时间(比如微秒级别的时间) 就能够验证计算是否正确。

N o n − I n t e r a c t i v e Non-Interactive NonInteractive:是指在证明的过程中双方不需要互相交换信息。有一些算法体系需要证明者和验证者之间互相对话几次,交换信息。这对于实际应用就很不方便,增加了系统特别是网络通讯的复杂度。因此最好的情况是证明者一次性地把证明发送给验证者,验证者直接验证即可。

A r g u m e n t o f K n o w l e d g e Argument\quad of \quad Knowledge ArgumentofKnowledge:指的是证明者只有知道问题的答案才可能提供证明。这个比较绕口,另一个解释就是证明者造假成功的概率可以忽略不计。这里还有一个类似的概念 Proof of Knowledge。它们之间是有区别的。对于Argument来说,证明者的计算能力有限,也就是多项式的算力,而Proof of Knowledge则对证明者计算能力没有要求。比如一个验证者是从未来穿越回来,带着最先进的量子计算机,那么对于Proof of Knolwege的系统,他仍然没法造假。但是对于Argument of Knowledge的系统则有可能。简单的说就是:proof(证明)和argument(论证)在零知识证明里,是有区别的,在proof system中,即便是计算能力无限的prover也没法欺骗verifier去相信一个错误的陈述为真(统计可靠性),而在argument system中,只有多项式时间计算能力的没法欺骗(计算可靠性),假设能破解椭圆曲线离散对数问题,那么可能就不再安全。

多项式知识的证明(Proving Knowledge of a Polynomial)

我们从一个证明多项式知识的问题开始,然后使用一般方法。我们还会发现多项式的其他性质。

到目前为止,问题集中在一个薄弱的证明概念上,各方必须相互信任。例如,证明者不需要知道多项式,他可以使用任何其他可用的方法来得出正确的结果。而且,如果验证者多项式求值的范围并不大,她可能有概率会猜到一个数,这个概率是无法忽视的。接下来我们来处理这个缺陷,但首先要清楚的分析多项式的性质。一个多项式表达形式如下(n阶多项式):
c n x n + . . . + c 1 x 1 + c 0 x 0 c_nx^n+...+c_1x^1+c_0x^0

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,它通过SSH(Secure Shell)进行加密和身份验证。交互式上传文件是指在不需要人工干预的情况下,通过脚本或程序自动上传文件到远程服务器。 要实现SFTP的交互式上传文件,可以使用以下步骤: 1. 首先,确保你的系统上已经安装了OpenSSH客户端。如果没有安装,可以通过包管理器进行安装。 2. 在脚本或程序中,使用SFTP命令来进行文件上传。SFTP命令的基本语法如下: ``` sftp [选项] [用户名@]主机名 ``` 3. 在SFTP会话中,使用`put`命令来上传文件。`put`命令的语法如下: ``` put 本地文件路径 [远程文件路径] ``` 其中,本地文件路径是要上传的文件在本地系统中的路径,远程文件路径是要上传到远程服务器上的路径。如果不指定远程文件路径,则默认将文件上传到当前目录。 4. 在脚本或程序中,可以使用重定向符号`>`将SFTP命令和参数写入一个文本文件,然后使用`-b`选项将该文本文件作为输入传递给SFTP命令。这样可以实现完全交互式的上传过程。 下面是一个示例的交互式上传文件的脚本: ```bash #!/bin/bash HOST="远程主机名" USERNAME="用户名" PASSWORD="密码" LOCAL_FILE="本地文件路径" REMOTE_FILE="远程文件路径" # 将SFTP命令和参数写入一个文本文件 echo "put $LOCAL_FILE $REMOTE_FILE" > sftp_commands.txt # 使用SFTP命令执行上传 sftp -b sftp_commands.txt $USERNAME@$HOST << EOF $PASSWORD EOF # 删除临时的SFTP命令文件 rm sftp_commands.txt ``` 请注意,上述示例中使用了密码进行身份验证。为了安全起见,建议使用SSH密钥对进行身份验证,而不是密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值