格(Lattice)学习笔记之八:SIS OWF的应用

东泽 安比技术社区 2020-08-20 12:30

本文作者东泽,来自安比技术社区的小伙伴,目前就读于斯坦福大学,研究方向密码学。

到这儿,和SIS有关的内容就了解的差不多了。最后一篇来讲讲SIS OWF的实际应用。

SIS的压缩属性与CRHF

首先我们看SIS OWF的结构:

因为Ajtai给出的安全定义——即,这也就是说我们原来有 bits的信息量,我们等于是把它压缩到了模中的数字,即个bits的信息量。这也正好符合了SIS OWF满射(surjective)的特性,输入空间比输出空间大得多。
基于这一压缩的特性,我们很自然的就可以用SIS OWF来做一个Collision Resistant Hash Function。具体的CR和单向性我们之前也讨论过了。为了巩固知识,我们再来推一边。
首先,SIS OWF的单向性不用多说,因为SIS是一个公认的格中难题,如果我们可以逆向计算SIS的话,那也就代表我们可以解决格中的SIVP问题。
接着,我们需要证明如果SIS OWF是单向的,那么它也是Collision Resistant的。这个证明也不难,我们反过来推,如果我们可以找到SIS OWF的碰撞,那么我们就可以破解它的单向性。
假如给定一个,我们想要找到一个使得:
那么,我们首先可以在矩阵的任意一个column中(假设是第列,即)加上的值,构成。注意因为是一个随机的矩阵,所以就算某一列加上了,这个矩阵仍然还是随机的。
这个时候,我们可以尝试找到的碰撞,即一组
得到了碰撞之后,我们检查的第位是否不同。如果,那么我们就可以得到:
这里的值也就是前面SIS OWF的解了。具体的原理也很简单,因为如果,那么代表并不会用到我们修改过的这一列,这也就代表。同理,因为,所以。我们把两边相减,就能得到我们原来的了。

SIS的输出随机分布与承诺

SIS OWF不仅是单向且CR的,而且它的输出也是呈随机分布的。这一点我们可以用Leftover Hash Lemma来进行归纳。
LHL指出,如果一个函数具有Pairwise Independence,并且输出空间小于输入空间(压缩),那么这个函数的输出就为随机分布。
首先来看Pairwise Independence这一点,它的定义就是,如果任意固定两个输入,然后我们随机选择一个SIS问题,如果这两个SIS OWF的输出分布是独立的,那么这就代表这个函数是成对独立的(Pairwise Independent)。
当满足随机分布的条件之后,那么我们就可以把的输出看做一个随机分布的向量:
基于这一特性,我们就可以构建一个承诺(Commitment)系统。一方可以生成一段信息的承诺,然后把这个承诺发送给另一方。承诺的本身并不能暴露的值,即需要满足hiding的属性。稍后,承诺方可以公布一段字串来“打开”这个承诺,随后另一方就可以验证这个承诺的确是从信息构造而来的。一个承诺打开的方法应该只能有一种,即需要满足binding的属性。
我们基于SIS OWF来尝试构建一个承诺系统:
  1. 首先,我们选择两个随机的SIS问题矩阵
  2. 假如我们要承诺信息,那我们随机选择一个向量,然后我们输出承诺
  3. 注意到这里因为都是随机生成的,所以基于SIS OWF的随机分布特性,这等于是在我们原本的上叠加了一层随机的One-Time Pad,所以整体承诺也是随机分布的。
  4. 同样,这个承诺也是binding的,因为如果我们能够找到一对不同的并且可以得到同样的承诺的话,那就等于是我们找到了的一对碰撞,这我们已经证明了是不可能的。

SIS的线性同态特性与数字签名

