格密码的基础概念(2)

格密码入门 文章目录前言Lattice CryptographyCongruential Public Key SystemSubset-sum problems and knapsack cryptosystemsVector SpaceLattice:Definition and PropertyShort vectors in latticesBabai’s AlgorithmCryptosystems based on hard lattice problemsThe GGH public key crypto 阅读详情
AI摘要

本文探讨了闵可夫斯基理论中的BLICHFELD定理、凸体定理及其在n维球体体积中的应用,重点解析了最短向量上界的计算,包括闵可夫斯基第一定理和第二定理,以及这些理论在密码学中的作用。

目录

前言

一. BLICHFELD理论

二. 闵可夫斯基凸体定理

三. n维球体体积结论

四. 闵可夫斯基第一定理

五. 闵可夫斯基第二定理

结论

推荐阅读


前言

本节主要讨论闵可夫斯基提出的关于连续最小值的上界问题。为了简化分析过程,仅讨论满秩的格,将结果类推到非满秩的格也是同理可得。

推荐阅读:

格密码的基础概念(1)-优快云博客

一. BLICHFELD理论

对于任意m维满秩格\Lambda \in R^n和可测量的集合S\in R^n,如果满足:

vol(S)>det(\Lambda)

简单来说就是S区域的面积大于格基本区的面积。那么必定存在z_1,z_2\in S,满足z_1-z_2\in \Lambda。如下图所示:

证明:

将S平移到基本区中,若:

vol(S)>det(\Lambda)

则说明平移后的区域必然存在重合点。具体分析思路如下:

假定B为\Lambda的格基,让x遍历所有格点\Lambda,如下集合构成n维空间R^n的一部分:

x+P(B):=\lbrace x+y\lvert y\in P(B)\rbrace

其中P(B)代表格的基本区。

每个基本区都会有重叠的部分,定义交集如下:

S_x=S\cap(x+P(B))

由此,原集合就被分成了各个小块,如下:

S=\cup _{x\in \Lambda}S_x

体积也对应分成很多小块:

vol(S)=\sum_{x\in\Lambda}vol(S_x)

将每个小集合里面的格点去掉:

\hat{S_x}=S_x-x

单个点对体积是无影响的,所以以下结论依旧成立:

\hat{S_x}\subseteq P(B)

以及:

vol(\hat{S_x})=vol(S_x)

由此可得:

\sum_{x\in\Lambda}vol(\hat{S_x})=\sum_{x\in\Lambda}vol(S_x)=vol(S)>vol(P(B))

由此,一定存在一些格点x,y\in \Lambda, x\not=y,保证:

\hat{S_x}\cap\hat{S_y}\not=0

用z代表\hat{S_x}\cap\hat{S_y}中的点,所以z+x一定包含在S_x\subseteq S,z+y包含在S_y\subseteq S。所以(z+x)-(z+y)=x-y也包含在\Lambda中。

定理证明完毕。由此定理可以类推出接下来要讲的闵可夫斯基凸体定理。

闵可夫斯基凸体定理表明一个足够大的中心对称的凸体一定包含一个非零的格点。中心对称的凸体在格密码中主要有两个应用:

  1. 如果S是中心对称的,当x\in S时,-x\in S;
  2. 如果是个凸体,当x,y \in S且\lambda \in [0,1],不难推出\lambda x+(1-\lambda)y\in S。

中心对称和凸体的前提条件,去掉任何一个,闵可夫斯基凸体定理就会不成立。具体分析我们来看第二个定理。

二. 闵可夫斯基凸体定理

对于任意满秩格\Lambda \in R^n和中心对称凸集S\in R^n,若vol(S)>2^ndet(\Lambda),则S包含非零格点。

证明:

首先将原来的中心对称凸集S\in R^n长度缩短一半,如下:

\hat{S}=\frac{1}{2}S=\lbrace x|2x\in S\rbrace

每个维度的长度都被缩短了一半,整个n维,所以可得:

vol(\hat{S})=2^{-n}vol(S)>det\Lambda

根据BLICHFELD理论,一定存在两个点z_1,z_2\in\hat{S},满足z_1-z_2\in\Lambda且这两点都不是原点。根据我们的设定:

2z_1,2z_2\in S

又因为S是中心对称的,所以-2z_2\in S。另外由于S是凸体,\frac{2z_1-2z_2}{2}=z_1-z_2也在空间S中。

定理证明完毕。

来看一个直观的图形:

此证明的主体思想:将S等比例缩小一半。

