密码学系统
比较常见的对称加密算法有: Digital Encryption Standard(DES), Triple-DES, IDEA, BLOWFISH。
对称加密的挑战:
非对称加密的挑战:
比较常见的非对称加密算法有: RSA, ElGamal, ECC。
菲斯特尔结构的块加密算法是著名的一个分组密码加密的设计模型。
1990年后对DES进行彻底的密钥搜索的速度开始引起DES用户的不适。 然而,用户并不想取代DES,因为它需要花费大量的时间和金钱来改变广泛采用并嵌入到大型安全架构中的加密算法。
务实的做法不是完全放弃DES,而是改变DES的使用方式。 这导致了三重DES(3DES)的修改方案。
三重DES
在使用3TDES之前,用户首先生成并分配一个3TDES密钥K,它由三个不同的DES密钥K1,K2和K3组成。
详细可以看 Triple-DES
高级加密标准(Advanced Encryption Standard,AES)是目前比较流行和广泛采用的对称加密算法。 发现至少比三重DES快6倍。
AES的功能如下:
对称密钥对称分组密码
128位数据,128/192/256位密钥
比Triple-DES更强更快
提供完整的规格和设计细节
详细可以看 AES
这个密码系统是最初的系统之一。 即使在今天,它仍然是最多被使用的密码系统。 该系统由三位学者Ron Rivest,Adi Shamir和Len Adleman发明,因此被称为RSA密码系统。
下面给出生成RSA密钥对的一个例子(为了便于理解,这里采用的素数p&q值很小,实际上这些值非常高)。
设两个素数为p = 7且q = 13。因此,模数n = pq = 7×13 = 91。
选择 e = 5,这是一个有效的选择,因为没有数字是公因子5和(p - 1)(q - 1)= 6×12 = 72,除了1。
这对数字(n,e) = (91, 5)形成公钥,可以让任何我们希望能够向我们发送加密消息的人使用。
向扩展欧几里德算法输入p = 7,q = 13和e = 5。 输出将是d = 29。
因此,公钥是(91, 5),私钥是(91, 29)。
假设发送者希望发送一些文本消息给公钥为(n,e)的人。然后发件人将明文表示为一系列小于n的数字。
为了加密第一个明文P,它是一个模n的数字。 加密过程是简单的数学步骤:
C = Pe mod n
换句话说,密文C等于明文P乘以自己e次,然后减去模n。 这意味着C也是一个小于n的数字。
回到我们的密钥生成例子,明文P = 10,我们得到密文C:
C = 105 mod 91
属于ECC的一种变化。加密的核心理念与RSA相似,也是利用离散对数很难求解。
但与RSA不同的是 公钥的组成部分,EIGamal的公钥有三部分组成, 质模数 p, 生成元素 g, 以及 公共的 Y = gx(g的x次方) mod p。
详细可以看 ElGamal Crytosystem
椭圆曲线密码术(ECC)是用来描述一套密码工具和协议的术语,其安全性基于特殊版本的离散对数问题。它不使用数字模p。ECC基于与称为椭圆曲线的数学对象相关联的数字集合。有这些数字的加法和计算倍数的规则,就像数字模p一样。
ECC包含许多最初为模块化数字设计的密码方案的变体,如ElGamal加密和数字签名算法。
相信当应用于椭圆曲线上的点时,离散对数问题更加困难。这会提示从数字模p切换到椭圆曲线上的点。如果我们使用基于椭圆曲线的变体,也可以用较短的密钥获得等效的安全级别。
较短的密钥有两个好处:
易于管理
高效的计算
这些优点使基于椭圆曲线的加密方案变体对计算资源受到限制的应用程序非常有吸引力。
详细可以看 Elliptic Curve Cryptography
^符号表示为多少次方
签名 = 消息^D mod N (D和N 为签名者的私钥,计算消息的D次方并求mod N,所得余数即为签名)
消息 = 签名^E mod N (E和N 为签名者的公钥,计算签名的E次方并求mod N)
举个例子:
私钥: D = 29; N = 323
公钥: E = 5; N = 323
消息: 123
由于 N 的值为 323, 因此消息需要为 0 ~ 322 这个范围内的整数. 假设需要对 123 这个消息进行签名.
用私钥(D,N) = (29,323) 对消息 123 进行签名.
消息^D mod N = 123^29 mod 323 = 157
因此 (消息, 签名) = (123, 157)
用公钥(E,N) = (5,323)对消息进行验证
签名^E mod N = 157^5 mod 323 = 123
得到消息 123 与发送者发送过来的消息 123 是一致的,因此签名验证成功.
https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/
加法逆: a在集合中, -a在集合中的定义为使 a + (-a) = 0, 这就是加法逆元运算
乘法逆: a在集合中,且不为0, a^-1 在集合中定位为使 a* a^-1 = 1, 这就是乘法逆元运算
在聊椭圆曲线前,我们先打一些基础然后再讨论一下对数问题.
在一个集合上定义一个二元运算,这就是数学中的群。一个集合 G 要成为一个群,必须满足下面 4 个条件:
从平常的加法概念来看, 整数集 Z 是一个群(而且是阿贝尔群). 自然数集 N 不是一个群.
我们可以在椭圆曲线上定义一个群:
https://andrea.corbellini.name/ecc/interactive/reals-add.html
如下图: 点 A 的自我相加过程就是做 乘法的过程 这个过程叫 Point Doubling
计算 nP 需要做 n次加法 如果 n 为 k 位二进制 时间复杂度为 O(2^k)
倍加算法 比如 n = 151 二进制为 10010111
用倍加算法 时间复杂度有了很大的改进 O(logN) or O(k)
Q = nP
这只是 p = 211, 像 Secp256k1 这条椭圆曲线的 p = 115792089237316195423570985008687907853269984665640564039457584007908834671663 一个78位的数字 要怎么求出 n?
一个通俗的比喻: 假设这些点是有个人 A 在一个很大的房间里玩弹珠的游戏 玩了两年 两年后 A 的朋友 B来了 B看到了最后的点 以及 A 告诉B 起点 但是B怎么能知道 A 是弹了多少次才从起点弹到终点?
上面这两张图是 椭圆曲线 - Secp256K1: y^2 = x^3 + 7
第一张图: 定义在 实数域
第二张图: 定义在 有限域Zp
是用下面的参数(p,a,b,G,n,h)形成的:
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256 - 2^32 - 997
a = 0
b = 7
G = [0x79BE667E_F9DCBBAC_55A06295_CE870B07_029BFCDB_2DCE28D9_59F2815B_16F81798,
0x483ADA77_26A3C465_5DA4FBFC_0E1108A8_FD17B448_A6855419_9C47D08F_FB10D4B8]
n = 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFE_BAAEDCE6_AF48A03B_BFD25E8C_D0364141
h = 1
如果椭圆曲线上一点P, 存在最小的正整数 n 使得数乘 nP=O∞, 则将 n 称为 P 的阶
计算可得 27P = -P = (3, 13) 所以 28P = 0∞ P的阶为28
如何签名?
Sig = F sig ( F keccak256 ( m ) , k )
如何计算 r
如何计算 s
s ≡ q^-1 (Keccak256(m) + r * k) (mod p)
如何验证签名?
P.S. 上述验证签名的过程中 没有用到发送者的 私钥
RSA 密钥大小(bits) ECC 密钥大小 (bits)
1024 160
2048 224
3072 256
7680 384
15360 521
有一个研究例子 同一台计算能力的计算机
为什么 比特币和以太坊要选择 Secp256k1 这条椭圆曲线?
假如有人提供一条椭圆曲线比如 Secp256r1 如何验证这条曲线的安全性?
因为公钥是公开的,很容易被破坏或者篡改,因此需要建立和维持一种可信的基础机制来管理公钥。
PKI由5部分组成:
作为比喻,证书可以被视为发给该人的身份证。人们使用驾照,护照等身份证来证明自己的身份。数字证书在电子世界中具有相同的基本功能。
但有一点不同,数字证书不仅发给人,还可以发给电脑,软件包或任何其他需要证明电子世界身份的东西。
数字证书基于ITU标准X.509,该标准定义了公钥证书和认证验证的标准证书格式。因此数字证书有时也被称为X.509证书。
与用户客户端相关的公钥与证书颁发机构(CA)一起存储在数字证书中,以及其他相关信息,例如客户信息,到期日期,使用情况,发行者等。
CA对此整个信息进行数字签名并在证书中包含数字签名。
任何需要对客户的公共密钥和相关信息进行保证的人,他都会使用CA的公钥进行签名验证过程。成功的验证可确保证书中给出的公钥属于在证书中给出详细信息的人员。
下图了展示了个人/实体获取数字证书的过程:
如图所示,CA接受来自客户端的申请以证明其公钥。 CA在适当验证客户身份后,向该客户发出数字证书。
如上所述,CA向客户颁发证书并协助其他用户验证证书。 CA负责正确识别要求颁发证书的客户的身份,并确保证书中包含的信息是正确的并对其进行数字签名。
CA的关键功能:
证书类别
有四种典型的证书类别:
第1类 - 通过提供电子邮件地址可轻松获取这些证书。
第2类 - 这些证书要求提供额外的个人信息。
第3类 - 这些证书只有在对请求者的身份进行检查后才能购买。
第4类 - 它们被需要高度信任的政府和金融机构使用。
CA可以使用第三方注册机构(RA)对要求证书确认其身份的人或公司进行必要的检查。 RA可能在客户端看起来像一个CA,但它们实际上并不签署发布的证书。
这是发布证书的管理系统,暂时或永久暂停,续订或撤销证书。 证书管理系统通常不会删除证书,因为可能有必要在某个时间点证明其身份,这是出于法律原因。 CA和相关RA运行证书管理系统,以便能够跟踪他们的责任。
虽然客户端的公钥存储在证书中,但关联的私钥可以存储在密钥所有者的计算机上。 这种方法一般不采用。 如果攻击者能够访问计算机,他可以轻松访问私钥。 出于这个原因,私钥存储在通过密码保护的安全可移动存储令牌上。
不同的供应商经常使用不同的专有的存储格式来存储密钥。 例如,Entrust使用专有的.epf格式,而Verisign,GlobalSign和Baltimore使用标准的.p12格式。
1.6 Hierarchy of CA:
由于拥有庞大的网络和全球通信的要求,所有用户从唯一一个可信的CA获得证书是不切实际的。其次,只有一个CA的可用性可能会导致大的阻碍,如果CA受到影响。
在这种情况下,层次认证模型很受关注,因为它允许在两个通信方与相同CA没有信任关系的环境中使用公钥证书。
根CA位于CA层次结构的顶部,根CA的证书是自签名证书。
直接隶属于根CA(例如,CA1和CA2)的CA具有由根CA签名的CA证书。
层次结构中下级CA(例如,CA5和CA6)下的CA具有由上级下级CA签名的CA证书。
证书颁发机构(CA)层次体现在证书链中。证书链跟踪从层次结构中的分支到层次结构根的证书路径。
下图显示了具有从实体证书到两个从属CA证书(CA6和CA3)到根证书颁发机构CA证书的证书链的CA层次结构:
验证证书链是确保特定证书链有效,正确签署和可信的过程。 以下过程验证证书链,从提供验证的证书开始 -
一个正在验证其真实性的客户端提供他的证书,通常连同证书链一直到根CA.
验证者获取证书并使用发行者的公钥进行验证。 发行人的公钥在发行人的证书中找到,该证书位于客户证书旁边的链中。
现在,如果已签署发行人证书的较高的CA由验证方信任,则验证成功并在此停止。
否则,发行人证书的验证方式与客户在上述步骤中完成的相似。 此过程将继续进行,直到在其中找到可信的CA,否则它将持续到根CA。
哈希函数非常有用,并且出现在几乎所有信息安全应用程序中。
哈希函数是将数字输入值转换为另一个压缩数值的 数学函数。 哈希函数的输入具有任意长度,但输出始终为固定长度。
哈希函数返回的值称为消息摘要或简单的散列值。 下面的图片说明了哈希函数:
为了成为一个有效的加密工具,哈希函数具有以下属性:
散列的核心是一个数学函数,该函数在两个固定大小的数据块上运行以创建散列码。 这个哈希函数构成哈希算法的一部分。
每个数据块的大小因算法而异。 通常块大小从128位到512位。 下图演示了哈希函数:
哈希算法涉及上述哈希函数,如分组密码。 每一轮都会输入一个固定的大小,通常是最近消息块和最后一轮输出的组合。
这个过程重复进行多次,以散列整个消息。 哈希算法的示意图如下图所示:
因为第一消息块的散列值变成第二散列操作的输入,其输出改变第三操作的结果,等等。 这种效应被称为散列的雪崩效应。雪崩效应对两个即使是单个数据位也不相同的消息产生明显不同的散列值。理解哈希函数和算法之间的区别。 哈希函数通过对两个固定长度的二进制数据块进行操作来生成哈希码。哈希算法是一个使用哈希函数的过程,指定如何分解消息以及如何将先前消息块的结果链接在一起。
后来在1995年,SHA-1被设计用于纠正SHA-0的所谓弱点。SHA-1是现有SHA哈希函数中使用最广泛的。它被用于几个广泛使用的应用程序和协议,包括安全套接字层(SSL)安全。
2005年,发现了一种在实际时间框架内发现SHA-1冲突的方法,使SHA-1的长期可用性受到怀疑。
SHA-2系列具有四个更进一步的SHA变体,SHA-224,SHA-256,SHA-384和SHA-512,取决于其散列值中的位数。还没有成功的攻击报道过SHA-2哈希函数。
虽然SHA-2是一个强大的哈希函数。虽然有很大的不同,但其基本设计仍然遵循SHA-1的设计。因此,NIST要求提供新的竞争性散列函数设计。
2012年10月,NIST选择Keccak算法作为新的SHA-3标准。 Keccak提供了许多好处,例如高效的表现和良好的攻击抵抗力。
该集包括RIPEND,RIPEMD-128和RIPEMD-160。此算法还有256位和320位版本。
原始的RIPEMD(128位)基于MD4中使用的设计原则,并且发现提供可疑的安全性。 RIPEMD 128位版本是解决原始RIPEMD漏洞的快速修复替代品。
RIPEMD-160是一个改进版本,是使用最广泛的版本。与RIPEMD-128和RIPEMD-160相比,256和320位版本分别减少了意外冲突的可能性,但没有更高的安全等级。
Merkle Tree 默克尔树
哈希算法的一个重要应用是默克尔树(Merkle tree),默克尔树是一种数据结构,通常是一个二叉树,也有可能是多叉树,它以特定的方式逐层向上计算,直到顶部,最顶层叫做默克尔根(Merkle Root),默克尔树最为常见和最简单的是二叉默克尔树。
学习通怎么看课程二维码
查看方法如下:1、打开学习通,点击右下角的我。2、选择要查看课程的课程。3、点击进入课程。4、点击更多,选择分享。5、即可看到分享出来的课程二维码。
学习通如何转码文件?
学习通文件转码的流程一般分为两个步骤:第一步是上传原始视频文件。在学习通平台上,老师可以上传自己录制的视频文件。第二步则是将原始文件转换为符合学习通平台格式要求的视频文件。这个过程通常由学习通官方完成,学生们只需要等待即可。学习通文件转码对于学生们来说具有重要意义。学习通平台所要求的格式不同...
学习通怎么看课程代码
首先打开学习通,然后登录到自己个人账号之后,点开个人主页,然后选择我的课程,点进课程之后见到课程的详情页面,这个时候就会显示这个课程的主讲老师举办单位的情况,然后还有一个最重要的信息,就是里面还会显示课程代码,这个时候你把课程再复制,然后就可以了解到了相应的课程信息。
学习通考试码是所有人都能考吗
不是。学习通考试码不是所有人都能考,学习通考试码是学习通考试,学生需要填写的考试码才能参加考试,也是教师人员发布考试所必须的东西。学习通,学习类手机软件。涵盖了国内各领域顶级教育机构,上千门专业课程可供选择,全面覆盖学历教育、职业培训、语言学习等各个专业。
公益大课堂学习码怎么查自己的
1、首先打开学习通,点击页面下方的“我”。2、其次进入我的页面,点击右上角的学习码。3、最后即可查看自己的学习码名片。每个学生都有一个代码,首次入园和入学的时候采集基本信息,号码终身不变。
学习通怎么看课程邀请码
学习通课程邀请码是由邀请人发送给被邀请人的,查看方式如下:1、如果是通过电子邮件或短信等方式收到的邀请码,可以在邮件或短信中查看。2、如果是通过二维码方式收到的邀请码,可以使用手机扫描二维码,然后查看邀请码信息。3、如果是通过学校或单位发放的邀请码,可以咨询相关负责人员,获取邀请码信息。...
学习通考试码是几位数
学习通考试码是6位数。根据查询相关公开信息显示,考试码是学校为学生在学习通线上测试的科目考试码,不同科目有不同的考试码,相当于试卷的编号。在考试时老师会提供考试码,在学习通的考试哪里输入即可进入考试。
学习通的上传码在哪
学习通的上传码在我的云盘里。学习通上传文件方法如下:1、首先打开学习通app,打开后点击底部的【我】按钮2、进入个人中心后,再点击列表中的【云盘】3、进入云盘后,再点击右上角的【+】4、点击上述按钮后,再点击【手机上传】5、完成上述操作后,再选择需要上传的文件类型6、选择好类型后,接着再...
学习通考试码就是班级码
考试码不是班级码。考试码是学生参加考试和老师发布考试时的数字码,班级码是学生加入班级时的数字码。学习通是一款各大高校都在用的师生交互学习APP,拥有众多学习资源和学习工具,方便老师进行线上教学工作。
学习通邀请码怎么获得?
具体如下:1、打开学习通我的页面,点开小组。(如下图所示)2、打开要设置的小组页面右上角三横杆。(如下图所示)3、在弹出页面里点开小组管理之后打开小组设置。(如下图所示)4、打开后在页面上方找到小组邀请码,然后将小组邀请码开启即可。(如下图所示)学习通学生在线考试操作流程:1、下载...
廖斩瑞潘: 密码系统安全性的定义有2种,包括:明文(Plaintext)和密文(Ciphertext).定义: 1、明文(Plaintext) 一般可以简单的认为明文是有意义的字符或比特集,或通过某种公开的编码标准就能获得的消息.明文常用m或p表示. 2、密文(Ciphertext) 对明文施加某种伪装或变换后的输出,也可认为是不可直接理解的字符或比特集,密文常用c表示.
北塔区18572396572: RSA的全称(密码学)?
廖斩瑞潘: 由美国麻 省理工 学院三 位学者 Riv est、Sh amir 及 Adleman 研 究发 展出 一套 可实 际使用 的公 开金 钥密 码系 统,那 就是 RSA(Rivest-Shamir-Adleman)密码系统.
北塔区18572396572: 谁了解密码学的发展历史? - ?
廖斩瑞潘: 介绍密码学的发展历史 密码学的发展历程大致经历了三个阶段:古代加密方法、古典密码和近代密码. 1.古代加密方法(手工阶段) 源于应用的无穷需求总是推动技术发明和进步的直接动力.存于石刻或史书中的记载表明,许多古代文明,...
北塔区18572396572: 什么是密码学? - ?
廖斩瑞潘: 什么是密码学 密码学是一种实现安全目标自动化的(或者算法形式的)方法.通常,我们所说的“加密算法”只是从在计算机上执行的角度来讨论一个算法,这些算法处理以位形式表示的信息. 更特别地是,人们通常认为密码学就是研究密码...
北塔区18572396572: 请问数据存储加密技术的目的是什么? ?
廖斩瑞潘: 数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文.它的核心是密码学.数据加密...
北塔区18572396572: 密码学的发展过程是怎样的 - ?
廖斩瑞潘: 摘要:密码学从古至今的发展历史,发展过程成中各个阶段的发展情况.以及各个阶段密码学的经典密码以及代表人物,与其在历史上的标志性成果. 关键词:古典密码;密码学发展;加密技术 随着信息化和数字化社会的发展,人们对信息安...
北塔区18572396572: 计算机密码学中有哪些加密算法? - ?
廖斩瑞潘: 传统密码学autokey密码 置换密码 二字母组代替密码 (by charles wheatstone) 多字母替换密码 希尔密码 维吉尼亚密码 替换密码 凯撒密码 rot13 仿射密码 atbash密码 换位密码 scytale grille密码 vic密码 (一种复杂的手工密码,在五十年代早期...
北塔区18572396572: 为什么经典密码学的方法不适应现代环境的应用? 信息安全措施应该是什么样的?如何来实现? - ?
廖斩瑞潘: 密码学仅仅是保障信息安全的一种手段,在理论上能够实现信息的机密性、完整性、来源真实性、不可伪造性等.密码学分为:古典密码学、近代密码学和现代密码学三个阶段,其中:古典密码学:指的是二战之前的密码编码学,强调的是对信...