㈠ EM算法详解
作为N大机器学习方法的一员,EM算法在各种书籍、博客、网上视频上被描述或者介绍,每次看完总感觉很多地方含糊不清,不能让一个初学者(有一定统计概率基础)接受。最近再B站上,看到 徐亦达老师的课程 ,EM算法这块讲解易于理解和接受,再结合PRML一书的关于混合模型和EM章节内容,对整个EM算法从具体的原理上面有了更深入的理解。
在下文中,更多的是通过公式推导和一些文字说明来梳理EM算法,尽量做到大家一看就明白。
极大似然估计是概率统计中,估计模型参数的一种方法,如果对似然概念以及极大似然估计的概念不理解,可参考维基网络 https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1
这里,我们给出一个一维高斯函数的例子。如图1所示,一维空间里面离散分布的样本点其分布特点可以看成是一种高斯分布。那这些样本的高斯分布函数参数怎么求解呢?可以通过极大似然估计获得。
假设我们获取图1中数据样本集合为 ,其分布函数假设为一维高斯分布,即:
那所有数据的联合概率,即似然函数为:
对等式两边求log,即log-likelihood:
分别对参数求导:
可以得到:
通过上述方法,就可以得到基于样本数据和假设分布函数模型情况下,得到样本数据的分布函数。
从图2所示中,如果样本数据分布式蓝色点和橙色点的集合,如果依然用高斯分布去进行最大似然估计,得到的分布模型自然是不合适的。很显然,样本数据分布存在两个密集区(蓝色点和橙色点),如果能通过一种方法,确认样本数据里面的蓝色点和橙色点,然后分别对蓝色点集合进行一个高斯估计,对橙色点集进行另外一个高斯估计,两个高斯混合到一起,是不是比单个高斯能更好的匹配样本数据的分布情况。这种情况下的分布函数就是高斯混合模型。
这里我们先直接给出高斯混合模型的分布函数(多维):
在图2例子中,提到如果给每一个数据样本能够先进行分类,即确定属于哪一个集中的簇中,就能比较容易的进行混合模型的求解。这说明了什么呢?我们可以理解,原始样本数据是不完全的(incomplete),引入一个K维的二值随机变量 ,这个变量采用"1-of-K"的表示方法,即K维中,只有一维是1,其余所有元素等于0。那么每一个样本数据,即有数据特征 ,再匹配一个分配变量 ,就可以将图2过程完整描述,即我们认为 和 联合在一起才是完全的(complete)。
数学表示上,我们利用边缘概率分布 和条件概率分布 定义联合概率分布 .
的边缘概率分布根据混合系数 进行赋值,即 ,使得边缘概率分布是合法,那么:
类似的,在给定 的一个特定的值,即针对某一簇的情况, 的条件概率分布是一个高斯分布,即
那么根据贝叶斯公式得到高斯混合模型:
由于我们只能观察样本数据 ,无法直接获取每个数据的分配变量 ,可理解 为潜在变量(latent)
依据极大似然函数的求解方法,我们可以对高斯混合模型写出数据的对数似然函数:
由于对数函数内部出现求和,这种情况是没有办法通过求导等于0的方式获取估计参数的解析解的。这种情况下,就需要用到EM算法,通过迭代方式获取估计参数。下面我们先从一般性问题上进行EM算法的理论描述,然后再利用EM算法推导高斯混合模型的计算方法。
EM算法叫做期望最大化方法,首先我们给出EM算法一般性结论或者说步骤,其具体分为两步,即E-step和M-step。
EM算法的步骤,通过高斯混合模型可以直观理解记忆。 是什么意思呢,其含义是在给定数据样本的情况下,潜在变量的概率情况。也就是说在高斯混合模型中,给定样本数据,我们推测样本属于哪一个高斯簇的概率情况。在确定分配情况后,每一个簇都用高斯进行估计,衡量估计好还是不好,用期望形式表示。这样可以帮助理解和记忆Q的定义。那EM算法怎么证明其收敛性呢?
我们要保证:
这样每次迭代可以使得似然函数随着参数变大,一直到似然函数不再增大或满足其他终止条件止。
那怎么保证呢?首先,利用贝叶斯公式有:
两边同时取log
然后两边同时用 求期望,可以得:
等式左边 和 没有关系, 是概率密度函数,积分是1,所以等式左边依然是 .
等式右边第一项就是E-step里面的Q函数,第二项我们记做H函数,则:
要保证 ,首先 ,那么是不是保证 满足,就一定有 ?答案是肯定的。(说明一下,这里面的H和Q函数都是关于 的函数,每一次迭代 是已知的,他不是变量)
那下面只要证明 就可以了。
因此可以得到 ,则整个EM算法的收敛性证毕。
注:这里用到了Jessian不等式,如果函数是convex的,则有函数的期望大于期望的函数,即 .
上述EM算法的证明,有一些技巧性,而这些技巧性有没有一种是在已知结论基础上硬凑的感觉呢,尤其是用 去求期望,就是为了去构造Q函数。那有没有更好的解释或者更为直观的方式来得到相同的结论呢?答案是有的。
首先,仍然用到:
我们稍微变个型,假设一个概率密度函数 :
两边同时用 求期望:
其中等式右边第一项,我们记做 ,可以称为ELOB,EvidenceLowerBound,第二项是 和 的KL散度。
如图4所示,当我固定参数 时候,ELOB就是关于 的泛函(只听过没学过,可理解为函数的函数),那ELOB的上界是什么呢?那首先要理解KL散度,KL散度是衡量两个概率分布之间的差异性,如果两个分布没有差异,则KL散度等于0,如果有差异则大于0,所以KL散度的最小值就是0,那ELOB的上界就是此刻的似然函数。
在EM算法中,当前迭代时,参数 ,则对于E-step,我们需要使得ELOB最大,即KL散度为0,如图5所示,其中 为 。此时,
对于M-Step,我们是需要得到新的估计参数,这个时候,固定 ,重新获得ELOB的最大值,这个时候的ELOB是什么样的呢?
右边第二项没有参数 ,所以固定 最大化ELOB,就等于最大化第一项,而第一项是什么呢?就是 函数。
如图6所示,我们最大化 函数,也就是最大化此次迭代的ELOB。在新的参数下, ,此刻 不变,所以和新的 在没有达到局部(或者全局)极大值的情况下,是两个不同的概率分布,即二者KL散度是大于0的,那此刻的似然函数等于此刻的KL散度加上此刻的ELOB,自然是有 。
从ELOB和KL散度的层面可以更好的理解EM算法的迭代过程。
PRML一书中,有图7所示的示意图,能比较形象的说明,EM算法的迭代过程。
图7中,红色曲线表示(不完整数据)对数似然函数,它的最大值是我们想要得到的。我们首先选择某个初始的参数值 ,然后在第一个E步骤中,我们计算潜在变量上的后验概率分布,得到了 的一个更小的下界,它的值等于在 处的对数似然函数值,用蓝色曲线表示。注意,下界与对数似然函数在 处以切线的方式连接,因此两条曲线的梯度相同。这个界是一个凹函数,对于指数族分布的混合分布来说,有唯一的最大值。在M步骤中,下界被最大化,得到了新的值 ,这个值给出了比 处更大的对数似然函数值。接下来的E步骤构建了一个新的下界,它在 处与对数似然函数切线连接,用绿色曲线表示。以这样的方式不停迭代,直到满足条件。
了解了EM算法,我们来详细推导高斯混合模型的E步和M步的内容。这一部分内容来自徐亦达老师的课件。由于公式太多了,我就放一些截图,供大家一起学习和参考。
徐亦达老师的课件在: https://github.com/roboticcam/machine-learning-notes/blob/master/em.pdf
后续关于EM算法的应用会举例以下几方面内容
(1)Kmeans和高斯混合模型
(2)EM算法应用之贝叶斯线性回归
(3)EM算法应用之PLSA
(4)EM算法应用之缺失数据参数估计问题
㈡ 周易中的具体算法~~~
50根取出一根不用。(还有49根。然后分为两分,再从着两份中取出一根放在一边。这两分应该总共48根,然后这两份分别除4后的余数。一边为1的话。另一边一定为3,一边为2的话。另一边一定为2,一边无余的话,另一边也无余。这样将两边的余数放到一边。将手里的两份合并),这就叫一易,然后再重复上述括号内过程。取一分二除四。如此三易,将剩下的合并后除4,得到的必定为6,7,8,9,这样就得到了一爻。如此十八易得一卦。
注:如果余数无为4,也要一边取出4根
㈢ 谁帮我介绍下加密对称算法
A.对称加密技术 a. 描述 对称算法(symmetric algorithm),有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的。所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。 b.特点分析 对称加密的优点在于算法实现后的效率高、速度快。 对称加密的缺点在于密钥的管理过于复杂。如果任何一对发送方和接收方都有他们各自商议的密钥的话,那么很明显,假设有N个用户进行对称加密通信,如果按照上述方法,则他们要产生N(N-1)把密钥,每一个用户要记住或保留N-1把密钥,当N很大时,记住是不可能的,而保留起来又会引起密钥泄漏可能性的增加。常用的对称加密算法有DES,DEA等。 B.非对称加密技术 a.描述 非对称加密(dissymmetrical encryption),有时又叫公开密钥算法(public key algorithm)。这种加密算法是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以又叫做公开密钥算法是由于加密密钥可以公开,即陌生人可以得到它并用来加密信息,但只有用相应的解密密钥才能解密信息。在这种加密算法中,加密密钥被叫做公开密钥(public key),而解密密钥被叫做私有密钥(private key)。 b.特点分析 非对称加密的缺点在于算法实现后的效率低、速度慢。 非对称加密的优点在于用户不必记忆大量的提前商定好的密钥,因为发送方和接收方事先根本不必商定密钥,发放方只要可以得到可靠的接收方的公开密钥就可以给他发送信息了,而且即使双方根本互不相识。但为了保证可靠性,非对称加密算法需要一种与之相配合使用的公开密钥管理机制,这种公开密钥管理机制还要解决其他一些公开密钥所带来的问题。常用的非对称加密算法有RSA等。 (3) 关于密码技术 密码技术包括加密技术和密码分析技术,也即加密和解密技术两个方面。在一个新的加密算法的研发需要有相应的数学理论证明,证明这个算法的安全性有多高,同时还要从密码分析的角度对这个算法进行安全证明,说明这个算法对于所知的分析方法来说是有防范作用的。 三、对称加密算法分析 对称加密算法的分类 对称加密算法可以分成两类:一类为序列算法(stream algorithm):一次只对明文中单个位(有时为字节)加密或解密运算。另一类为分组算法(block algorithm):一次明文的一组固定长度的字节加密或解密运算。 现代计算机密码算法一般采用的都是分组算法,而且一般分组的长度为64位,之所以如此是由于这个长度大到足以防止分析破译,但又小到足以方便使用。 1.DES加密算法 (Data Encryption Standard )
(1) 算法简介
1973 年 5 月 15 日,美国国家标准局 (NBS) 在“联邦注册”上发布了一条通知,征求密码算法,用于在传输和存储期间保护数据。IBM 提交了一个候选算法,它是 IBM 内部开发的,名为 LUCIFER。在美国国家安全局 (NSA) 的“指导”下完成了算法评估之后,在 1977 年 7 月 15 日,NBS 采纳了 LUCIFER 算法的修正版作为新的数据加密标准。
原先规定使用10年,但由于新的加密标准还没有完成,所以DES算法及其的变形算法一直广泛的应用于信息加密方面。 (2) 算法描述 (包括加密和解密)
Feistel结构(画图说明)。
DES 的工作方式:可怕的细节
DES 将消息分成 64 位(即 16 个十六进制数)一组进行加密。DES 使用“密钥”进行加密,从符号的角度来看,“密钥”的长度是 16 个十六进制数(或 64 位)。但是,由于某些原因(可能是因为 NSA 给 NBS 的“指引”),DES 算法中每逢第 8 位就被忽略。这造成密钥的实际大小变成 56 位。编码系统对“强行”或“野蛮”攻击的抵抗力与其密钥空间或者系统可能有多少密钥有直接关系。使用的位数越多转换出的密钥也越多。密钥越多,就意味着强行攻击中计算密钥空间中可能的密钥范围所需的时间就越长。从总长度中切除 8 位就会在很大程度上限制了密钥空间,这样系统就更容易受到破坏。
DES 是块加密算法。这表示它处理特定大小的纯文本块(通常是 64 位),然后返回相同大小的密码块。这样,64 位(每位不是 0 就是 1)有 264 种可能排列,DES 将生成其中的一种排列。每个 64 位的块都被分成 L、R 左右两块,每块 32 位。
DES 算法使用以下步骤:
1. 创建 16 个子密钥,每个长度是 48 位。根据指定的顺序或“表”置换 64 位的密钥。如果表中的第一项是 "27",这表示原始密钥 K 中的第 27 位将变成置换后的密钥 K+ 的第一位。如果表的第二项是 36,则这表示原始密钥中的第 36 位将变成置换后密钥的第二位,以此类推。这是一个线性替换方法,它创建了一种线性排列。置换后的密钥中只出现了原始密钥中的 56 位。
2. 接着,将这个密钥分成左右两半,C0 和 D0,每一半 28 位。定义了 C0 和 D0 之后,创建 16 个 Cn 和 Dn 块,其中 1<=n<=16。每一对 Cn 和 Dn 块都通过使用标识“左移位”的表分别从前一对 Cn-1 和 Dn-1 形成,n = 1, 2, ..., 16,而“左移位”表说明了要对哪一位进行操作。在所有情况下,单一左移位表示这些位轮流向左移动一个位置。在一次左移位之后,28 个位置中的这些位分别是以前的第 2、3……28 位。
通过将另一个置换表应用于每一个 CnDn 连接对,从而形成密钥 Kn,1<=n<=16。每一对有 56 位,而置换表只使用其中的 48 位,因为每逢第 8 位都将被忽略。
3. 编码每个 64 位的数据块。
64 位的消息数据 M 有一个初始置换 IP。这将根据置换表重新排列这些位,置换表中的项按这些位的初始顺序描述了它们新的排列。我们以前见过这种线性表结构。
使用函数 f 来生成一个 32 位的块,函数 f 对两个块进行操作,一个是 32 位的数据块,一个是 48 位的密钥 Kn,连续迭代 16 次,其中 1<=n<=16。用 + 表示 XOR 加法(逐位相加,模除 2)。然后,n 从 1 到 16,计算 Ln = Rn-1 Rn = Ln-1 + f(Rn-1,Kn)。即在每次迭代中,我们用前一结果的右边 32 位,并使它们成为当前步骤中的左边 32 位。对于当前步骤中的右边 32 位,我们用算法 f XOR 前一步骤中的左边 32 位。
要计算 f,首先将每一块 Rn-1 从 32 位扩展到 48 位。可以使用选择表来重复 Rn-1 中的一些位来完成这一操作。这个选择表的使用就成了函数 f。因此 f(Rn-1) 的输入块是 32 位,输出块是 48 位。f 的输出是 48 位,写成 8 块,每块 6 位,这是通过根据已知表按顺序选择输入中的位来实现的。
我们已经使用选择表将 Rn-1 从 32 位扩展成 48 位,并将结果 XOR 密钥 Kn。现在有 48 位,或者是 8 组,每组 6 位。每组中的 6 位现在将经历一次变换,该变换是算法的核心部分:在叫做“S 盒”的表中,我们将这些位当作地址使用。每组 6 位在不同的 S 盒中表示不同的地址。该地址中是一个 4 位数字,它将替换原来的 6 位。最终结果是 8 组,每组 6 位变换成 8 组,每组 4 位(S 盒的 4 位输出),总共 32 位。
f 计算的最后阶段是对 S 盒输出执行置换 P,以得到 f 的最终值。f 的形式是 f = P(S1(B1)S2(B2)...S8(B8))。置换 P 根据 32 位输入,在以上的过程中通过置换输入块中的位,生成 32 位输出。
解密只是加密的逆过程,使用以上相同的步骤,但要逆转应用子密钥的顺序。DES 算法是可逆的
(2) 算法的安全性分析
在知道一些明文和密文分组的条件下,从理论上讲很容易知道对DES进行一次穷举攻击的复杂程度:密钥的长度是56位,所以会有 种的可能的密钥。
在1993年的一年一度的世界密码大会上,加拿大北方电信公司贝尔实验室的 Michael Wiener 描述了如何构造一台专用的机器破译DES,该机器利用一种每秒能搜索5000万个密钥的专用芯片。而且此机器的扩展性很好,投入的经费越多则效率越高。用100万美元构造的机器平均3.5小时就可以破译密码。
如果不用专用的机器,破译DES也有其他的方法。在1994年的世界密码大会上,M.Matsui 提出一种攻克DES的新方法--"线性密码分析"法。它可使用平均 个明文及其密文,在12台HP9000/735工作站上用此方法的软件实现,花费50天时间完成对DES的攻击。
如前所述DES作为加密算法的标准已经二十多年了,可以说是一个很老的算法,而在新的加密算法的国际标准出现之前,许多DES的加固性改进算法仍有实用价值,在本文的3.4节详细的描述,同时考虑的以上所述DES的安全性已受到了威胁。
(4) 算法的变体 三重DES(TDEA),使用3个密钥,执行3次DES算法:
加密:C = Ek3[Dk2[Ek1[P]]] 解密:P = Dk1[Ek2[Dk3[C]]]
特点:安全性得到增强,但是速度变慢。
2.AES
自 20 世纪 70 年代以来一直广泛使用的“数据加密标准”(DES) 日益显出衰老的痕迹,而一种新的算法 -- Rijndael -- 正顺利地逐渐变成新标准。这里,Larry Loeb 详细说明了每一种算法,并提供了关于为什么会发生这种变化的内幕信息。
DES 算法是全世界最广泛使用的加密算法。最近,就在 2000 年 10 月,它在其初期就取得的硬件方面的优势已经阻碍了其发展,作为政府加密技术的基础,它已由“高级加密标准”(AES) 中包含的另一种加密算法代替了。AES 是指定的标准密码系统,未来将由政府和银行业用户使用。AES 用来实际编码数据的加密算法与以前的 DES 标准不同。我们将讨论这是如何发生的,以及 AES 中的 Rijndael 算法是如何取代 DES 的算法的。
“高级加密标准”成就
但直到 1997 年,美国国家标准技术局 (NIST) 才开始打着 AES 项目的旗帜征集其接任者。1997 年 4 月的一个 AES 研讨会宣布了以下 AES 成就的最初目标:
• 可供政府和商业使用的功能强大的加密算法
• 支持标准密码本方式
• 要明显比 DES 3 有效
• 密钥大小可变,这样就可在必要时增加安全性
• 以公正和公开的方式进行选择
• 可以公开定义
• 可以公开评估
AES 的草案中最低可接受要求和评估标准是:
A.1 AES 应该可以公开定义。
A.2 AES 应该是对称的块密码。
A.3 AES 应该设计成密钥长度可以根据需要增加。
A.4 AES 应该可以在硬件和软件中实现。
A.5 AES 应该 a) 可免费获得。
A.6 将根据以下要素评价符合上述要求的算法:
1. 安全性(密码分析所需的努力)
2. 计算效率
3. 内存需求
4. 硬件和软件可适用性
5. 简易性
6. 灵活性
7. 许可证需求(见上面的 A5)
Rijndael:AES 算法获胜者
1998年8月20日NIST召开了第一次AES侯选会议,并公布了15个AES侯选算法。经过一年的考察,MARS,RC6,Rijndael,Serpent,Twofish共5种算法通过了第二轮的选拔。2000 年 10 月,NIST 选择 Rijndael(发音为 "Rhine dale")作为 AES 算法。它目前还不会代替 DES 3 成为政府日常加密的方法,因为它还须通过测试过程,“使用者”将在该测试过程后发表他们的看法。但相信它可以顺利过关。
Rijndael 是带有可变块长和可变密钥长度的迭代块密码。块长和密钥长度可以分别指定成 128、192 或 256 位。
Rijndael 中的某些操作是在字节级上定义的,字节表示有限字段 GF(28) 中的元素,一个字节中有 8 位。其它操作都根据 4 字节字定义。
加法照例对应于字节级的简单逐位 EXOR。
在多项式表示中,GF(28) 的乘法对应于多项式乘法模除阶数为 8 的不可约分二进制多项式。(如果一个多项式除了 1 和它本身之外没有其它约数,则称它为不可约分的。)对于 Rijndael,这个多项式叫做 m(x),其中:m(x) = (x8 + x4 + x3 + x + 1) 或者十六进制表示为 '11B'。其结果是一个阶数低于 8 的二进制多项式。不像加法,它没有字节级的简单操作。
不使用 Feistel 结构!
在大多数加密算法中,轮回变换都使用着名的 Feistel 结构。在这个结构中,中间 State 的位部分通常不做更改调换到另一个位置。(这种线性结构的示例是我们在 DES 部分中讨论的那些表,即使用固定表的形式交换位。)Rijndael 的轮回变换不使用这个古老的 Feistel 结构。轮回变换由三个不同的可逆一致变换组成,叫做层。(“一致”在这里表示以类似方法处理 State 中的位。)
线性混合层保证了在多个轮回后的高度扩散。非线性层使用 S 盒的并行应用,该应用程序有期望的(因此是最佳的)最差非线性特性。S 盒是非线性的。依我看来,这就 DES 和 Rijndael 之间的密钥概念差异。密钥加法层是对中间 State 的轮回密钥 (Round Key) 的简单 EXOR,如以下所注。
Rijndael算法
加密算法
Rijndael算法是一个由可变数据块长和可变密钥长的迭代分组加密算法,数据块长和密钥长可分别为128,192或256比特。
数据块要经过多次数据变换操作,每一次变换操作产生一个中间结果,这个中间结果叫做状态。状态可表示为二维字节数组,它有4行,Nb列,且Nb等于数据块长除32。如表2-3所示。
a0,0 a0,1 a0,2 a0,3 a0,4 a0,5
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5
数据块按a0,0 , a1,0 , a2,0 , a3,0 , a0,1 , a1,1 , a2,1 , a3,1 , a0,2…的顺序映射为状态中的字节。在加密操作结束时,密文按同样的顺序从状态中抽取。
密钥也可类似地表示为二维字节数组,它有4行,Nk列,且Nk等于密钥块长除32。算法变换的圈数Nr由Nb和Nk共同决定,具体值列在表2-4中。
表3-2 Nb和Nk决定的Nr的值
Nr Nb = 4 Nb = 6 Nb = 8
Nk = 4 10 12 14
Nk = 6 12 12 14
Nk = 8 14 14 14
3.2.1圈变换
加密算法的圈变换由4个不同的变换组成,定义成:
Round(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
MixColumn(State);
AddRoundKey(State,RoundKey); (EXORing a Round Key to the State)
}
加密算法的最后一圈变换与上面的略有不同,定义如下:
FinalRound(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
AddRoundKey(State,RoundKey);
}
ByteSub变换
ByteSub变换是作用在状态中每个字节上的一种非线形字节变换。这个S盒子是可逆的且由以下两部分组成:
把字节的值用它的乘法逆替代,其中‘00’的逆就是它自己。
经(1)处理后的字节值进行如下定义的仿射变换:
y0 1 1 1 1 1 0 0 0 x0 0
y1 0 1 1 1 1 1 0 0 x1 1
y2 0 0 1 1 1 1 1 0 x2 1
y3 0 0 0 1 1 1 1 1 x3 0
y4 = 1 0 0 0 1 1 1 1 x4 + 0
y5 1 1 0 0 0 1 1 1 x5 0
y6 1 1 1 0 0 0 1 1 x6 1
y7 1 1 1 1 0 0 0 1 x7 1
ShiftRow变换
在ShiftRow变换中,状态的后3行以不同的移位值循环右移,行1移C1字节,行2移C2字节,行3移C3字节。
移位值C1,C2和C3与加密块长Nb有关,具体列在表2-5中:
表3-3 不同块长的移位值
Nb C1 C2 C3
4 1 2 3
MixColumn变换
在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式与一固定多项式c(x)相乘然后模多项式x4+1,其中c(x)为:
c(x) =‘03’x3 + ‘01’x2 + ‘01’x + ‘02’
圈密钥加法
在这个操作中,圈密钥被简单地使用异或操作按位应用到状态中。圈密钥通过密钥编制得到,圈密钥长等于数据块长Nb。
在这个表示法中,“函数”(Round, ByteSub, ShiftRow,...) 对那些被提供指针 (State, RoundKey) 的数组进行操作。ByteSub 变换是非线性字节交换,各自作用于每个 State 字节上。在 ShiftRow 中,State 的行按不同的偏移量循环移位。在 MixColumn 中,将 State 的列视为 GF(28) 多项式,然后乘以固定多项式 c( x ) 并模除 x4 + 1,其中 c( x ) = '03' x3 + '01' x2+ '01' x + '02'。这个多项式与 x4 + 1 互质,因此是可逆的。
轮回密钥通过密钥计划方式从密码密钥 (Cipher Key) 派生而出。它有两个组件:密钥扩展 (Key Expansion) 和轮回密钥选择 (Round Key Selection)。轮回密钥的总位数等于块长度乘以轮回次数加 1(例如,块长度等于 128 位,10 次轮回,那么就需要 1408 个轮回密钥位)。
密码密钥扩充成扩展密钥 (Expanded Key)。轮回密钥是通过以下方法从这个扩展密钥中派生的:第一个轮回密钥由前 Nb(Nb = 块长度)个字组成,第二个由接着的 Nb 个字组成,以此类推。
加密算法由以下部分组成:初始轮回密钥加法、Nr-1 个轮回和最后一个轮回。在伪 C 代码中:
Rijndael(State,CipherKey)
{
KeyExpansion(CipherKey,ExpandedKey);
AddRoundKey(State,ExpandedKey);
For( i=1 ; i<Nr ; i++ ) Round(State,ExpandedKey + Nb*i);
FinalRound(State,ExpandedKey + Nb*Nr).
}
如果已经预先执行了密钥扩展,则可以根据扩展密钥指定加密算法。
Rijndael(State,ExpandedKey)
{
AddRoundKey(State,ExpandedKey);
For( i=1 ; i<Nr ; i++ ) Round(State,ExpandedKey + Nb*i);
FinalRound(State,ExpandedKey + Nb*Nr);
}
由于 Rijndael 是可逆的,解密过程只是颠倒上述的步骤。
最后,开发者将仔细考虑如何集成这种安全性进展,使之成为继 Rijndael 之后又一个得到广泛使用的加密算法。AES 将很快应一般商业团体的要求取代 DES 成为标准,而该领域的发展进步无疑将追随其后。
3.IDEA加密算法 (1) 算法简介 IDEA算法是International Data Encryption Algorithmic 的缩写,意为国际数据加密算法。是由中国学者朱学嘉博士和着名密码学家James Massey 于1990年联合提出的,当时被叫作PES(Proposed Encryption Standard)算法,后为了加强抵抗差分密码分,经修改于1992年最后完成,并命名为IDEA算法。 (2) 算法描述 这个部分参见论文上的图 (3) 算法的安全性分析 安全性:IDEA的密钥长度是128位,比DES长了2倍多。所以如果用穷举强行攻击的话, 么,为了获得密钥需要 次搜索,如果可以设计一种每秒能搜索十亿把密钥的芯片,并且 采用十亿个芯片来并行处理的话,也要用上 年。而对于其他攻击方式来说,由于此算法 比较的新,在设计时已经考虑到了如差分攻击等密码分析的威胁,所以还未有关于有谁 发现了能比较成功的攻击IDEA方法的结果。从这点来看,IDEA还是很安全的。
4.总结
几种算法的性能对比
算法 密钥长度 分组长度 循环次数
DES 56 64 16
三重DES 112、168 64 48
AES 128、192、256 128 10、12、14
IDEA 128 64 8
速度:在200MHz的奔腾机上的对比。
C++ DJGP(++pgcc101)
AES 30.2Mbps 68.275Mbps
DES(RSAREF) 10.6Mbps 16.7Mbps
3DES 4.4Mbps 7.3Mbps
Celeron 1GHz的机器上AES的速度,加密内存中的数据
128bits密钥:
C/C++ (Mbps) 汇编(Mbps)
Linux 2.4.7 93 170
Windows2K 107 154
256bits密钥:
C/C++ (Mbps) 汇编(Mbps)
Linux 2.4.7 76 148
Windows2K 92 135
安全性
1990年以来,特制的"DES Cracker"的机器可在几个小时内找出一个DES密钥。换句话说,通过测试所有可能的密钥值,此硬件可以确定用于加密信息的是哪个密钥。假设一台一秒内可找出DES密钥的机器(如,每秒试255个密钥),如果用它来找出128-bit AES的密钥,大约需要149万亿年。
四、对称加密应用 在保密通信中的应用。(保密电话) 附加内容
安全哈希算法(SHA)
由NIST开发出来的。
此算法以最大长度不超过264位的消息为输入,生成160位的消息摘要输出。主要步骤:
1. 附加填充位
2. 附加长度
3. 初始化MD缓冲区,为160位的数据
A=67452301
B=EFCDAB89
C=89BADCFE
D=10325476
E=C3D2E1F0
4. 处理512位消息块,将缓冲虚数据和消息块共同计算出下一个输出
5. 输出160位摘要
此外还有其他哈希算法,如MD5(128位摘要),RIPEMD-160(160位摘要)等。
㈣ 上证指数的计算方法
我国股票大盘指数是指沪市的“上证综合指数”和深市的“深证成份股指数”。上证综合指数:以上海证券交易所挂牌上市的全部股票(包括A股和B股)为样本,以发行量为权数(包括流通股本和非流通股本),以加权平均法计算,以1990年12月19日为基日,基日指数定为100点的股价指数。深证成份股指数:从深圳证券交易所挂牌上市的所有股票中抽取具有市场代表性的40家上市公司的股票为样本,以流通股本为权数,以加权平均法计算,以1994年7月20日为基日,基日指数定为1000点的股价指数。
㈤ 小学数学算法多样性与双基的关系
一、了解我们的课标(是我们数学教师教学的宪法,是我们的方向盘)
只有对课标理解透彻、具体,才能灵活处理好知识、技能、能力三者之间的关系,才能提高数学课堂教学的有效性。
“双基”变“四基”的理解:
“双基”这个词对每位老师来说,特别是用过“九义”教材的老师来说,早已耳熟能详,随着课改的推进,教改的不断深入,为了适应时代的需要,使“双基”的内容更丰富,“双基”现在已扩展为“四基”——基本知识、基本技能、基本思想、基本活动经验。很多学者将“四基”誉为《标准》修改的神来之笔。因为“四基”更强调的是学生两种能力的培养:即发现问题和提出问题的能力,分析问题和解决问题的能力,两种能力既体现了学生创新学习的基本过程,也是一个完整探索、研究的过程。
“基本思想”主要是指演绎和归纳,这应当是整个数学教学的主线。演绎和归纳不是矛盾的,其教学也不是矛盾的, 通过归纳来预测结果,然后通过演绎来验证结果。在具体的问题中,会涉及到数学抽象、数学模型、等量替换、数形结合等数学思想,但最上位的思想还是演绎和归纳。
之所以用“基本思想”而不用基本思想方法,就是要与换元法、递归法、配方法等具体的数学方法区别。每一个具体的方法可能是重要的,但不具有一般性,作为一种思想掌握是不必要的,经过一段时间,学生很可能就忘却了。这里所说的思想,是希望学生领会之后能够终生受益的那种思想方法。
数与代数(一、二、四、六、八单元)
(1) 重视培养学生的数感
(2) 重视口算;
(3) 重视算法多样化;
(4) 注重估算意义和能力的培养;
(5) 重视数学应用意识和能力的培养
图形与几何(三、五、七单元)
(1) 重视发展学生的空间观念
(2) 重视动手操作;
统计与概率(第九单元)
(1) 重视培养学生初步的统计观念;
(2) 重视对统计实际意义的理解;
(3) 重视可能性,渗透概率思想;
综合与实践(走进乡村、美丽的植物园,加上各单元中的七个实践活动,共计九个)通过系列实践活动,学生初步获得一些数学活动的经验,了解数学在日常生活中的简单应用;初步学会与他人合作交流,获得积极的数学学习情感。 (二)教材内容的必要说明;
1、“派车”一课,怎样派车比较合理?教材中的意图是空位越少越合理。我们认为还要考虑客观现实,如:价钱问题,管理问题等综合因素。感觉此问题情景不切合生活实际。另外,《派车》一课教学内容难度较大,不符合儿童年龄认知特点。
“派车”的合理性要考虑很多因素,在二年级下册只考虑空座位尽量少的问题,有些学生想到都坐面包车或小轿车便于管理,当然可以。关于价钱问题安排在三年级下册“旅游中的数学”,这样也体现了有一定的层次性。
2、课本中提问题注意严密。课本第8页第5题:一块花布长25米,做一套衣服用3米,最多能做几套衣服?这道题的设计意图是25÷3=8(套)……1(米),最多能做8套衣服,还剩的1米不够做一套衣服。教学时,有学生提出质疑,还剩的1米还能做一件小衣服,如果扔了太浪费。因此,这道题应改为一块花布长25米,做一套衣服用3米,你认为最多能做几套这样的衣服,为什么?
你的意见很好,添上“这样”两个字,避免引起疑义。
3、第四单元“生活中的大数”,书中没有给出大数读写规则及注意事项,专家意见是让学生去理解和体会这些规则和注意事项,我们不太认同这一点,此知识在学习过程中本来就是难点,学生若能在规则和注意事项的指导下学习,会更易于突破此难点,否则老师在教学时困难较大。
读数和写数从高位起,先读、写高位,再读、写低位,在百以内数读写中已有接触,万以内数的读写主要是中间或末尾有0数是难点,教材在拨一拨的4个问题中突出了这一难点,学生经历了拨一拨、数一数、写一写、读一读的过程,教材最后让学生“想一想”自己总结读数和写数时应注意什么?这样安排,发挥学生的主动性。另外读数和写数是一种技能,光*背诵规则是解决不了问题的,要*练习,一堂课的练习有限,后面的内容“比一比”以及计算中,都是练习读写数的机会,应充分利用。
4、第二单元的混合运算中的两步应用题如果在前面练习中逐步渗透,分步计算,然后在第二单元在列综合算式,引出混合运算,难度要降低很多,学生接受的也会更好。
你的意见很好,前面练习逐步渗透会好一些,咱们教材注意了这一点,如在一年级下册安排了一些连续两问的应用题如67页第9题,74页第(1)(2)题,93页第4题。但是做的还不够,在修改教材时加以改进。
5、认识路线这部分内容,书上路线图都太规整,这与生活实际有些不符,而且缺少图上方向与生活方向的结合。学生能准确的认识图上的路线,而在生活实际未必能熟练辨认方向。
您提的问题很实际,有时能看懂图上的方向,但在实际生活中却晕头转向,方向感是需要逐步建立的。对于低年级孩子能看懂比较规整的路线图就可以了,您说呢?
6、书上的某些估算有些脱离实际,让教师的教无从下手,不知道估算的具体标准和方法是什么,如课本41页的实践活动《有多少片树叶》.41页的实践活动,是一项估计活动,使学生体会到可以通过部分估计整体。组织这一活动时,,可以先让学生估计50片或100片占多大的地方,再估计所有树叶有多少片。在数一数时,可以让学生想一想,怎样数得又对又快,设法表示出来。学生可以两行两行地数,即30片30片地数;也可以10片10片地数圈起来是100片,圈成两圈,还剩下20片及5片,一共225片
7、如何建立算式与操作之间的联系? 如何引导学生在操作的同时进行思维的提升?
同第8题
8、除法学习中,如何让学生的动手操作和列竖式有效的结合?
您这个问题提得很好,动手操作必须和算式相结合,两者脱节是我们教学中容易出现的问题,怎样进行有效结合呢?如第2页的“分苹果”,先可以让学生分一分,在列竖式时要让学生知道每一步的含义,可以一边列竖式,一边演示,也可以用语言唤起学生的回忆,20表示要分的20个苹果,5表示每盘放5个,商4表示分的结果是放了4盘,验证一下,每盘5个放了4盘,一共是多少,4和5的乘积是20,写在苹果总数的下面,相减得0,表示全部分完了。
9、在学习有余数除法中,如何提高学生试商的能力?
( )里最大能填几的练习是提高学生试商能力的好方法,也可以培养学生的数感和估计能力,如()×8<44,通过多次练习,学生感觉到不可能填1、2、3、4,因为和8相乘的积离44太远,五八四十,和44比较接近,六八四十八,超过了44,( )里填5。学生在多次实际计算中逐步提高试商的能力。
10、1千米有多长?推想和感受之间有何差异?如何实现学生对1千米的感受?
1千米有多长比较抽象,因此用推想的方法帮助学生感受1千米有多长。如,先通过同学们手拉手站成一排,用米尺量一量,体会10米大约有多长,再推想一下多少名同学手拉手站成一排,大约有100米。也可以量出10米的距离,让学生自然地走一走,大约有多少步,再推想100米大约有多少步,想象一下100米有多长。在对100米有多长有了感性认识的基础上,再来想象1千米有多长,如10个100米那么长就是1千米。也可以选择两个学生熟悉的建筑物之间的距离说明是1千米,或几个那么长是1千米,老师们可以因地制宜,总之要通过具体情境,帮助学生体会1千米有多长。
11、学习的长度单位越来越多,教师要怎样培养学生正确的估测物体的长度?
主要帮助学生体会每种长度单位的实际意义,把每种单位和他熟悉事物的长度联系起来,如1分米,学生就想到有手掌那么长,1毫米就想到有1分硬币那么厚,1千米就想到从学校到某一处他熟悉的地方那么远。因此在学习这些测量单位时,一定要让学生动手操作,充分感受,在实际测量中加深理解,提供机会让学生估测,帮助学生积累估测的经验,同时又能加深学生对长度单位实际意义的理解。
12、竖式是如何产生的?
竖式又叫算草,在计算数目比较大的数时,用口算比较困难,不容易记住计算过程中的数,就要利用竖式笔录下来,竖式就是把计算过程格式化和顺序化了,减少记忆的难度,对计算有一定的作用,因此要让学生正确掌握。竖式的格式在国内外,古代和现代都不尽相同的,既然是一个草稿,因此在格式上不必要求过细,如进、退位点写不写,写的位置等,因人制宜就可以了。
13、第19页过河问题:如果学生出现29÷9=3……2 25÷9=2……7 2+7=9 3+2+1=6 这种答案,该如何往小括号方面引导?
首先肯定这种想法是对的,男生需要几条船,女生需要几条船,再把男、女生剩下的合在一起坐一条船,这种想法很符合生活中处理这一问题的次序。然后再引导学生还可以怎样想,把男女生人数合在一起,再看需要几条船,这样只需要两步,在把两个算式合在一起时,需要小括号帮忙。
14、“有余数的除法”的应用,学生的理解不透彻,并且不能完整地书写算式、单位名称和答。有没有好的经验?
有余数除法横式上商和余数的写法,在式子题中学生已经掌握了,在“有余数除法”应用中主要是单位名称的写法,可以引导学生根据问题来选择单位名称,如问题“可以装几盒,还剩几个?”商的单位名称是“盒”,余数是“个”。
15、本学期是教材中第一次要求学生画线段,而且是在练习中出现的,我们是否要要求学生画出线段的端点并标出长度?
画图是一种解题策略,可以画实物图,也可以画线段图,它用于帮助学生分析数量关系,是一种手段,不应作为解题格式的正规要求。第64页练习中的第5题,教材中画出线段图,是为了帮助学生理解数量关系,而不是要求学生自己画线段图。
16、在教学有关里程表的知识时,如:北京—天津的里程是137千米,北京—济南的里程是497千米,问天津到济南有多少千米?对于这样的问题总有部分学生不理解,如何突破这一难点?
第66页12题在里程表的左面有一幅铁路线图,这幅图起到线段图的作用,可以帮助学生理解里程表。教师可以进行图、表对照,帮助学生看懂里程表,回答书中的(1)个问题,在解答第(2)个问题时,可以对照铁路线图,使学生体会到是从整体里去掉一部分,用减法进行解答。
17、教材中79页的实践活动应该如何指导学生泡豆,才能使豆芽不发霉,实验成功?
要及时观察,适时换水,湿布及时清洗。
18、课本第72页的长方形与正方形一节中,想一想,推一推,拉一拉,观察信纸的变化,你发现了什么。本题的意图是让学生在推拉的过程中发现信纸由长方形变成正方形再变成长方形,但学生毕竟是用肉眼来观察,没有准确的测量,在拉的过程中,有的学生认为已经变成正方形了,但有的学生还要求再拉出一些才是正方形,这个地方学生有争议。如何处理?
学生发生争议时,可以用尺子量一量,四边是否相等,确定是不是正方形。
19、认识图形:(1)一个图形有几个角?是只数图形内部的角?还是图形内外的角都包括?教材里面没有具体的概念。(2)数图形的个数,学生在学习过程中感到很困难,老师多次讲评仍没有提高,授课感觉很困惑。
(1)只要求数图形内部的角,有的学生指出图形外部的角,可以肯定,但不作为全班要求;(教参P101有说明)
(2)教材73页第3、4题数图形的个数。第3题先数小正方形,再数由4个小正方形组成的大正方形,从而得出:2、5、8、11;然后进行观察,从第二幅图开始,每增加2个小正方形,就与它左边相邻的2个小正方形组成一个大正方形,因此后面的图形比前面的图形正方形个数增加3。第4题引导学生有序地数,先数小长方形有4个,再数由两个长方形组成的长方形有4个,还要一个有4个长方形组成的大长方形,一共有9个。
20、第7、8页,解决问题计算中出现有余数现象,大部分学生经常对答案的理解出现困惑,因为有些需要对计算结果做进一步处理--需要舍去余数,按照计算结果来回答。如何培养学生分析答案合理性的能力?
可以引导学生结合实际来想,如第7页的21人去划船,每条船限坐4人,至少租几条船?当学生列出算式21÷4=5(条)……1(人)时,因为每条船只能坐4人,必须多租一条船,答案要写“至少要租5条船。”试一试“中,每条船每时租金3元,10元最多可以划几时?当学生列出算式10÷3=3(时)……1(元)时,因为每时租金3元,剩下1元不能划1时,答案要写”最多划3时“。
21、课本第8页练一练:一瓶水可以到6杯,28位客人至少需要几瓶水?在练习过程中,学生出现了争议:其中一部分学生认为28位客人需要28杯水,每六杯水为一瓶,应该商4,余数为4,单位名称是杯。另一部分学生认为28位客人应余下4人没水喝,余数的单位名称应该是人。学生说的都有道理,教师应该如何评价?
我也认为都有道理,只要他在答案中说明“至少需要5瓶水“就可以了。
22、本册教材第一次出现两步应用题,相对于一步应用题,条件较多,学生理解会有一定难度,教学时怎么有效引导学生正确分析信息解决问题
在一年级下册安排了一些连续两问的应用题如67页第9题,74页第(1)(2)题,93页第4题。还有一些在情境图有多种信息,让学生选择合适的信息解答一步应用题,作了一些孕伏。这一册混合运算中有两步应用题,题目的素材都是学生熟悉的,结合生活实际容易理解的,这一册是初步接触,到了三年级再正式展开。 23、怎样在具体情境中,使学生体会到混合运算要遵循一定的顺序?
第二单元“混合运算”是在学生学习了加、减、乘、除法的基础上进行的,包括乘加、乘减、除加、除减及带有小括号的混合运算,以及在实际问题中的综合应用。教材是通过具体情景,使学生体会到混合运算要遵循一定的顺序,以及在计算时怎样运用这些顺序。首先,教材创设了“小熊购物”这样一个问题情境。在解答“胖胖要买4个面包和1瓶饮料,需付多少钱”时,需要列两个算式才能得出结果,当把两个算式合在一起时就要遵循一定的运算顺序。结合解决问题的过程,是先算出4个面包多少钱,再求4个面包和一瓶饮料一共多少钱,因此,要先算乘,再算加。又如,教材创设了“过河”的情境,要解决“河岸上有男生29人,女生25人,每条船限坐9人,需要几条船”的问题,就要先算出岸上一共有多少人,29+25=54(人);再求需要几条船,54?=6(条)。当把两个算式合在一起时,即29+25?,按照前面所学的运算顺序,是先算除,再算加,这时就要请小括号来帮忙了。
有一部分教师反映,这部分内容难点过于集中,要学习两步计算的应用题、怎样把分步列式合并为综合算式、怎样计算混合运算等三部分内容。需要指出的是,关于应用问题,本套教材不要求学生列综合算式,学生会分步列式即可。对于运算顺序和应用问题,教师可以根据本班学生的实际情况采取单元教学设计,在每一节课中侧重某一方面。如果学生对某节课应用问题的数量关系比较熟悉,就可以把重点放在熟悉运算顺序上;如果学生对应用问题的数量关系比较陌生,就应把重点放在这方面上。
24、如何提高“万以内加减法”的运算技能?
探索并掌握整十、整百数的加减的口算及三位数加减法的计算方法,能正确计算并解决一些简单的实际问题,是这部分内容学习的重要目标之一。如何提高万以内加减法的基本运算技能呢?
第一,要让学生在已经掌握百以内数加减法的基础上,自主探索三位数加减法的计算方法,理解运算的道理。教材创设了“买电器”“回收废电池”“小小图书馆”等情境,鼓励学生从现实情境中发现问题、解决问题。由于学生的生活背景、知识经验、思考问题的角度不同,学生进行三位数加减法计算时,所使用的方法可能不同。教材除了提供用计数器“拨一拨”和用竖式“算一算”外,还利用直观模型,通过数形结合来帮助学生理解“数位要对齐,满十进一和退一作十”的计算方法的道理。
第二,根据《全日制义务教育数学课程标准(实验稿)》(以后简称《标准》)的要求,三位数加减法笔算每分钟1~2题,教学时要根据这个标准鼓励学生逐步达到,不要对速度提出过高要求。
第三,三位数加减法数目比较大,计算时容易发生错误。教材安排了有关验算的内容,培养学生的验算意识和习惯。
教材“小小图书馆(三位数笔算减法)”一节中安排“想一想”活动,结合生活情境(买鞋找钱)引导学生探索减法的验算方法,使学生体会验算的重要性,养成对自己的计算结果负责的习惯。需要指出的是,对于验算,最重要的是培养学生的验算意识,学生可以用逆运算来进行验算,也可以通过用别的方法再算一遍进行验算。
第四,教材在每部分计算内容中安排了“森林医生”“趣味游戏”等形式多样的练习,这些练习形式将有助于学生正确地进行计算。例如,“小小图书馆”中,把学生在三位数加减法计算中容易产生的错误列举出来,让学生当“森林医生”——啄木鸟,找出错误原因,并进行改正。教师可以根据本班的情况,收集学生的计算错误,由学生自己当“森林医生”来改正。同时引导学生不仅能治病,而且要学会防病,总结产生错误的原因。
第五,合理地安排练习阶段。对于新学习的内容要及时练、及时反馈,因为遗忘是先快后慢的;注意集中练习与分散练习相结合,在后面单元的学习中,教师也需要适当地穿插有关的练习。
25、教材如何帮助学生认识抽象的“角”?
角是一个抽象的图形,小学阶段学习角主要是为了学习构成平面图形的一个基本要素。由于角的抽象性,学生在认识角中存在着比较大的困难和大误区,比如把生活中的桌角等和抽象的角混淆;比如把角看成一个区域,所以就感觉画出的角“包含”的区域的面积大,角就大。鉴于此,建立数学中“角”的正确表象是本内容学习的重要目标。
为了帮助学生建立角的正确表象,教材首先突出了从生活情境中“抽象”出角的过程。在三幅图中,既有画出来的两边一样长的情形,也有画出来的两边不一样长的情形。教师还可以举一些画出来的两边不一样长的情形,以免学生认为角的两边都必须画得一样长。在此基础上,教材安排了摆角的活动,目的有两个:第一,由于用两个小棒来摆角,有利于学生认识到角是由一个顶点和两个边组成的,使角与角所“包含”的区域剥离。第二,通过学生自己摆角,可以暴露出学生的错误认识,便于教师帮助学生澄清。然后,教材设计了认一认的活动,帮助学生建立角的正确表象。教师可以鼓励学生画出角,并进一步认识组成角的顶点和边。
需要指出的是,本册教材是对角的初步认识,学生能够辨认出角,知道角的有一个顶点、两条边,并能正确指出顶点、边即可。关于角的定义和进一步认识将在四年级学习。 三、备课的有效性问题与具体策略探讨
首先,要确定一个基本目标:
目标的来源,一个是教材,一个是教参,我们老师在上课前,一定要浏览一下当堂课的教学目标,确保教学要求不要偏高,亦不要偏低,教材中提供的素材,能用上的,一定要尽可能的用上,不建议大幅度的调整;教参中的教学建议有时对目标的诠释也很到位,相信大家看一看,就能做到心中有数。这样教学就不会走偏。推荐大家必看的教参内容:单元学习内容的前后联系(教参42页)
例如:《数一数——认识新计数单位》一课,李冬老师设计如下:
教学目标:
1、通过生活实例,学生体会生活中有大数,感受学习大数的必要性,激发学习数学的兴趣。
2、通过猜测、交流、推理等方法进行数正方体活动,认识新的计数单位“千”、“万”,并了解单位之间的联系。
3、通过收集资料,学生对大数有具体的感受,发展数感,培养学生的收集能力。
4、培养学生乐于探究、合作交流的意识。
其次,设计好一组问题:
一组有价值的序列问题设计,会让备课简约而不会简单
应该说,目前学校的常规备课活动主要就是一个目的——应付任务。是属于一种伪备课现象,即使是单元的集体备课,表面上大家议一议、论一论,但最终也是“研教分离”。多数教师都要承担文本教案的备课要求,备课的效度有多大,老师们心理最明白。但谁都不能回避现实的课堂教学——因为这是我们的工作,那如何让我们的备课不失我们教师的“风度”呢?需要我们的课前腹案,需要我们对采取必要的办法,实际每位老师,都有自己独道的办法。有的在教材上做出边注,有的在一张纸上做出必要的教学流程记录。那到底要记点什么啥?
大家知道,数学教学是数学活动的教学,同时也是数学思维训练的教学。活动的组织,离不开的问题的准备,高质量的问题,是具有思维价值的问题,是会启迪学生的思维,开启学生心灵的。问题的序列化呈现,也为教师的教学减轻了机械记忆教学流程的负担。简单的说,你只要将要组织的教学活动与紧扣重点的富于启发与思考的问题设计出来,准保你的教学流程不会出现大的偏差。
例如:今天的这节《数一数——认识新计数单位》
导入:生活引入——组织了一个解说校园信息的活动。
这里面提出了这样两个问题。
问题一:对于我们美丽的校园,你了解多少呢?
问题二:听我的介绍,你们有什么新发现吗?
仅仅两个问题,从生活情境入手,教师就一下子把学生带入了认识大数的世界,让学生体会到数学与生活的密切联系,数学学习有用!
新课:创设问题情境——设计了一个看课件,数方块的活动。
问题一:这个正方体是由许多小正方体组成的,到底有多少个小正方体呢?你们能猜一猜吗?你想怎么数?(独立思考与感悟的基础上,为后续的小组合作学习打下了基础)
问题二:你们是怎么数的?(在这里,执教者在设计中,多数采用了限定性的问题,步步引导孩子们的思维,不断的启发学生,也是一种问题方式,一个是开放性的问题,一个是限定性的问题。)
问题三:应该也是属于策略性的问题。——谁还有别的数法?
再次,要组织好一个活动;
数学教学是数学活动的教学,一堂课,也是系列相关活动的集合,比如前面所举实例:导入、例题呈现,情境创设,重点突出、难点突破,练习处理……那我们最应该组织好的就是“重点内容的突出与难点的突破”活动。
例如:本节课“千重万难”,如果突出重点,突破难点?李老师在教学中很好的将这一教学的必要片断呈现给大家。
借助学生用不同方法数方块时,加以渗透并突出教学的重点——九十一百是一千。
而对“万”的理解,孩子们是会感觉很难理解,但通过具体的实践活动,及策略的教学环节处理——比眼力看谁数的快。再次积累了学生的对大数的理解,数到九个一千的时候,让学生大胆的尝试,再添一个大的正方体,是多少?让学生从中发现10个1000是10000。
在这里不必再细说,只给大家一个建议,活动离不开问题的设计,如果将一系列的问题组织起来,做好预设学生的生成,创设互动的教学过程,相信会精彩不断。
另外,我们还要力求突出一个亮点;
每一堂课都应该力求有一两个亮点,实际在每节课,只要你有这个意识,就一定会找到可以生成的亮点,想想哪些内容可以激发学生的思维,启迪学生的智慧呢?如何能调动学生积极的学,主动的学呢?如何培养学生学习数学的兴趣,让学生对学习对数学产生好感呢?有时在练习环节中也可以实现的。
㈥ 高中生如何理解比特币加密算法
加密算法是数字货币的基石,比特币的公钥体系采用椭圆曲线算法来保证交易的安全性。这是因为要攻破椭圆曲线加密就要面对离散对数难题,目前为止还没有找到在多项式时间内解决的办法,在算法所用的空间足够大的情况下,被认为是安全的。本文不涉及高深的数学理论,希望高中生都能看懂。
密码学具有久远的历史,几乎人人都可以构造出加解密的方法,比如说简单地循环移位。古老或简单的方法需要保密加密算法和秘钥。但是从历史上长期的攻防斗争来看,基于加密方式的保密并不可靠,同时,长期以来,秘钥的传递也是一个很大的问题,往往面临秘钥泄漏或遭遇中间人攻击的风险。
上世纪70年代,密码学迎来了突破。Ralph C. Merkle在1974年首先提出非对称加密的思想,两年以后,Whitfield Diffie和Whitfield Diffie两位学者以单向函数和单向暗门函数为基础提出了具体的思路。随后,大量的研究和算法涌现,其中最为着名的就是RSA算法和一系列的椭圆曲线算法。
无论哪一种算法,都是站在前人的肩膀之上,主要以素数为研究对象的数论的发展,群论和有限域理论为基础。内容加密的秘钥不再需要传递,而是通过运算产生,这样,即使在不安全的网络中进行通信也是安全的。密文的破解依赖于秘钥的破解,但秘钥的破解面临难题,对于RSA算法,这个难题是大数因式分解,对于椭圆曲线算法,这个难题是类离散对数求解。两者在目前都没有多项式时间内的解决办法,也就是说,当位数增多时,难度差不多时指数级上升的。
那么加解密如何在公私钥体系中进行的呢?一句话,通过在一个有限域内的运算进行,这是因为加解密都必须是精确的。一个有限域就是一个具有有限个元素的集合。加密就是在把其中一个元素映射到另一个元素,而解密就是再做一次映射。而有限域的构成与素数的性质有关。
前段时间,黎曼猜想(与素数定理关系密切)被热炒的时候,有一位区块链项目的技术总监说椭圆曲线算法与素数无关,不受黎曼猜想证明的影响,就完全是瞎说了。可见区块链项目内鱼龙混杂,确实需要好好洗洗。
比特币及多数区块链项目采用的公钥体系都是椭圆曲线算法,而非RSA。而介绍椭圆曲线算法之前,了解一下离散对数问题对其安全性的理解很有帮助。
先来看一下 费马小定理 :
原根 定义:
设(a, p)=1 (a与p互素),满足
的最下正整数 l,叫作a模p的阶,模p阶为(最大值)p-1的整数a叫作模p的原根。
两个定理:
基于此,我们可以看到,{1, 2, 3, … p-1} 就是一个有限域,而且定义运算 gi (mod p), 落在这个有限域内,同时,当i取0~p-2的不同数时,运算结果不同。这和我们在高中学到的求幂基本上是一样的,只不过加了一层求模运算而已。
另一点需要说明的是,g的指数可以不限于0~p-2, 其实可以是所有自然数,但是由于
所以,所有的函数值都是在有限域内,而且是连续循环的。
离散对数定义:
设g为模p的原根,(a,p) = 1,
我们称 i 为a(对于模p的原根g)的指数,表示成:
这里ind 就是 index的前3个字母。
这个定义是不是和log的定义很像?其实这也就是我们高中学到的对数定义的扩展,只不过现在应用到一个有限域上。
但是,这与实数域上的对数计算不同,实数域是一个连续空间,其上的对数计算有公式和规律可循,但往往很难做到精确。我们的加密体系里需要精确,但是在一个有限域上的运算极为困难,当你知道幂值a和对数底g,求其离散对数值i非常困难。
当选择的素数P足够大时,求i在时间上和运算量上变得不可能。因此我们可以说i是不能被计算出来的,也就是说是安全的,不能被破解的。
比特币的椭圆曲线算法具体而言采用的是 secp256k1算法。网上关于椭圆曲线算法的介绍很多,这里不做详细阐述,大家只要知道其实它是一个三次曲线(不是一个椭圆函数),定义如下:
那么这里有参数a, b;取值不同,椭圆曲线也就不同,当然x, y 这里定义在实数域上,在密码体系里是行不通的,真正采用的时候,x, y要定义在一个有限域上,都是自然数,而且小于一个素数P。那么当这个椭圆曲线定义好后,它反应在坐标系中就是一些离散的点,一点也不像曲线。但是,在设定的有限域上,其各种运算是完备的。也就是说,能够通过加密运算找到对应的点,通过解密运算得到加密前的点。
同时,与前面讲到的离散对数问题一样,我们希望在这个椭圆曲线的离散点阵中找到一个有限的子群,其具有我们前面提到的遍历和循环性质。而我们的所有计算将使用这个子群。这样就建立好了我们需要的一个有限域。那么这里就需要子群的阶(一个素数n)和在子群中的基点G(一个坐标,它通过加法运算可以遍历n阶子群)。
根据上面的描述,我们知道椭圆曲线的定义包含一个五元祖(P, a, b, G, n, h);具体的定义和概念如下:
P: 一个大素数,用来定义椭圆曲线的有限域(群)
a, b: 椭圆曲线的参数,定义椭圆曲线函数
G: 循环子群中的基点,运算的基础
n: 循环子群的阶(另一个大素数,< P )
h:子群的相关因子,也即群的阶除以子群的阶的整数部分。
好了,是时候来看一下比特币的椭圆曲线算法是一个怎样的椭圆曲线了。简单地说,就是上述参数取以下值的椭圆曲线:
椭圆曲线定义了加法,其定义是两个点相连,交与图像的第三点的关于x轴的对称点为两个点的和。网上这部分内容已经有很多,这里不就其细节进行阐述。
但细心的同学可能有个疑问,离散对数问题的难题表现在求幂容易,但求其指数非常难,然而,椭圆曲线算法中,没有求幂,只有求乘积。这怎么体现的是离散对数问题呢?
其实,这是一个定义问题,最初椭圆曲线算法定义的时候把这种运算定义为求和,但是,你只要把这种运算定义为求积,整个体系也是没有问题的。而且如果定义为求积,你会发现所有的操作形式上和离散对数问题一致,在有限域的选择的原则上也是一致的。所以,本质上这还是一个离散对数问题。但又不完全是简单的离散对数问题,实际上比一般的离散对数问题要难,因为这里不是简单地求数的离散对数,而是在一个自定义的计算上求类似于离散对数的值。这也是为什么椭圆曲线算法采用比RSA所需要的(一般2048位)少得多的私钥位数(256位)就非常安全了。
㈦ 如何用C语言实现RSA算法
RSA算法它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字
命名:Ron Rivest, Adi Shamir 和Leonard
Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。
一、RSA算法 :
首先, 找出三个数, p, q, r,
其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数
p, q, r 这三个数便是 private key
接着, 找出 m, 使得 rm == 1 mod (p-1)(q-1)
这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了
再来, 计算 n = pq
m, n 这两个数便是 public key
编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a < n
如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t),
则每一位数均小于 n, 然后分段编码
接下来, 计算 b == a^m mod n, (0 <= b < n),
b 就是编码后的资料
解码的过程是, 计算 c == b^r mod pq (0 <= c < pq),
于是乎, 解码完毕 等会会证明 c 和 a 其实是相等的 :)
如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b
他如果要解码的话, 必须想办法得到 r
所以, 他必须先对 n 作质因数分解
要防止他分解, 最有效的方法是找两个非常的大质数 p, q,
使第三者作因数分解时发生困难
<定理>
若 p, q 是相异质数, rm == 1 mod (p-1)(q-1),
a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq,
则 c == a mod pq
证明的过程, 会用到费马小定理, 叙述如下:
m 是任一质数, n 是任一整数, 则 n^m == n mod m
(换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) == 1 mod m)
运用一些基本的群论的知识, 就可以很容易地证出费马小定理的
<证明>
因为 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整数
因为在 molo 中是 preserve 乘法的
(x == y mod z and u == v mod z => xu == yv mod z),
所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq
1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时,
则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p
a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q
所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1
即 a^(k(p-1)(q-1)) == 1 mod pq
=> c == a^(k(p-1)(q-1)+1) == a mod pq
2. 如果 a 是 p 的倍数, 但不是 q 的倍数时,
则 a^(q-1) == 1 mod q (费马小定理)
=> a^(k(p-1)(q-1)) == 1 mod q
=> c == a^(k(p-1)(q-1)+1) == a mod q
=> q | c - a
因 p | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod p
=> p | c - a
所以, pq | c - a => c == a mod pq
3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上
4. 如果 a 同时是 p 和 q 的倍数时,
则 pq | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod pq
=> pq | c - a
=> c == a mod pq
Q.E.D.
这个定理说明 a 经过编码为 b 再经过解码为 c 时, a == c mod n (n = pq)
但我们在做编码解码时, 限制 0 <= a < n, 0 <= c < n,
所以这就是说 a 等于 c, 所以这个过程确实能做到编码解码的功能
二、RSA 的安全性
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解
RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA
的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n
必须选大一些,因具体适用情况而定。
三、RSA的速度
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。
四、RSA的选择密文攻击
RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
( XM )^d = X^d *M^d mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公
钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用
One-Way HashFunction 对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。
五、RSA的公共模数攻击
若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:
C1 = P^e1 mod n
C2 = P^e2 mod n
密码分析者知道n、e1、e2、C1和C2,就能得到P。
因为e1和e2互质,故用Euclidean算法能找到r和s,满足:
r * e1 + s * e2 = 1
假设r为负数,需再用Euclidean算法计算C1^(-1),则
( C1^(-1) )^(-r) * C2^s = P mod n
另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。
RSA的小指数攻击。 有一种提高 RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有
所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。
RSA算法是
第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人
们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA
的重大缺陷是无法从理论上把握它的保密性能
如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600
bits
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目
前,SET( Secure Electronic Transaction )协议中要求CA采用比特长的密钥,其他实体使用比特的密钥。
C语言实现
#include <stdio.h>
int candp(int a,int b,int c)
{ int r=1;
b=b+1;
while(b!=1)
{
r=r*a;
r=r%c;
b--;
}
printf("%d\n",r);
return r;
}
void main()
{
int p,q,e,d,m,n,t,c,r;
char s;
printf("please input the p,q: ");
scanf("%d%d",&p,&q);
n=p*q;
printf("the n is %3d\n",n);
t=(p-1)*(q-1);
printf("the t is %3d\n",t);
printf("please input the e: ");
scanf("%d",&e);
if(e<1||e>t)
{
printf("e is error,please input again: ");
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1) d++;
printf("then caculate out that the d is %d\n",d);
printf("the cipher please input 1\n");
printf("the plain please input 2\n");
scanf("%d",&r);
switch(r)
{
case 1: printf("input the m: "); /*输入要加密的明文数字*/
scanf("%d",&m);
c=candp(m,e,n);
printf("the cipher is %d\n",c);break;
case 2: printf("input the c: "); /*输入要解密的密文数字*/
scanf("%d",&c);
m=candp(c,d,n);
printf("the cipher is %d\n",m);break;
}
getch();
}