三. n维球体体积结论

vol(B(0,r))\geq{(\frac{2r}{\sqrt{2}})}^n

证明:

vol(B(0,r))代表一个球心在原点,半径为r的n维球体的体积。

此球内包含一个长度为\frac{2r}{\sqrt{n}}的立方体。以二维为例,如下图:

所以可得:

\lbrace x\in R^n|\forall i,|x_i|<\frac{r}{\sqrt{n}}\rbrace\subseteq B(0,r)

{(\frac{2r}{\sqrt{2}})}^n代表立方体的体积。易得球的体积大于立方体的体积。

证明完毕。

到此铺垫完毕,接下来我们可引出格最短向量的上界问题。

四. 闵可夫斯基第一定理

对于任意满秩格\Lambda\in R^n,其最短向量长度满足如下:

\lambda_1(\Lambda)\leq\sqrt{n}{(det\Lambda)}^{\frac{1}{n}}

证明:根据格内最短向量的定义(类似SVP问题),球B(0,\lambda_1(\Lambda))内不包含非零格点,根据以上分析可得:

{(\frac{2\lambda_1(\Lambda)}{\sqrt{n}})}^n\leq vol(B(0,\lambda_1(\Lambda)))\leq2^n det(\Lambda)

整理此式子不难得出\lambda_1(\Lambda)的上界。

主题思想:B(0,\lambda_1(\Lambda))不含任何非零格点+闵可夫斯基凸体定理。

对于闵可夫斯基第一定理的理解与分析:

定理中{(det\Lambda)}^\frac{1}{n}看起来可能有些奇怪,实际上有它本身的意义:能够与空间维度联系起来。例如,将格c\Lambda看成原格\Lambda扩大c倍产生。所以易得:

\lambda_1(c\Lambda)=c\lambda_1(\Lambda)

另一方面,在n维度上:

det(c\Lambda)=c^ndet(\Lambda)

等式右边正如我们所理解的那样扩大c倍。由此得出结论,任意秩为n,行列式为1的格,最短向量的上界为\sqrt{n}。

这个上界可以进一步缩小吗?答案是可以的!

举个例子,取一个很小的\epsilon>0,考虑一组格基{(\epsilon,0)}^T,{(0,\frac{1}{\epsilon})},此格的行列式为1,依据闵可夫斯基第一定理可得上界为\sqrt{2},然而实际最短向量为\epsilon。实际上,已经有研究将\sqrt{n}的上界缩小到c\sqrt{n}, c<1。此处讨论的二维可以拓展到多维。

闵可夫斯基第一定理研究的是最短向量,也就是第一个连续最小值\lambda_1。加强版的连续最小值问题可以由闵可夫斯基第二定理说明,以下研究的不只是\lambda_1,考虑的是\lambda_i的几何平均数。

五. 闵可夫斯基第二定理

对于任意满秩格\Lambda\in R^n,其连续最小值最小值满足:

(\prod_{i=1}^n\lambda_i(\Lambda))^{1/n}\leq\sqrt n(det \Lambda)^{1/n}

证明:取x_1,\ldots,x_n\in \Lambda为连续最小值代表的向量,也就是\lVert x_i\rVert=\lambda_i(\Lambda)。令\tilde{x_1},\ldots,\tilde{x_n}代表对应的Gram_Schmidt正交化结果。引入一个椭球体,轴为\tilde{x_1},\ldots,\tilde{x_n}所在的直线,长度为\lambda_1,\ldots,\lambda_n。可得如下椭球体内部空间(不包含边界):

易得,椭球体不包含任何非零格点。以二维为例子,理解为x_1向量在椭圆的边界,x_2向量在椭圆的外部,如下图:

此部分证明该椭球体用T表示时,该椭球体T的内部不包含任何非零格点。

取任意非零的格点y\in\Lambda,让1\leq k\leq n使得k是对应的最大值,且满足如下不等式:

||y||\geq\lambda_k(\Lambda)

如果x_1,\ldots,x_k,y是k+1个线性独立的向量,且要求它们的长度就都小于\lambda_{k+1}(\Lambda)   ,显然是互相矛盾的。所以可得

y\in span(\tilde{x_1},\ldots,\tilde{x_k})=span(x_1,\ldots,x_k) 

综合以上:

由此可得y\notin T。

该椭球体的体积满足如下不等式:

vol(T)<2^ndet\Lambda

令a代表长半轴,b代表短半轴,椭圆的面积计算公式如下:

