- 博客(66)
- 收藏
- 关注
原创 基于小步大步法(BSGS)的同态加密多项式求值
本文介绍如何使用小步大步(Baby-Step-Giant-Step,BSGS)加速同态加密的多项式求值,尽量减少密文和密文乘法的次数。
2024-09-26 14:47:17
737
原创 CKKS同态加密通用函数近似方法和openFHE实现
同态加密可以直接在密文上进行运算,尤其是CKKS,可以直接在实数的密文上进行运算。服务器可以利用强大的计算能力,在不泄露用户隐私的情况下,为用户提供便捷的外包运算服务。然而,CKKS只能进行算术运算(多项式函数),无法直接计算很多复杂的函数。本文介绍了如何使用CKKS计算近似任意函数,并介绍了利用openFHE进行代码实现。
2024-09-25 21:29:49
909
原创 Transcipher:从对称加密到同态加密
本文介绍了Transcipher的概念。在Transcipher的框架下,用户使用高效的对称加密,对自己的数据进行加密,然后将密文和私钥的同态加密密文传输给服务器。服务器进行同态解密,得到用户数据同态加密的密文。Transcipher通过将计算开销移到服务端,降低了用户的加密开销和密文传输的开销,对于提升用户-服务器模型的同态加密应用具有重要的意义。近些年,在密码学三大会议都有相应的论文。
2024-09-22 12:29:54
908
原创 同态加密Hoisting Rotation介绍和OpenFHE示例
Hoisting在一个密文需要旋转多次的时候,可以预先计算公共的部分,从而加速整个旋转操作。本文简要介绍RLWE同态加密的旋转(Rotation)操作和Hoisting的优化原理,然后给出如何在OpenFHE同态加密库中使用Hoisting Rotation。
2024-09-21 11:28:08
1130
原创 同态加密明文矩阵乘密文向量优化:BSGS小步大步法
本文介绍如何使用小步大步(Baby-Step-Giant-Step,BSGS)优化RLWE同态加密的明文矩阵和密文向量的乘法。使用明文矩阵的对角打包和BSGS,降低密文旋转的次数
2024-09-20 20:17:03
1566
原创 基于Benes网络的SIMD同态密文任意重排
RLWE的密文使用了SIMD后极大的增加的同态加密的效率。同态加密通过加密一个向量,实现对明文的快速加法和乘法。然而,加密为一个密文的向量的内部元素之间,无法高效的操作。如一个密文加密了abc[a,b,c]abc,想要计算aba+bab并不是简单的。同态密文的重排指的是,在密文域将加密为同一个密文的向量进行置换重排。本文介绍Gentry等人在2012年提出的,基于Benes网络的明文重排方法。
2024-09-19 21:43:34
1013
原创 Pailliar同态加密算法描述与证明
Pailliar加密算法1999年被提出,是基于DCRT(Decisional Composite Residuosity Assumption)的加法同态加密方案。
2022-06-03 01:06:42
957
原创 python调用c++程序(pybind11)
前言c或者c++代码的效率比python要高很多,所以,很多时候,python程序会有一部分使用c或者c++来实现。本文介绍如何使用pybind11简单的包装c++程序,然后编译成一个python可以直接调用的模块。pybind11的安装pybind11的安装非常简单,你可以像安装一般的python包一样,使用pip来安装。pip install pybind11如果要安装在全局,/usr/local/include/pybind11路径,可以使用pip install "pybind11[
2022-05-16 23:47:00
1796
原创 拜占庭容错机器学习算法之剪枝平均
剪枝平均剪枝平均数,是指去掉一部分最大值和最小值后,剩余部分的平均数。更确切的定义是:假设有a1<a2<a3<⋯<ana_1<a_2<a_3<\cdots <a_na1<a2<a3<⋯<an,2β<n2\beta<n2β<n,那么{a1,a2,a3,⋯ ,an}\{a_1,a_2,a_3,\cdots,a_n\}{a1,a2,a3,⋯,an}的β\betaβ剪枝平均数定义为mβ=∑i=β+1n−2β
2022-05-15 10:48:34
1206
原创 同态哈希函数
同态哈希是一种特殊的哈希函数。如果aaa的哈希是h(a)h(a)h(a),bbb的哈希是h(b)h(b)h(b),f(a,b)f(a,b)f(a,b)是aaa和bbb的函数,那么f(a,b)f(a,b)f(a,b)的哈希可以通过h(a)h(a)h(a)和h(b)h(b)h(b)的某种计算获得。在论文《A Practical Scheme for Non-interactive Verifiable Secret Sharing》中就使用了同态哈希来验证秘密分享是否被篡改。RSA实例假设有一个RSA的加
2022-05-08 21:57:29
2957
1
原创 机器学习训练过程中的模型攻击的类型
前言所谓的模型攻击是指,恶意的用户干扰正常的机器学习过程,从而达到某种目的,而实施的一系列操作。通常,一个机器学习过程有数据收集,训练模型两个主要过程。在数据收集阶段,采取的攻击,一般叫做数据投毒攻击。而在训练阶段采取的攻击,叫做模型投毒攻击。数据投毒攻击所谓的数据投毒攻击,是指在数据收集阶段,或者数据预处理阶段实施的攻击。标签反转,如我们要训练一个识别图片的数字的模型。我们将一部分图片中数字为1的图片,标签转换的0,这样可以使得最终训练的模型的准确率大幅下降。数据加噪,给训练集的数据加上一些噪
2022-05-04 15:28:15
3872
原创 从多项式除法来看Reed-Solomon编解码
前言Reed-Solomon是一种应用广泛的纠错码。(n,k)(n,k)(n,k)的RS码可以容忍n−k+12\frac{n-k+1}{2}2n−k+1个错误,编码kkk个信息,需要nnn个码字。也就是说,当错误的码字小于n−k+12\frac{n-k+1}{2}2n−k+1时,可以完全恢复kkk个信息。编码假设qqq是一个素数,Fq\mathbb{F}_qFq是有qqq个元素的有限域,n,k,dn,k,dn,k,d是整数,满足1≤k<n≤q,d=n−k+11\leq k<n\leq
2022-05-02 23:21:34
921
原创 近似公因数问题(Approximate Common Divisor Problem,ACDP)
前言给定两个整数aaa和bbb,存在整数ddd,使得d∣ad|ad∣a并且d∣bd|bd∣b。即ddd同时整除aaa和bbb,我们把ddd叫做aaa和bbb的公因数,满足条件的ddd的最大值,叫做aaa和bbb的最大公因数(GCD)。通过辗转相除法或者错位相减法,可以在多项式时间内求出aaa和bbb的最大公因数。现在,我们考虑,aaa和bbb在传输的过程中出现了一些小错误。得到a′=a+e1a^\prime=a+e_1a′=a+e1和b′=b+e2b^\prime=b+e_2b′=b+e2,那么是
2022-04-29 22:33:15
1135
原创 LEAF:一个联邦学习的基准数据集
LEAF提供了几个联邦学习的数据集,及简单的联邦学习例子,使用的算法是联邦平均算法,其代码是用python写的,机器学习的框架是tensorflow,所以如果要跑上面的例子,注意需要安装的环境,里面有个requirements.txt列出了要下载的python包。其地址为https://talwalkarlab.github.io/leaf/目前有6个数据集,可以选择是否切分为独立同分布(iid)。1、FEMNIST一个图像分类的数据集,识别英文字母和数字。有3550个用户,总共805263个样
2022-04-25 22:11:38
3667
原创 Gmedian(几何中位数或者中位数中心)
Gmedian是Geometric median的简称,也叫做spatial median 或者 L1-median,描述的是到nnn个点的加权距离之和最小的那个点。是平凡中位数的扩展。所谓的中位数,是在一个有序数组的中间位置的那个数。如果是偶数个数,那么是中间位置的两个数的均值。比如{1,2,3}\{1,2,3\}{1,2,3}的中位数为2,{1,2,3,4}\{1,2,3,4\}{1,2,3,4}的中位数为2.5。中位数存在的前提是两个数之间是可比较的,这样才能排序,然后确定中间位置的那个数。但是,
2022-04-24 23:09:22
2051
原创 拜占庭容错机器学习算法之Krum算法
Krum算法是一种基于欧氏距离的拜占庭容错机器学习算法,是一种在分布式机器学习中保证其在具有拜占庭错误时仍然可以收敛的算法。拜占庭错误所谓的拜占庭错误在机器学习中是指,客户端在提交模型更新时,可以提交任意的随机数,或者选择不提交。当然,这有可能是由于机器故障或者网络故障等不可抗力的原因,也可能是由于恶意的用户故意提交错误的更新,来破坏训练过程。算法假设我们具有nnn个客户端{c1,c2,⋯ ,cn}\{c_1,c_2,\cdots,c_n\}{c1,c2,⋯,cn}和一个服务器sss,每个客户
2022-04-23 22:14:44
8471
2
原创 拉格朗日多项式插值及其c++演示
已知nnn个点,寻找一条穿过所有点的曲线的过程叫做插值。如果这nnn个点在某一条多项式的曲线上,那么,寻找这个多项式的解析式的过程就是多项式插值。拉格朗日(Lagrange)插值是一种快速求解穿过nnn个点的多项式的方法。这nnn个点必须满足其横坐标两两不相同,否则不存在过这nnn个点的多项式。而且,满足条件的 n−1n-1n−1次多项式只有一个。最简单的例子就是两点确定一条直线,三个点确定一条抛物线。拉格朗日系数多项式假设nnn个点(x0,y0),(x1,y1),⋯ ,(xn−1,yn−1)(x_
2022-04-21 22:02:36
3302
1
原创 lua调用c函数
环境配置使用lua调用c语言编写的函数,首先要安装c语言的lua库,然后将其编译为动态链接库。在Linux上直接使用apt-get安装的lua是没有自动安装lua库的,需要下载lua的源码编译安装。编写c函数如同main函数是所有c程序的入口程序一样,lua可调用的c语言程序也有一个入口程序叫做luaopen_lib,其中lib是你自己的库的名字。除此之外,每个函数要传入的第一个参数必须是lua_State类型,也就是lua的stack。lua和c之间的参数交换,是通过栈来完成的,也就是函数的第一
2022-04-17 16:20:31
1631
原创 lua连接mysql数据库
环境配置1、安装好lua,我的版本是5.42、下载mysql的c开发库3、下载luarocks用于安装luasocket包和luasql-mysql包4、配置一个本地或者远程的mysql服务器和一个测试的数据库,以及一个测试用户环境配置中的一些注意事项(Linux)1、下载mysql的开发库,通过下面命令下载sudo apt-get install libmysqlclient-dev然后,默认的文件路径是\usr\include\mysql在安装luasql-mysql包之前,首先
2022-04-16 21:13:11
4294
原创 使用Shamir门限方案进行隐私求和
定义Shamir门限方案是用来解决这样一个问题:有nnn个人,共同拥有一个秘密SSS,只要有k(k<n)k(k<n)k(k<n)个人在场,则可以知道这个秘密SSS,反之只要在场的人数少于k,则无法恢复秘密SSS。这样的方案叫做(k,n)(k,n)(k,n)门限方案。由Adi Shamir在1979年的论文How to Share a Secret中提出,该方案的时间复杂度为O(nlog2n)O(n \log ^2n)O(nlog2n).该方案基于多项式插值:给定k个横坐标不同的点(
2022-04-15 22:22:24
1113
原创 四元数(quaternion)
四元数是对实数或者说复数的一个扩展。类似于复数是在实数的基础上添加了一个虚部,四元数在复数的基础上再添加了两个虚部。一般形式的四元数,其实是一个四维的元组(a,bi,cj,dk)(a,bi,cj,dk)(a,bi,cj,dk)其中a,b,c,da,b,c,da,b,c,d是实数,i,j,ki,j,ki,j,k是不同的虚数单位,并且满足i2=j2=k2=ijk=−1i^2=j^2=k^2=ijk=-1i2=j2=k2=ijk=−1.而且{ij=−ji=kjk=−kj=iki=−ik=j\begin{al
2022-04-14 21:45:54
1798
1
原创 lua5.4:长度操作符#详解
在lua中,#叫长度操作符,是一元前缀运算符,用来返回字符串(string)或者表(table)的长度。1、对于字符串来说,其返回值是该字符串占有多少个字节。也就是当字符串中的一个字符占一个字节时,字符串的长度。2、#作用于表时,返回的实际上是表的一个边界(border)。一个表t的边界border,是一个满足下列条件的非负数:(border ==0 or t[border] != nil) and (t[border+1]==nil or border ==math.maxinteger)在lu
2022-04-12 22:43:58
2825
3
原创 lua:获取table的长度
对于一个table来说,要获得其长度,最简单的应该是直接使用“#”操作符。值得注意的是table.getn函数在lua5.+版本已经被移除。当然,如果table是一个数组,那么长度计算一般是正确的(没有值为nil)t={1,2,3,4}print(#t)--this will output 4虽然“#”操作符简单,但是,其计数有时候并不准确。t={[-1]=-1,[0]=0,[1]=1,[2]=2,[4]=5}print(#t)--this will output 4t={[-1]=-1
2022-04-11 23:39:10
11077
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人