因为SIS OWF其实就是一个线性组合的表达式,所以整个function其实是线性同态的:
这里有一点不太完美的地方,即需要一个norm比较小的输入。然而如果我们把两个短向量相加,得到的并不一定是短向量。这也就是说,这里的加法运算并不是封闭的(not closed under addition)。这不影响我们的应用。
SIS OWF其实还包含了另一组同态,即密钥同态:
基于第一种输入空间同态的特性,我们可以构造出一个数字签名系统。一个签名系统一般分为三个算法:
  1. ,即密钥生成,生成用于签名和验证的私钥与公钥。
  2. ,签名算法,通过私钥创造出签名。
  3. ,验证算法,通过公钥来验证签名是否正确。
为了构建这一系统,首先需要把SIS OWF的输入空间从一个向量拓展成一个矩阵
在密钥生成阶段,我们只需要随机生成SIS的问题矩阵并输出。然后我们选定一个随机的短矩阵和短向量作为私钥,并且选定,即私钥在SIS OWF下运算得到的结果作为公钥。
如果要签署一个消息的话,那么就计算,并且输出为签名。
随后验证的过程也很简单,只需要计算:
这里SIS OWF的同态特性就很完美的帮助我们验证了这一签名的正确性。至于安全性的话,一方面单独只看到一个是无法推算出的值的,所以这个签名是One-Time Secure(单次安全)的啦。

封面图来自unsplash,作者Levi Stute

往期回顾

格(Lattice)学习笔记之一:历史与基本概念

格(Lattice)学习笔记之二:计算问题

格(Lattice)学习笔记之三:对偶格

格(Lattice)学习笔记之四:SIS与LWE 问题

格(Lattice)学习笔记之五:基于SIS的OWF

格(Lattice)学习笔记之六:SIS的困难度论证

格(Lattice)学习笔记之七:SIS的效率与RingSIS

格密码学进阶之一:Lattice Trapdoors(格中陷门)

初探全同态加密:FHE的定义与历史回顾

初探全同态加密之二:格密码学与LWE问题

初探全同态加密之三:构建GSW全同态加密系统

浅谈零知识证明之一:背景与起源

浅谈零知识证明之二:简短无交互证明(SNARK)

浅谈零知识证明之三:zkSNARK证明体系的实现(上)

浅谈零知识证明之四:zkSNARK证明体系的实现(下)

密码学学习笔记——Sigma Protocol

密码学学习笔记——aSCV

探索零知识证明系列(一):初识「零知识」与「证明」

探索零知识证明系列(二):从「模拟」理解零知识证明

探索零知识证明系列(三):读心术:从零知识证明中提取「知识」

探索零知识证明系列(四):亚瑟王的「随机」挑战:从交互到非交互式零知识证明

探索零知识证明系列(五):云中「秘密」:构建非交互式零知识证明

zkPoD:区块链,零知识证明与形式化验证,实现无中介、零信任的公平交易

PoD-Tiny——实现零信任交易的最简协议

如果量子计算时代到来,我们的比特币安全吗?


零知识证明学习资源汇总

从零开始学习 zk-SNARK(一)——多项式的性质与证明

从零开始学习 zk-SNARK(二)——多项式的非交互式零知识证明

从零开始学习 zk-SNARK(三)——从程序到多项式的构造

从零开始学习 zk-SNARK(四)——多项式的约束

从零开始学习 zk-SNARK(五)—— Pinocchio 协议

零知识证明 Learn by Coding:libsnark 入门篇

链上富人寻「隐私」记(一:Mixer 篇)

理解零知识证明算法Bulletproofs(一):Range Proof

理解零知识证明算法Bulletproofs(二):Improved Range Proof

理解零知识证明算法Bulletproofs(三):Range Proof 实现分析

理解零知识证明算法Bulletproofs(四):Arithmetic Circuits

以太坊颠覆了以太坊:引入密码学实现2.0性能突破


Image

长按二维码添加微信进群技术讨论

邮箱 : info@secbit.io





收录于合集 #格(Lattice)学习笔记
 14
上一篇格(Lattice)学习笔记之七:SIS的效率与RingSIS下一篇格(Lattice)学习笔记之九:Ring-SIS与Ideal Lattice

Scan to Follow