第1篇:巧算与速算小学三年级奥数题及详解
相乘的两个数都是两位数,且十位上的数字相同,个位上的数字之和正好是10,这就可以运用“头同尾合十”的巧算法进行简便计算。
“头同尾合十”的巧算方法是:用十位上的数字乘十位上的数字加1的积,再乘100,最后加上个位上2个数字的乘积。
41×49,先用(4+1)×4=20,将20作为积的前两位数字,再用1×9=9,可以发现末位数字相乘的积是一位数,那就在9的前面补一个0,作为积的后两位数字。这样*很简单的就求出了,即41×49=(4+1)×4×100+1×9=2009。
科学的学习方法和合理的复习资料能帮助大家更好的学好数学这门课程。希望为大家准备的奥数题及*巧算与速算,对大家有所帮助
第2篇:小学四年级《速算与巧算》奥数试题及详解
第3篇:小学四年级奥数题速算与巧算讲解
【分析】:题目要求的是从2到1000的偶数之和减去从1到999的奇数之和的差,如果按照常规的运算法则去求解,需要计算两个等差数列之和,比较麻烦。但是观察两个扩号内的对应项,可以发现2-1=4-3=6-5=…,因此可以对算式进行分组运算。
以上是为大家准备的四年级奥数题速算与巧算,希望对大家有所帮助
第4篇:速算与巧算小学四年级奥数经典题
【解析】在涉及所有数字都是9的计算中,常使用凑整法。例如将999化成1000—1去计算。这是小学数学中常用的一种技巧。
【解析】此题各数字中,除最高位是1外,其余都是9,仍使用凑整法。不过这里是加1凑整。(如199+1=200)
第5篇:小学四年级奥数速算与巧算练习题
速算与巧算是计算中的一个重要组成部分,掌握一些速算与巧算的方法,有助于提高我们的计算能力和思维能力。这一周我们学习加、减法的巧算方法,这些方法主要根据加、减法的运算定律和运算*质,通过对算式适当变形从而使计算简便。
在巧算方法里,蕴含着一种重要的解决问题的策略。转化问题法即把所给的算式,根据运算定律和运算*质,或改变它的运算顺序,或减整从而变成一个易于算出结果的算式。
【思路*】这四个加数分别接近10、100、1000、10000。在计算这类题目时,常使用减整法,例如将99转化为100-1。这是小学数学计算中常用的一种技巧。
【思路*】认真观察每个加数,发现它们都和整数
第6篇:关于小学三年级速算与巧算奥数练习题
第7篇:四年级奥数习题及*:速算与巧算
5.时钟1点钟敲1下,2点钟敲2下,3点钟敲3下,依次类推.从1点到12点这12个小时内时钟共敲了多少下?
6.求出从1~25的全体自然数之和.
12.两个10位数和的乘积中,有几个数字是奇数?
第8篇:二年级奥数题(速算与巧算)及*
1、仔细观察,找规律填数。
解:这里第一个数加上1得到第二个数(0+1=1),第二个数乘2得第三个数(1×2=2),这里第三个数加上1得到第四个数(2+1=3),第四个数乘2得第五个数(3×2=6),.即根据加1,乘2;加1,乘2……的规律,可以确定括号内应填7×2=14,14+1=15,即14,15这两个数。
2、在空格中填上合适的数。
解:表格中的数分上下两排,每排的数各有自己的规律,上排的数是从4开始依次加2,加3,加4得到,这样最后一个数就是13+5=18。下排的数是从5开始依次加4,加6,加8得到,这样下排最后一个数就是23+10=33,所以空格中应填
第9篇:关于三年级的速算与巧算的奥数练习题及*
三年级速算与巧算奥数练习题
第10篇:小学一年级奥数计算题题目及*详解
目录 一、公钥密码学 / 非对称密码学 密码学的历史 公钥密码学的概念 量子安全性 二、非对称加密方案简介 /calculator/ialhd71we3?lang=zh-CN
数学家在椭圆曲线上定义了一些运算规则,ECC 就依赖于这些规则,下面简单介绍下我们用得到的部分。
上述描述一是定义了椭圆曲线的加法规则,二是定义了椭圆曲线上的负元运算。
在加法规则中,如果 \(A=B\),我们定义曲线在 \(A\) 点的切线与曲线的交点为 \(-2A\),于是得到二倍运算的规则:
对于 \((-A) + A\) 这种一个值与其负元本身相加的情况,我们会发现过这两点的直线没有交点,前面定义的加法规则在这种情况下失效。
为了解决这个问题,我们假设这直线与椭圆曲线相交于无穷远点 \(O_{\infty}\).
我们在前面已经定义了椭圆曲线上的加法运算、二倍运算以及无穷远点,有了这三个概念,我们就能定义k 倍运算 了。
K 倍运算最简单的计算方法,就是不断地进行加法运算,但是也有许多更高效的算法。
其中最简单的算法是「Double-and-add」,它要求首先 \(k\) 拆分成如下形式
然后再迭代计算其中各项的值,它的运算复杂度为 \(log_{2}(k)\).
因 Double 和 add 的执行时间不同,根据执行时间就可以知道是执行 Double 还是 add,间接可以推算出 k. 因此这个算法会有计时攻击的风险。
基于「Double-and-add」修改的蒙哥马利阶梯(Montgomery Ladder)是可以避免计时分析的作法,这里就不详细介绍了。
5. 有限域上的椭圆曲线
椭圆曲线是连续且无限的,而计算机却更擅长处理离散的、存在上限的整数,因此 ECC 使用「有限域上的椭圆曲线」进行计算。
「有限域(也被称作 Galois Filed, 缩写为 GF)」顾名思义,就是指只有有限个数值的域。
有限域上的椭圆曲线方程,通过取模的方式将曲线上的所有值都映射到同一个有限域内。
目前主要有两种有限域在 ECC 中被广泛应用:
通过限制 x 为整数,并使用取模进行了映射后,椭圆曲线的形状已经面目全非了,它的加减法也不再具有几何意义。
但是它的一些特性仍然跟椭圆曲线很类似,各种公式基本加个 \(\mod p\) 就变成了它的有限域版本:
ECDLP 椭圆曲线离散对数问题
前面已经介绍了椭圆曲线上的 k 倍运算 及相关的高效算法,但是我们还没有涉及到除法。
椭圆曲线上的除法是一个尚未被解决的难题——「ECDLP 椭圆曲线离散对数问题」:
目前并没有有效的手段可以快速计算出 \(k\) 的值。
比较直观的方法应该是从基点 \(G\) 开始不断进行加法运算,直到结果与 \(kG\) 相等。
目前已知的 ECDLP 最快的解法所需步骤为 \(\sqrt{k}\),而 k 倍运算高效算法前面已经介绍过了,所需步骤为 \(log_2(k)\)。
在 \(k\) 非常大的情况下,它们的计算用时将会有指数级的差距。
# 查看私钥的详细参数椭圆曲线上的 k 倍运算与素数上的幂运算很类似,因此 ECC 底层的数学难题 ECDLP 与 RSA 的离散对数问题 DLP 也有很大相似性。
可以看到 ECC 算法的公钥私钥都比 RSA 小了非常多,数据量小,却能带来同等的安全强度,这是 ECC 相比 RSA 最大的优势。
使用安全随机数生成器即可直接生成出 ECC 的私钥 priv
,因此 ECC 的密钥对生成速度非常快。
这个在前面写给开发人员的实用密码学(五)—— 密钥交换 DHKE 与完美前向保密 PFS已经介绍过了,不过这里再复述一遍:
这样两方就通过 ECDH 完成了密钥交换。
而 ECDH 的安全性,则由 ECDLP 问题提供保证。
ECC 本身并没有提供加密与解密的功能,但是我们可以借助 ECDH 迂回实现加解密。流程如下:
C
C
得到消息 M
实际上就是消息的发送方先生成一个临时的 ECC 密钥对,然后借助 ECDH 协议计算出共享密钥用于加密。
消息的接收方同样通过 ECDH 协议计算出共享密钥再解密数据。
前面已经介绍了 RSA 签名,这里介绍下基于 ECC 的签名算法。
其中 ECDSA 算法稍微有点复杂,而安全强度跟它基本一致的 EdDSA 的算法更简洁更易于理解,在使用特定曲线的情况下 EdDSA 还要比 ECDSA 更快一点,因此现在通常更推荐使用 EdDSA 算法。
生成私钥的时候,算法首先生成一个随机数,然后会对随机数做一些变换以确保安全性,防范计时攻击等攻击手段。
具体的算法虽然比 ECDSA 简单,但还是有点难度的,这里就直接略过了。
下面给出个 ed25519 的计算示例:
ed448 的代码也完全类似:
密码学常用椭圆曲线介绍
在介绍密码学中的常用椭圆曲线前,需要先介绍一下椭圆曲线的阶(order)以及辅助因子(cofactor)这两个概念。
首先还得介绍下数学中「循环群」的概念,它是指能由单个元素所生成的群,在 ECC 中这就是预先定义好的基点 \(G\).
一个有限域上的椭圆曲线可以形成一个有限「循环代数群」,它由曲线上的所有点组成。椭圆曲线的阶被定义为该曲线上所有点的个数(包括无穷远点)。
「有些曲线 + G」形成一个单一循环群,这一个群包含了曲线上的所有点。而其他的曲线加上 G 点则形成多个不相交的循环子群,每个子群包含了曲线的一个子集。
对于上述第二种情况,曲线上的点将被拆分到 h 个循环子群中,每个子群的阶都是 r,这时整个群的阶 \(n = h * r\). 子群的个数 h 被称为辅助因子。
有限域上的椭圆曲线的阶都是有限的,也就是说对于曲线上任意一点 \(G\),我们计算它的数乘 \(kG\),随着整数 \(k\) 的增大,一定会存在某个 \(k\) 使 \(kG = O_{\infty}\) 成立,然后 \(k\)
辅助因子通过用如下公式表示:
其中 \(n\) 是曲线的阶,\(r\) 是每个子群的阶,\(h\) 是辅助因子。
生成点 G 的选择是很有讲究的,虽然每个循环子群都包含有很多个生成点,但是 ECC 只会谨慎的选择其中一个。
首先 G 点必须要能生成出整个循环子群,其次还需要有尽可能高的计算性能。
数学上已知某些椭圆曲线上,不同的生成点生成出的循环子群,阶也是不同的。如果 G 点选得不好,可能会导致生成出的子群的阶较小。
前面我们已经提过子群的阶 \(r\) 会限制总的私钥数量,导致算法强度变弱!因此不恰当的 \(G\) 点可能会导致我们遭受「小子群攻击」。
为了避免这种风险,建议尽量使用被广泛使用的加密库,而不是自己撸一个。
ECC椭圆曲线由一组椭圆曲线域参数描述,如曲线方程参数、场参数和生成点坐标。这些参数在各种密码学标准中指定,你可以网上搜到相应的 RFC 或 NIST 文档。
这些标准定义了一组命名曲线的参数,例如 secp256k1、P-521、brainpoolP512t1 和 SM2. 这些加密标准中描述的有限域上的椭圆曲线得到了密码学家的充分研究和分析,并被认为具有一定的安全强度。
也有一些密码学家(如 Daniel Bernstein)认为,官方密码标准中描述的大多数曲线都是「不安全的」,并定义了他们自己的密码标准,这些标准在更广泛的层面上考虑了 ECC 安全性。
开发人员应该仅使用各项标准文档给出的、经过密码学家充分研究的命名曲线。
此曲线被应用在比特币中,它的域参数如下:
椭圆曲线方程除了我们前面使用的 Weierstrass 形式 $$y^2 = (x^3 + ax + b) \mod p$$ 外,还可以被写成其他多种形式,这些不同的形式是双有理等价的(表示笔着也不懂什么叫「双有理等价」...)。
不同的方式形式在计算机的数值计算上可能会存在区别。
为了性能考虑,ECC 在部分场景下会考虑使用 Edwards 曲线形式进行计算,该方程形式如下:
只要域参数选得好,Edwards 就可以以非常高的性能实现 ECC 密钥交换、数字签名、混合加密方案。
虽然此曲线并未以 Edwards 形式定义,但是它已被证明与如下扭曲 Edwards 曲线(edwards25519
)双有理等价:
上面给出的这种 Edwards 形式与前文给出的 Weierstrass 形式完全等价,是专为计算速度优化而设计成这样的。
Curve25519 由 Daniel Bernstein 领导的密码学家团队精心设计,在多个设计和实现层面上达成了非常高的性能,同时不影响安全性。
Curve25519 的构造使其避免了许多潜在的实现缺陷。根据设计,它不受定时攻击的影响,并且它接受任何 32 字节的字符串作为有效的公钥,并且不需要验证。
Curve25519 的私钥为 251 位,通常编码为 256 位整数(32 个字节,64 个十六进制数字)。
公钥通常也编码为 256 位整数(255 位 y 坐标 + 1 位 x 坐标),这对开发人员来说非常方便。
Curve448 的私钥为 446 位,通常编码为 448 位整数(56 个字节,112 个十六进制数字)。
公钥也被编码为 448 位整数。
此外对于我们前面介绍的 Curve448 与 Curve25519,可以从性能跟安全性方面考量:
如果你的应用场景中暂时还很难用上 Curve448/Curve25519,你可以考虑一些应用更广泛的其他曲线,但是一定要遵守如下安全规范:
目前在 TLS 协议以及 JWT 签名算法中,目前应该最广泛的椭圆曲线仍然是 NIST 系列:
P-256
: 到目前为止 P-256 应该仍然是应用最为广泛的椭圆曲线
但是我们也看到 Curve25519 正在越来越流行,因为美国政府有前科,NIST 标准被怀疑可能有后门,目前很多人都在推动使用 Curve25519 等社区方案取代掉 NIST 标准曲线。
对于 openssl,如下命令会列出 openssl 支持的所有曲线:
在文章开头我们已经介绍了集成加密方案 (IES),它在密钥封装机制(KEM)的基础上,添加了密钥派生算法 KDF、消息认证算法 MAC 等其他密码学算法以达成我们对消息的安全性、真实性、完全性的需求。
而 ECIES 也完全类似,是在 ECC + 对称加密算法的基础上,添加了许多其他的密码学算法实现的。
大概就介绍到这里吧,后续就请在需要用到时自行探索相关的细节咯。