KDF
KDF 密钥派生函数
在现实生活中,我们更倾向于使用密码来保护自己的数据,而不是二进制的密钥。因为相比于二进制复杂的密钥,字符形式(小写字母,大写字母,数字,特殊符号等的组合)才符合人类正常的思维。
可对计算机来说这相反,现代密码学的很多算法都要求输入是一个大的数字,二进制的密钥就是这样一个大的数字。 因此显然我们需要一个将字符密码(Password)转换成密钥(Key)的函数,这就是密钥派生函数 Key Derivation Function。
直接使用SHA-一类的哈希函数加密password是不可取的,因为password通常都包含着个人的情感元素,这是容易记忆但容易受到猜测的,通常密码不会很长,在10位左右。另外,有的人为了方便,还会选择一些常见的弱密码,比如123456,admin,个人生日等。这就导致如果直接使用SHA-类的算法,许多密码将很容易被暴力破解,字典攻击,彩虹表攻击等手段猜测出来。
KDF 目前主要从如下三个维度提升 hash 碰撞难度:
时间复杂度:对应 CPU/GPU 计算资源
空间复杂度:对应 Memory 内存资源
并行维度:使用无法分解的算法,锁定 ...
区块链中的前沿技术
元宇宙
头号玩家:献给所有游戏玩家的一封情书
在头号玩家中,令人惊叹的“绿洲”让人向往,那么这一世界是怎么实现的呢?这就体现区块链技术在另一个方向的发展:元宇宙。
根据维基百科,Metaverse 被定义为“一个集体虚拟共享空间,由虚拟增强的物理现实和物理持久的虚拟空间融合而创造,包括所有虚拟世界、增强现实和互联网的总和。”
这是另一个与我们物理世界平行的虚拟世界——一个我们可以通过互联网和兼容的硬件设备自由访问的世界,并在其中进行互动。
元宇宙是真实和虚拟之间的桥梁,可以扩展我们的视觉、声音和触觉,将数字物品融入物理世界,让我们随时进入完全沉浸式的3D 环境。
元宇宙虽然不像科幻小说和影视作品中描绘的那样奇幻,但却有可能成为新的计算平台和内容媒体,产生数万亿美元的价值。元宇宙确实可以作为网络功能的“继承者”——覆盖范围更大、花费的时间更长、商业活动更多——经济优势也有可能更大。
更广泛地说,元宇宙**将改变现代资源的分配和货币化方式。**在元宇宙的模式下,居住在“一线发达市区”以外的潜在劳动力将通过虚拟劳动参与“高价值”经济。作为极具生命力的新事物,元宇宙源源不断地创造着新就业机会 ...
铜锁杂谈
铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。
项目地址:https://github.com/Tongsuo-Project/Tongsuo
安装Tongsuo
本节将介绍如何在ubuntu的虚拟机中安装Tongsuo。
常见的安装方法有两种:直接安装和使用docker安装,没有本质上的区别,docker只是更方便我们卸载,你可以省略前面的安装dockers过程,直接到Tongsuo的安装步骤。
安装docker
在这一步,建议大家进入root权限
卸载旧版本
ubuntu下自带了docker的库,不需要添加新的源。
但是ubuntu自带的docker版本太低,需要先卸载旧的再安装新的
123sudo apt-get remove docker docker-engine docker.io containerd runc(su)apt-get remove docker doc ...
纵向联邦学习
现在我们介绍另一种联邦学习算法:纵向联邦学习(Vertical Federated Learning)。纵向联邦学习的参与方拥有相同样本空间、不同特征空间的数据,通过共有样本数据进行安全联合建模,在金融、广告等领域拥有广泛的应用场景。和横向联邦学习相比,纵向联邦学习的参与方之间需要协同完成数据求交集、模型联合训练和模型联合推理。并且,参与方越多,纵向联邦学习系统的复杂度就越高。
纵向联邦学习VFL一般由两部分组成:加密实体对齐,加密模型训练。
加密实体对齐
由于A方和B方公司的用户群体不同,系统使用一种基于加密的用户ID对齐技术,来确保A方和B方不需要暴漏各自的原始数据便可以对齐共同用户。在实体对齐期间,系统不会将属于某一家公司的用户暴露出来。
加密模型训练
在确定共有实体后,各方可以使用这些共有实体的数据来协同地训练一个机器学习模型。训练过程可以被分为以下四个步骤:
协调者C创建密钥对,并将公共密钥发送给A方和B方
A方和B方对中间结果进行加密和交换,中间结果用来帮助计算梯度和损失值
A方和B方计算加密梯度并分别加入附加掩码。B方还会计算加密损失。A方和B方将加密的结果发送给C ...
公钥加密方案在选择密文攻击下的不可区分性
IND-CPA安全仅保证敌手是完全被动情况的安全,不能保证敌手主动情况(如向网络中注入消息)的安全。
为了描述敌手的主动攻击,前人提出一种选择密文攻击(Chosen Ciphertext Attack,CCA)的概念,其中敌手在获得目标密文以前,可以访问解密喻言机。敌手获得目标密文后,希望获得目标密文对应的明文的部分信息。
公钥加密方案在选择密文攻击下的IND游戏如下:
(1)初始化。挑战者产生系统Π\mathcal{\Pi}Π,敌手获得系统的公开钥。
(2)训练。敌手向挑战者做解密询问,即取密文CT给挑战者,挑战者解密后,将明文给敌手。
(3)挑战,敌手输出两个长度相同的消息M0,M1M_0,M_1M0,M1,再从挑战者接收MβM_{\beta}Mβ的密文,其中随机值β←R{0,1}\beta \larr _R\{0,1\}β←R{0,1}。
(4)猜测,敌手输出β′\beta^{\prime}β′,如果β′=β\beta^{\prime}=\betaβ′=β,则敌手攻击成功。
以上攻击过程称为午餐时间攻击,相当于有一个执行解密运算的黑河,掌握黑盒的人在午餐时间离开后,敌手 ...
群上的离散对数问题
群上的离散对数问题:给定群GGG的生成元ggg和GGG中的随即元素hhh,计算loggh\log _ghloggh。这个问题在许多群中都被认为是困难的,称其为离散对数假设。
令GroupGen是一个多项式时间算法,其输入为安全参数K\mathcal{K}K,输出为一个阶等于qqq的循环群GGG的描述,以及一个生成元g∈Gg\in Gg∈G,它的离散对数假设定义如下:
GroupGen的离散对数问题是困难的,如果对于所有的PPT算法AAA,下式是可忽略的
Pr[(G,g)←GroupGen(K);h←RG;x←A(G,g,h)],st gx=hPr[(G,g)\larr GroupGen(\mathcal{K});h\larr _RG;x\larr \mathcal{A}(G,g,h)],st\ g^x=h
Pr[(G,g)←GroupGen(K);h←RG;x←A(G,g,h)],st gx=h
如果GroupGen的离散对数是困难的,且G是一个有GroupGen输出的群,则称离散对数问题在G中是困难的。
ElGamal加密算法是IND-CPA安全的,
密钥产生过程:
KenG ...
选择明文攻击下的不可区分性
公钥加密方案在选择明文攻击(Chosen Plaintext Attack,CPA)下的IDA(Indistinguishability)游戏称为IND-CPA游戏如下:
(1) 初始化。挑战者产生系统Π\mathcal{\Pi}Π,敌手A\mathcal {A}A获得系统的公开钥。
(2) 敌手产生明文消息,得到系统加密后的密文(可多项式有界次)。
(3) 挑战。敌手输出出两个长度相同的消息M0M_0M0和M1M_1M1。挑战者随机选择β←R{0,1}\beta \larr _R\{0,1\}β←R{0,1},将MβM_{\beta}Mβ加密,并将密文C∗C^*C∗(称为目标密文)给敌手。
(4) 猜测。敌手输出β′\beta^{\prime}β′,如果β=β′\beta=\beta^{\prime}β=β′,则敌手攻击成功。
敌手的优势可定义为参数K\mathcal{K}K的函数:
AdvΠ,ACPA(K)=∣Pr[β′=β]−12∣Adv_{\mathcal{\Pi},\mathcal{A}}^{CPA}(\mathcal{K})=|Pr[\beta^{\prime}= ...
Introduction_to_Security_Reduction翻译
本文将翻译Fuchun Guo老师所编写的Introduction to Security Reduction一书,本书主要讲述密码学协议是如何构造一个安全性证明的。
Introduction to Security Reduction
https://doi.org/10.1007/978-3-319-93049-7
Preface
安全还原(原文是security reduction,也可以说是安全性降低)是证明公钥密码学安全性的一种非常流行的方法。粗略地说,通过安全还原,我们可以证明破解一个方案就像解决一个数学难题一样困难。然而,如何利用对手的自适应攻击来编制正确的安全还原是相当复杂的。原因在于,并不存在适用于所有建议方案的通用安全还原。
密码学研究论文中给出的安全还原通常很难被初学者完全理解。为了帮助初学者,一些密码学教科书用较简单的例子说明了如何正确编制安全还原程序。不过,研究论文和以往教科书中提到的安全还原通常是针对特定方案的。不同方案的安全还原不同,导致初学者无所适从。我们需要一本系统介绍如何为密码系统(而非特定方案)正确编写安全还原程序的书籍。有鉴于此,我们编写了这本 ...
openSSL
什么是openSSL
OpenSSL 是一个开源的安全套接字层密码库,提供了各种密码和加密算法的实现。OpenSSL 头文件是用于在 C/C++ 代码中访问 OpenSSL 库功能的接口定义。
下面介绍一些常用的 OpenSSL 头文件:
<openssl/ssl.h>:包含与 SSL/TLS 协议相关的函数和数据结构的声明,用于实现安全的网络通信。
<openssl/evp.h>:包含对称加密算法和哈希算法的函数和数据结构的声明,用于实现数据的加密、解密和摘要计算。
<openssl/rsa.h>:包含 RSA 加密算法的函数和数据结构的声明,用于实现 RSA 密钥的生成、加密和解密。
<openssl/dh.h>:包含 Diffie-Hellman 密钥交换算法的函数和数据结构的声明,用于实现 DH 密钥的生成和共享密钥的计算。
<openssl/x509.h>:包含 X.509 数字证书和公钥基础设施(PKI)相关的函数和数据结构的声明,用于实现证书的读取、验证和操作。
<openssl/bio.h>: ...
Mastering Bitcoin
公认的区块链1.0的最好的书,在线阅读Mastering Bitcoin
介绍
什么是比特币
比特币是由一系列概念和技术作为基础构建的数字货币生态系统。
比特币可以做传统货币能做的所有事,例如买卖商品、给个人或组织汇款、贷款。用户可以在专门的交易所里买卖比特币或兑换其他货币。
不同于传统货币,比特币是完全虚拟的。用户只要有证明其控制权的密钥,用密钥解锁,就可以发送比特币。这些密钥通常存储在计算机的数字钱包里。
比特币是通过“挖矿”产生的,挖矿就是验证比特币交易的同时参与竞赛来解决一个数学问题。任何参与者(比如运行一个完整协议栈的人)都可以做矿工,用他们的电脑算力来验证和记录交易。
比特币协议还规定,每四年新币的开采量减半,同时限制比特币的最终开采总量为2,100万枚。这样,流通中的比特币数量非常接近一条曲线,并将在2140年比特币将达到2,100万枚。由于比特币的开采速度随时间递减,从长期来看,比特币是一种通货紧缩货币。
比特币的构成:
去中心化的点对点网络
公共的交易账簿
去中心化的数学的和确定性的货币发行
去中心化的交易验证系统
比特币发展史
2008年,一个化名为中本聪的人 ...
横向联邦学习
横向联邦学习的定义
横向联邦学习也称为按样本划分的联邦学习(Sample-Partitioned Federated Learning 或 Example-Partitioned Federated Learning),可以应用于联邦学习的各个参与方的数据集有相同的特征空间和不同的样本空间的场景,类似于在表格视图中对数据进行水平划分的情况。事实上,横向一词来源于术语 横向划分(horizontal partition)。“横向划分” 广泛用于传统的以表格形式展示数据库记录内容的场景,例如表格中的记录按照行被横向划分为不同的组,且每行都包含完整的数据特征。我们将横向联邦学习的条件总结为:
xi=xj,yi=yj,Ii≠Ij,∀Di,Dj,i≠jx_i=x_j,y_i=y_j,I_i\ne I_j,\forall D_i,D_j,i\ne j
xi=xj,yi=yj,Ii=Ij,∀Di,Dj,i=j
Di,DjD_i,D_jDi,Dj表示第i方和第j方拥有的数据集。我们假设两方的数据特征空间和标签空间对,即(xi,yi),(xj,yj)(x_i,y_i),( ...
分布式机器学习
分布式机器学习介绍
分布式机器学习也称为分布式学习,是指利用多个计算节点(也可称为工作者,worker)进行机器学习或者深度学习的算法和系统,旨在提高性能,保护隐私,并可扩展至更大规模的训练数据和更大的模型。如图所示。训练数据被分为不相交的数据分片并被发送给各个工作者,工作者将在本地执行随机梯度下降(Stochastic Gradient Descent,SGD)。工作者将梯度∇Wi\nabla W^i∇Wi或者模型参数WiW^iWi发送至服务器。参数服务器对收到的梯度或者模型参数进行聚合,从而得到全局梯度∇W\nabla W∇W或全局模型参数WWW。
面向扩展性的DML
大规模机器学习
在大数据时代,ML面临的主要问题是如何处理大规模的高纬度数据集,随着大趋势的变化,ML社区正面临着计算性能和好事与数据规模不匹配的挑战,这使得大规模的训练样本中耗费合理的计算代价和时间进行学习变得愈加不可能。
内存短缺
传统ML方法只在一块独立内存中对训练样本进行所有的操作,因此,可能出现:训练模型可能不能收敛或性能低下(低准确率和召回率)。
不合理的训练时间
ML算法中的一些优化过程可能不能匹 ...
隐私,安全及机器学习
面向隐私保护的机器学习
不断发生的数据泄露和隐私侵权事件使得社会公众更加认识到,在人工智能系统的构建与使用中,需要保护用户隐私和数据机密性,由此产生的系统便称作面向隐私保护的机器学习(Privacy-Preserving Machine Learning,PPML)系统。
我们对于信息安全有如下定义:由个人,团体或机构自行决定何时,如何以及在多大程度上将有关他们的信息传达给他人。
面向隐私保护的机器学习与安全机器学习
我们首先要分清PPML和安全机器学习(Secure ML)的区别。这二者的区别在于它们被设计用来应用不同类型的安全威胁。在安全机器学习中,敌手被假设违反了机器学习系统的完整性和可用性。在PPML中,递手被假设违反了机器学习的隐私性和机密性
完整性(Integrity)
对完整性的攻击可能导致机器学习系统会出现检测错误,例如可能会将入侵点检测为正常。
可用性(Availability)
对可用性的攻击可能导致系统会出现分类错误(假阴性和假阳性),即系统会变成不可用的。这是比完整性攻击更宽泛的一种攻击类型。
机密性(Confidentiality)
对机密性的攻击可能会导 ...
R1CS
本文介绍零知识证明中的一对概念:R1CS和QAP
概述
zk-SNARKS是目前最常用的零知识证明系统,但是由于其复杂性,不能直接应用于任何计算问题,因此需要对计算问题进行一步步的转化,其中就包含了R1CS和QAP。
R1CS 全程 Rank-1 Constraint System,一阶约束系统,其本质是一个可计算的三元方程组。
而 QAP 全称 Quadratic Arithmetic Peoblem,二次算术问题,QAP 转换不仅可以将函数的代码转换为 QAP,还可以在转换的同时构建一个对应于代码输入的解(又称为 QAP 的 Witness),之后再基于这个 witness 构建一个实际的零知识证明系统。
本文的参考是V神
QAP
在V神的文章中,给出了一个例子:P希望向V证明其知道方程x3+x+5=35x^3+x+5=35x3+x+5=35的解(P知道这个方程的解,因此witness为x=3x=3x=3),接下来是如何转化为QAP问题
首先,我们用程序语言描述这个问题:
123def find(x): y=x**3 return y+x+5
Flatt ...
Sigma零知识证明协议
Sigma零知识证明,知道秘密ω\omegaω,且与公开输入QQQ满足离散对数关系Q=ωGQ=\omega GQ=ωG
Sigma零知识证明协议
设关系R⊆X∗YR\subseteq X *YR⊆X∗Y, 那么<P, V> 构建在R上的一个Sigma 协议为:
P是一个叫证明的交互式协议,其输入为一个witness-statement对(x,y)∈R(x,y)\in R(x,y)∈R.
V是一个叫验证的交互式协议,其输入为一个statement,y∈Ry\in Ry∈R
P和V交互过程为:
首先,P计算一个承诺(commitment) t ,将其发送给V;
在收到来自P的消息后,V在有限的挑战空间C中随机选取一个挑战元素(challenge) c,并将其发送给P ;
在接收到来自V的挑战后, P计算出一个反馈(response) z ,将其发送给V
在收到了来自P的反馈后, V输出accept或者reject。
例子
1)P计算h=gxmod ph=g^xmod\ ph=gxmod p作为秘密
2)P选择随机数r∈zqr\in z_qr∈zq,计算 ...