S=\pi\cdot a \cdot b

再结合闵可夫斯基凸体定理,所以可得: 

将两个不等式结合在一起,所以:

{(\prod_{i=1}^n)\lambda_i(\Lambda)}^{\frac{1}{n}}\leq\sqrt{n}{(det\Lambda)}^{\frac{1}{n}}

 定理证明完毕。

结论

密码技术随着信息表达、传输、处理技术变革而演进。经历了古典密码(密码盘、恩尼格玛密码机),现代密码(AES,RSA),新型密码(抗量子密码,同态密码,物理层密码)。

推荐阅读

如何寻找格上的最短向量:

The shortest vector problem in L2 is NP-hard for randomized reductions. M Ajtai - Proceedings of the thirtieth annual ACM symposium 1998 

如何将最短的向量运用于密码学中:

Public-key cryptosystems from the worst-case shortest vector problem. C Peikert - Proceedings of the forty-first annual ACM symposium 2009.

格理论和密码学(一) 最近在学格,这里开个坑,尽量实训期间搞完 阅读详情

相关推荐

基于密码学中格的基础知识相关介绍(学习笔记)

全同态学习(i春秋课程https://www.ichunqiu.com/course/50439 课时一:基于密码学中格的基础知识相关介绍) 一、什么是格 格是一组由一些线性无关的向量组成的点。其中称为基, 应为整数。 ...

TO 4981

格密码的基础概念(1)

格密码的基础概念前言一.格的定义二. 格的延展空间三. 格的基本区四.格基的判断定理五. 格基的关系六. 格基的变换七. 格的行列式八. Gram-Schmidt正交化结论 前言 首先引入数学上的一个概念“格点”。怎么定义格点呢?格点是n维空间中的一组具有周期性结构的点,如下图所示(二维空间的“格”)。三维空间的“格点”可以出现在一些晶体中,就像一堆整齐叠放的橘子。历史上,从18世纪末开始,拉格朗日、高斯以及后来的闵可夫斯基等数学家已经开始研究“格”这个概念。 近几年,“格”已经成为计算机科学领域中研究

forest_LL的博客 1万+

lattice cryptography基础——格密码学前置知识

这是Simons 2020 年格密码讲座 Lattices: Algorithms, Complexity, and Cryptography Boot Camp 的第 1 讲,所述内容。 主要是格密码的一些前置基本知识,并且对后面要讲的格密码学做个一个启发式。 本篇为学习记录+个人笔记。内容主要包含格的定义和一些基本量,基本困难问题、归约、对偶格以及对后面讲格密码的一些铺垫延伸式问题。

爱学习的米斯特儿江的博客 4702

格密码基础:详解最短向量问题(SVP)以及攻击算法

之前讨论过的闵可夫斯基第一定理表明:任何秩为n的格一定包含一个非零且长度不超过的向量已给出的证明过程实际上不够全面,并没有给出找到此最短向量的准确算法。当然,这其实是一个公开的问题,目前还没有完全准确的算法找到此最短向量。这也是格密码的最底层问题,如果有一天这个问题被解决了,那么格密码的大厦将轰然倒塌。今天我们来看下这个问题为何如此重要。为了讨论此类问题的计算复杂度,可以先定义下格的一种问题:最短向量问题,简写SVP。找出最短向量叫做计算SVP问题计算出最短向量长度:优化SVP问题。

forest_LL的博客 6603

Lattice Cryptography 格密码概述

本文概述了格密码(Lattice Cryptography)的历史发展与数学基础。格理论起源于19世纪高斯和闵可夫斯基的研究,1982年LLL算法的提出标志着算法突破。1996年Ajtai建立了格密码理论框架,2005年Regev提出LWE问题开启了格密码新时代。数学上,格由欧几里得空间中线性无关向量的整数线性组合构成,具有离散性、周期性和线性结构等特性。格基可变换但行列式不变,基本区域具有体积不变性和空间覆盖性。格密码凭借量子安全性成为后量子密码标准(如NIST选定的Kyber和Dilithium),在密

3cH0_Nu1L 's Blog 1065

拯救者R7000P(2021)装双系统Ubuntu20.04 解决联发科MT7921无线网卡在Ubuntu中不能联网

拯救者R7000P(2021)装双系统Ubuntu20.04/Ubuntu18.04 电脑配置:联想拯救者R7000P CPU:AMD R7-5800H GPU:RTX3060-6G 内存:16GB 固态:500G(原装)+500(加装) 1.做系统盘(本文以Ubuntu20.04为例) 1.下载Ubuntu20.04镜像 直接去Ubuntu官网或者一些国内的镜像去下载都可以,这里给出一个网址https://ubuntu.com/download/desktop,根据需要下载自己学要的Ubuntu版本,后缀

qq_41108639的博客 1万+

格密码基础

本文章主要介绍格密码中所使用的一些基本概念,其中包括:格中基本向量,封闭球内的格点数,半稳定格等等。

forest_LL的博客 1943

MIMO-OFDM 通信-感知一体化(ISAC)中的联合优化与性能权衡

本文深入探讨了MIMO-OFDM技术在通信-感知一体化(ISAC)系统中的核心作用与挑战。文章分析了如何通过联合优化资源分配、波束成形与波形设计,在有限的频谱与硬件资源下,实现通信速率与感知精度之间的最佳平衡,并指出了工程实践中面临的同步、干扰等关键难题。

dapp9builder的博客 216

【格密码学】【虚空】格密码学基础学习笔记(上)

这里是我在飞书写给学弟学妹的格密码学基础,用相对通俗易懂的语言介绍了格密码学的基础知识和相关内容,部分内容其实并不是数学上的严谨可证,为了方便阅读将部分概念给通俗化了一些,使得不那么晦涩难懂,毕竟是初学者嘛,理解永远比抠字眼要重要

qq_42557115的博客 1968

Android MediaCodec学习笔记

模块介绍 基本概念 OpenMAX是Khronos Group提出的标准,目标在于创造一个统一的接口,加速大量多媒体资料的处理。OpenMAX分成三层:应用层(Application Layer, AL), 整合层(Integration Layer, IL) 以及开发层(Development Layer, DL)。 OpenMAX (Open Media Acceleration) OpenMAX AL Application Layer ..

kisshine 2358

来!简单了解一下计算机发展史!

​ 1936年,英国数学家阿兰・麦席森・图灵提出了一种抽象的计算模型——图灵机( Turing machine)。图灵机,又称图灵计算机,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。​ 图灵机是一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。

m0_57290404的博客 2908

格密码基础:q-ary格

接着我们可以借助此性质对q-ary垂直格的矩阵A进行扩展,形成新的q-ary垂直格。今天,可以从抽象代数的角度理解格点:m维的格。这个定理的证明需要用到很多线性代数的基础,如果有人感兴趣,后期再补上吧。格密码的基础是研究格点上的困难问题,这种格点使用抽象代数的观点则是。右边代表对矩阵A的变换,看q-ary格的原始定理可直接列出。(在非满秩情况下,格的维度比最大的维度要小)。当然,正常情况下,研究格密码的论文大多是满秩格,也就是常说的。这个是从格点的角度看对偶格,还可以从格基的角度出发。(注意矩阵H的顺序)

forest_LL的博客 2985

PS/2鼠标接口协议

一、PS/2鼠标接口        PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用。物理上的PS/2接口有两种类型的连接器:5脚的DIN和6脚的MINI-DIN。        二、鼠标的接口协议原理             PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。但是在相互传输中 ,主机是拥有总线控制权的

Ant's home 1万+

格密码基础【论文向】

格密码的基础概念(1)-优快云博客本文章将分析论文中最常使用的那些格密码基础知识。首先格基B可以记作:前面讨论的离散高斯分布取样容易吗?已有的研究表明当标准差足够大时,离散高斯分布就很好输出样本:这也揭示出了密码学家很关心标准差所取的大小,由此可得光滑参数的官方定义如下:其中代表对偶格,。同样也说明了光滑参数与标准差s紧密相关。

forest_LL的博客 1780

YOLOv11改进 | 主干/Backbone篇 | 利用目标检测轻量化网络MobileNetV2替换Backbone(yolov11系列全系轻量化)

本文给大家带来的改进机制是,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。其在MobilNetV1的基础上采用反转残差结构和线性瓶颈层。这种结构通过轻量级的深度卷积和线性卷积过滤特征,同时去除狭窄层中的非线性,以维持表征能力。MobileNetV2在性能上和精度上都要比V1版本强很多,其在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中都展现了一定的有效性。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、MobileNetV2的框架原理。

Snu77的博客 2845

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 849

格密码学基础

格密码学(Lattice-based Crypto是现在比较火的一个密码学分支,而且本身拥有抵抗量子计算的特性。在即将到来的NIST后量子时代加密算法标准化讨论中,基于格的加密体系就是其中的一个选择之一。其实想要理解格密码学非常简单,只需要一些最基本的线性代数知识。 格密码学就是基于格(Lattice)和格上的一些问题而定义的一套密码学体系。 关于基础数学知识及入门可参考:https://zhuanlan.zhihu.com/p/150920501 格密码 线性独立空间上有集合 v1,⋯ ,vn∈Rnv_1

m0_57291352的博客 3706

13、深入理解 Microsoft 365 的安全与合规概念

本文深入探讨了 Microsoft 365 的安全与合规概念,涵盖文档存储、文件共享、审计、保留、eDiscovery、分类和保护以及网络等多个关键方面。通过合理配置这些功能,组织可以更好地管理和保护其数据资源,满足法规要求,并提升工作效率。文章还提供了最佳实践建议及流程图,帮助读者全面理解 Microsoft 365 的安全架构和管理策略。

k8s6orchestrator的博客 212

【CTF-Crypto】格密码基础(例题较多,非常适合入门!)

格密码基础入门,有较多例题,应用相应的定理,便于理解格密码其中的原理,希望对刚入门格密码的师傅们有帮助

jayq1的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

格密码初学笔记

@格密码学习笔记 从初学到脱发 格的基础知识 定义1: 格(Lattice) 给定nnn个线性无关向量b1,b2,…,bn∈Rmb_1,b_2,\dots, b_n\in \mathbb{R}^mb1​,b2​,…,bn​∈Rm,由该组向量产生的格被定义为, L(1,b2,…,bn)={∑xibi∣xi∈Z}\mathcal{L}(_1,b_2,\dots, b_n)=\{\sum x_ib_i|x_i\in\mathbb{Z}\}L(1​,b2​,…,bn​)={∑xi​bi​∣xi​∈Z} 我们通常将向

qq_39290054的博客 2646

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

格密码基础(1)

格密码(1) 1.介绍 格密码是一种将格理论用于公钥密码系统构造的技术。格密码系统主要有以下优势: 抗量子攻击:这是格密码相对于传统的公钥密码学最主要的优势,传统的公钥密码学在量子计算机的环境下安全性是没有保证的。传统的公钥密码系统大部分都是以大整数分解以及离散对数问题作为底层的安全性保证的(密码学的本质实质上是利用一个数学上可证明非常困难的问题来达到安全的目的)。然而,Shor在1997年给出了一种可以有效解决这些问题的量子算法(以前被认为是非常困难的问题,现在变得不那么困难了)。所以,因为能够可以有效

CCCYYY090的博客 4296

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

10、格密码-抗量子计算

格密码

安全学习笔记 6504

CTF-密码学题目解析之格密码

CTF 密码学 格密码 出题思路

攻防SRC 3740

格密码学习笔记(一)

格密码学习笔记(一) \qquad随着当下量子计算机的研制的迅速进展,量子算法亦是相应得以巨大突破。在量子计算模型下,经典数论假设的密码体系(如大整数分解,计算有限域/椭圆曲线上的离散对数问题等),存在多项式时间(PPT)的量子算法,换而言之,经典数论密码体系受到了极大的冲击,将有可能成为旧时代的眼泪。因此,能够抵抗量子计算机攻击的密码——“后量子”或“抗量子”密码便应运而生。 \qquad目前,...

weixin_43255133的博客 2万+

格密码学习,抽代基础学习(一)

集合论 集合:若干个固定事物的全体称为一个集合 常用大写字母A、B、C等表示集合 定义:组成一个集合的事务称为该集合的元素(简称元) 常用小写字母a、b、c表示集合的元素 a∈A:a是集合A的元素 集合中元素的特征: 1、确定性 2、互异性 3、无序性 集合的分类: 1、有限集合 2、无限集合 3、空集(没有任何元素) 集合的表示方法 列举法:A={1,2,3,,,n,,,} 描述法:给出集合的元素具有的特征性质 A={a|a具有的性质} 集合间的关系: 相等(集合中的元素完全相同) 包含(集合B的元素全是

Annalovecoding的博客 2537

Crypto--格密码(一)

记录格密码的一些题

刘十三t的博客 4789
上一篇: 基于MATLAB的数值微分与拟合多项式求导
下一篇: 基于MATLAB的数值积分问题求解(附完整代码与例题)
唠嗑!
唠嗑! 优质创作者: 信息安全技术领域 优质创作者: 信息安全技术领域
博客等级 码龄5年 3万+粉丝 169原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值