密码学

https://github.com/microsoft/SEAL.git一、编译最近git有问题,最好翻墙,而且后面编译时候好像也要下点东西,如果不会改cmake的话,翻墙省不少功夫。。我是直接在Clion中以cmake项目的方式打开的。手动编译如下:cmake-S.-Bbuildcmake--buildbuildsudocmake--installbuild二、SEAL库介绍MicrosoftSEAL提供了两种不同的同态加密方案,它们具有非常不同的属性。BFV方案允许在加密的整数上执行模运算。CKKS方案允许对加密的实数或复数进行加法和乘法,但只能得到近似的结果。在诸如汇总加密的真实数字、评估加密数据上的机器学习模型或计算加密位置的距离等应用程序中,ckk将是最佳选择。对于需要精确值的应用程序,BFV方案是惟一的选择。1.BFV代码介绍//较大的poly_modulus_degree使密文的大小更大,所有的操作都更慢,但允许更复杂的加密计算。size_tpoly_modulus_degree=4096;parms.set_poly_modulus_degree(poly_modulus_degree);//更大的coeff_模数意味着更大的噪声预算,因此更加密的计算能力。coeff_modulus_degree确定了coeff_modul_modules总比特长度的上限parms.set_coeff_modulus(CoeffModulus::BFVDefault(poly_modulus_degree));//明文模量决定了明文数据类型的大小和乘法中噪声预算的消耗。parms.set_plain_modulus(1024);//构建一个SEALContext对象了。这是一个繁重的类,它检查我们刚刚设置的参数的有效性和属性。autocontext=SEALContext::Create(parms);这个库是基于公钥加密的方案,本来就是想找这个的,之前在github看tfhe的代码,是基于对称加密的,这个团队论文里写了,然而没实现emm。KeyGeneratorkeygen(context);PublicKeypublic_key=keygen.public_key();SecretKeysecret_key=keygen.secret_key();然后就是通过evaluator计算器调用内部函数的过程了evaluator.square(x_encrypted,x_sq_plus_one);//平方x_encrypted,刷新入x_sq_plus_onePlaintextplain_one("1");//添加明文1evaluator.add_plain_inplace(x_sq_plus_one,plain_one);evaluator.add_plain(x_encrypted,plain_one,x_plus_one_sq);evaluator.square_inplace(x_plus_one_sq);Plaintextplain_two("2");evaluator.multiply_plain_inplace(x_sq_plus_one,plain_two);evaluator.multiply(x_sq_plus_one,x_plus_one_sq,encrypted_result);以上基本就是加和乘的常用操作了,最后还有就是要判断噪音消耗,噪声预算已经达到0,这意味着不能期望解密给出正确的结果这个函数:decryptor.invariant_noise_budget(encrypted_result)解决办法:“Relinearization”是一种将密文的大小乘回初始大小2的操作。因此,在下一次乘法之前对一个或两个输入密文进行再初始化,可以对噪声增长和性能产生巨大的积极影响,即使再初始化本身有很大的计算成本。只可能将大小为3的密文重新初始化为大小为2的密文,因此用户通常希望在每次乘法之后重新初始化,以将密文大小保持为2。RelinKeysrelin_keys;keygen.create_relin_keys(relin_keys);evaluator.relinearize_inplace(x_squared,relin_keys);

2021-3-22 671 0
2021-3-18 978 0
区块链学习

一、tcp和udp的区别,如何设计可靠udp传输转载自:https://www.cnblogs.com/williamjie/p/11133180.htmlUDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。1、添加seq/ack机制,确保数据发送到对端2、添加发送和接收缓冲区,主要是用户超时重传。3、添加超时重传机制。详细说明:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。二、RSA算法设计三、https过程HTTP的请求过程:1、TCP建立连接后,客户端会发送报文给服务端;2、服务端接收报文并作出响应;3、客户端收到响应后解析给用户;HTTPS的请求过程:1、客户端发送请求到服务端;2、服务器返回证书和公钥;3、客户端验证证书和公钥的有效性,如果有效,则生成对称密钥并使用公钥加密发送到服务端;4、服务端使用私钥解密报文,并使用收到的对称密钥加密报文,发送到客户端;5、客户端使用对称密钥解密报文;6、SSL加密建立四、tendermint共识五、以太坊EVM是否熟悉