非对称密码体制
《网络安全》第5-6讲(2.4)
2.4 公钥(非对称)密码体制
2.4.2 公钥密码体制的原理
公钥密码体制的基本数学方法和基本原理如下所述。 2.用于构造公钥密码的常用单向函数 1)多项式求根 有限域GF(p)上的一个多项式
f ( x) ( x anmod p
当给定多项式的系数和x、p以后,利用Honer算法,最多进行 n次乘法,n-1次加法,就可以求得y的值。但已知多项式的系数a 和y、p以后,要求x,就需要对高次方程求根,至少要进行不小 于n2(lbp)2的整数次乘法,当n、p很大时很难求解。
定n以后求p、q的问题称为RSA问题。求n=p×q分解问题有以下几种形式:
(1)分解整数n为p、q; (2)给定整数M、C,求d使得Cd≡M mod n; (3)给定整数k、C,求M使得Mk≡C mod n; (4)给定整数x、C,决定是否存在y使得x≡y2mod n(二次剩余问题)。
遵义师范学院
给定x求y是容易的,但是当p很大时,从x=logby中要计算x是非常困难 的。如b=2,p=2100,给定x求y,只需作100次乘法,利用高速计算机可 在0.1ms内完成。而给定y求x,所需计算量为1600年。可见,有限域 GF(p)中的指数函数f(x)=bx是一个单向函数。
x=logby
遵义师范学院
遵义师范学院
2.4 公钥(非对称)密码体制
2.4.1 公钥密码体制的基本概念 3.电子签证机关
电子签证机关(即CA)是负责颁发数字证书的权威机构。CA自 身拥有密钥对,可以使用私钥完成对其他证书的数字签名,同时也拥 有一个对外开放的证书(内含公钥)。网上的公众用户通过验证CA的 数字签名建立信任,任何人都可以得到CA的证书(含公钥),用以验 证它所签发的其他证书。如果用户想建立自己的证书,首先要向CA提 出申请证书的请求。在CA判明申请者的身份后,便为他分配一个密钥 对,并且CA将申请者的公钥与身份信息绑在一起,在为之完成数字签 名后,便形成证书发给那个用户(申请者)。如果一个用户想鉴别数 字证书是否为假冒的,可以用证书发证机构CA的公钥对该证书上的数 字签名进行验证,数字签名验证的过程是使用CA公钥解密的过程,验 证通过的证书就被认为是有效的。CA在公开密码体系中非常重要,负 责签发证书以及证书和密钥的管理等必要工作。CA相当于网上公安机 构,专门发放、验证电子身份证。
密码学6非对称密码体制课件
• 当e与m互素,则存在正整数d,使得
ed=1 (mod m) 称d是e关于模m的乘法逆元(简称“模 乘逆元”或“模逆元”),记作e-1 例如:设m=13,
则5*8=40=3*13+1=1 (mod 13) 故 5-1=8 • 欧拉定理
6.1 概述
6.1.1 对称密码体制的缺陷
• 密钥的安全传递比较困难
• n个用户多点通信所需密钥数为n(n-1)/2个
• 难以提供对主动攻击的抗击
6.1.2 公钥(非对称)密码体制的基本思想
Whitfield Diffie和Martin Hellman在1976年 首先提出:用公开的密钥(公钥)加密,用与之 对应的不公开的密钥(私钥)解密。
(将一个充分大的正整数分解成两个 素数之积几乎是不可能的) 1. 数学基础是著名的欧拉(Euler)数论
6.3.2 RSA密码体制的创建 • 选择两个充分大的不同的素数p和q • 计算积n=pq及其欧拉数φ(n)=(p-1)(q-1) • 选择一个介于1到φ(n)之间且与φ(n)互素的正整 数e 即1<e<φ(n)且GCD(e,φ(n))=1 • 求出d=e-1 (mod φ(n) ) 即e d=1 (mod φ(n) )
公钥密码体制提出的标志性文献──密码学 的新方向:
W.Diffie and , New Directions in Cryptography, IEEE Transaction on Information Theory, V.IT22.No.6, Nov 1976, PP.644-654
密码技术基础知识ppt课件
公钥基础设施
PKI系统组成
证书发布系统 证书发布系统负责证书的发放,如可以通过用户自己
,或是通过目录服务器发放。目录服务器可以是一个组织中现 存的,也可以是PKI方案中提供的。
20
公钥基础设施
PKI的应用
PKI的应用非常广泛,包括应用在web服务器和浏览器 之间的通信、电子邮件、电子数据交换(EDI)、在Intenet上的 信用卡交易和虚拟私有网(VPN)等。
对称加密算法相比非对称加密算法来说,加解密的效率要高得 多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时, 密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混 合使用。
12
目录
公钥基础设施
简介 PKI系统组成 PKI的应用
13
公钥基础设施
简介
PKI是“Public Key Infrastructure”的缩写,意为“公钥基础 设施”。简单地说,PKI技术就是利用公钥理论和技术建立的提供信息 安全服务的基础设施。公钥体制是目前应用最广泛的一种加密体制, 在这一体制中,加密密钥与解密密钥各不相同,发送信息的人利用接 收者的公钥发送加密信息,接收者再利用自己专有的私钥进行解密。 这种方式既保证了信息的机密性,又能保证信息具有不可抵赖性。
26
数字摘要技术
数字摘要的常用技术
4、Base64 Base64是一种基于64个可打印字符来表示二进制数据的方法 ,由于2的6次方等于64,所以每6位为一个单元,对应摸个可打印字 符,三个娭毑有24位,,对应4个Base64单元,即三个字节需要用4个 打印字符来表示。
27
数字摘要技术
数字摘要的应用
40
密钥管理技术
密钥的分配
第4章-非对称密码体制-网络10
回代: 1 =19-6×3 =19-6×(60-3×19)=19×19-6×60 =19×(79-1×60)-6×60=19×79-25×60
=19×79-25×(3220-40×79)
=1019×79-25×3220 两边同时对模3220进行求余运算得
1019×79≡1 mod 3220
于是d =1019 (4)公开公钥PU ={e, n} = {79,3337}
20
ห้องสมุดไป่ตู้
RSA的安全性依赖于大数分解困难,即从一个密钥 和密文推断出明文的难度等同于分解两个大素数的 积。显然,分解n是最常遇到的攻击方法。在算法 中要求p和q均大于100位十进制数,这样的话n至少 200位十进制数,目前人们已能分解140多位的十进 制数的大素数。 最新记录是129位十进制数的因数分解,在网络通 过分布计算被成功分解。估计对200位十进制数的 因数分解,在亿次计算机上也要进行55万年。
23
2. 加密过程
(1)在公钥库中查得用户U的公开密钥:y; (2)对于明文m,随机选取一个整数r,r∈[0, p-1] (3)计算 c1≡ gr (mod p) c2 ≡ myr (mod p) (4)将(c1,c2)作为密文发给用户U.。 (1)先计算 w ≡ (c1x)-1 (mod p) (2)再计算出明文 m ≡ c2∙w(mod p)
10
图4-2 公钥认证模型
发送方A 攻击者 接收方B
消 息
M
解 密 算 法 PRA
C
加 密 算 法 PUA
M
消 息
密钥源
11
4.2 RSA密码体制
RSA密码体制是1977年由Rivest、Shamir、 Adleman提出的非常著名的公钥密码算法。
非对称密码体制课件
• 解决了对称密码的诸多局限性
2020/11/18
非对称密码体制
4
非对称密码基本概念:非对称密码体制
明文
加密器 EK
PK
密钥产生器
密文
解密器 DK
SK
明文
• 密钥—(PK, SK) • PK:俗称公钥(Public Key),通常公钥是公开的,可以被任何实 体通过有效渠道获取; • SK:俗称私钥(Secret Key),通常私钥是保密的,不能被任何实 体通过非法渠道获取;
2020/11/18
非对称密码体制
3
非对称密码基本概念:非对称密码的提出
• 对称密码的局限性 • 密钥管理的困难性问题 • 陌生人间的保密通信问题 • 数字签名问题
非对称密码(1976年由W. Diffie和M. Hellman提出)与对称密码的几点 区别:
• 双钥——双钥密码、公钥密码
• 基于数学函数,而非替换和换位
2020/11/18
非对称密码体制
6
非对称密码基本概念:非对称密码的算法组成
密钥生成KG( ) • 根据输入的安全参数 ,输出公钥和私钥对(PK, SK)
• 加密E( ) • 根据输入的公钥和消息,输出密文。
• 解密D( ) • 根据输入的解密私钥和密文,算法输出消息或输出表示密文不合法的特殊符号“?”
明文
加密器 EK
K
密文
解密器 DK
K
明文
密钥产生器
• 密钥管理:若N个人相互保密通信,每人必须拥有(N-1)个私钥,N很 大时,需要保存的私钥很多。如何解决?
• 可信中心分发:共需要发N*(N-1)/2个私钥:例如N =1000时, 999 *1000/2 = 499500
信息安全导论(4-3 密码基础-非对称密码)
37
RSA算法的安全性 RSA算法的安全性
RSA的安全性是基于分解大整数困难的假定 的安全性是基于分解大整数困难的假定 的安全性是基于分解大整数困难
如果RSA的模数 被成功地分解为 ×q,则 的模数n被成功地分解为 如果 的模数 被成功地分解为p× , 获得φ(n)=(p-1)(q-1),从而攻击者能够从 获得 , 公钥e解出 解出d, 公钥 解出 ,即d≡e-1 mod φ(n),攻击成 ≡ , 功.
由私钥及其他密码信息容易计算出公开密钥 由公钥及算法描述, 由公钥及算法描述,计算私钥是困难的
因此, 因此,公钥可以发布给其他人
6
非对称加密示意图
注意
注意
7
公钥密码的核心是使用一种特殊的函 数——单项陷门函数,从一个方向求值 单项陷门函数, 单项陷门函数 是容易的, 是容易的,但逆向计算很困难 定义: 是一个函数 是一个函数, 定义:设f是一个函数,如果对于任意给 定的x,计算y,使得y=f(x)是容易计算 定的 ,计算 ,使得 是容易计算 但对于任意给定的y,计算x是难解 的,但对于任意给定的 ,计算 是难解 即求f的逆函数是难解的 则称f是 的逆函数是难解的, 的,即求 的逆函数是难解的,则称 是 一个单向函数 一个单向函数
31
RSA中的计算问题
32
RSA中的计算问题
33
前例
则1=96-5×19=5*(-19)=5*77 mod96 = - × 5×77=1 mod96 × = 下为77 则5的乘法逆元在 mod96下为 的乘法逆元在 下为
34
例
35
36
验证: × = 验证:17×17=289=3×96+1=1 mod96 = × + =
38
《非对称密码体制》课件
使用扩展欧几里得算法,计算d, 满足d*e % phi(n) = 1。
2. 计算n
计算n=p*q。
4. 选择公钥
选择一个与phi(n)互质的整数e。
6. 完成
完成后,公钥由n和e组成,私钥由d组成。
RSA算法的解密过程
1. 加密数据
使用公钥(n, e)加密消息M,产生密文C。
2. 计算明文
1
1. 选择素数
选择一个素数q, 以及一个大素数p = kq + 1, 保护q。
2
2. 选取g值
选择一个能提供一个循环群的数g(1 <= g <= p-1)。
3
3. 计算x,y
任意选择一个512位的长整数k,然后计算x = g^k mod p, y = (hash(M) + x*a)/k mod q, hash(M)为M的哈希值。
使用私钥d,计算出原始消息M。M = Cd (mod n)
3. 完成
接收方使用私钥d,根据公式计算出M。
RSA算法的安全性分析
RSA算法显然会受到攻击,但我们认为这个算法还是安全的。攻击者可以使用因子分解算法来破解RSA 算法,但是这需要一个非常长的时间。对于RSA算法安全保护的加强,一般使用扩展和混淆技术。
非对称密码的优势
提高了数据传输的安全性, 避免了密钥管理的麻烦。
小提示
有时候也会将它们结合使 用,来发挥它们的优势。
典型的非对称密码算法
目前最流行的非对称密码算法有:RSA算法、DSA算法、ECC算法等。下图是其概述:
RSA算法
使用65000位的密钥。在加密 时使用一个公钥,但需要一个 私钥才能进行解密。
非对称密码体制
非对称密码体制ppt课件
病原体侵入机体,消弱机体防御机能 ,破坏 机体内 环境的 相对稳 定性, 且在一 定部位 生长繁 殖,引 起不同 程度的 病理生 理过程
小结
非对称密码体制 公开密钥加密系统基本原理如图所示。
公开密钥加密系统的优势是具有保密功能和鉴别功能。 公钥体制的主要特点:将加密和解密能力分开,实现多用户加 密的信息只能由一个用户解读,或一个用户加密的信息可由多用户 解读。
务,如:与哈希函数联合运用可生成数字签 名,可用于安全伪随机数发生器的构造,零 知识的证明等。
病原体侵入机体,消弱机体防御机能 ,破坏 机体内 环境的 相对稳 定性, 且在一 定部位 生长繁 殖,引 起不同 程度的 病理生 理过程
实例:使用加密软件PGP
• 软件介绍:PGP是全球著名的、在信息安 全传输领域首选的加密软件,其技术特性 是了非对称的“公钥”和“私钥”加密体 系,创造性地把RSA公钥体系和传统的加 密体系结合起来,是目前最难破译的密码 体系之一。
• Alice拥有Joy、Mike、Bob和Ted四个人的公钥。 当Alice采用Bob的公钥对明文进行加密,然后把 密文进行传输。当Bob收到后,应用Bob的私钥进 行解密,得到原始明文。即使在传输过程中,被 其他人得到密文,由于他们不拥有Bob的私钥, 所以不能进行解密,不能得到原始明文。这就是 公钥密码体制的加密过程。
病原体侵入机体,消弱机体防御机能 ,破坏 机体内 环境的 相对稳 定性, 且在一 定部位 生长繁 殖,引 起不同 程度的 病理生 理过程
实例:使用加密软件PGP
• 操作步骤:
– (1)安装软件; – (2)汉化软件; – (3)注册软件; – (4)创建和设置初始用户; – (5)导出并分发公钥; – (6)导入并设置其他人的公钥; – (7)使用公钥加密文件; – (8)将加密文件发送给对方; – (9)使用私钥进行解密。
什么是公钥密码体制
什么是公钥密码体制
公钥密码体制也称非对称密码体制或者双钥密码体制,是基于数学函数(如单向陷门函数)而不是基于置换和代换的工具。
公钥密码算法的最大特点是采用两个相关密钥将加密和解密能力分开,其中一个是公开的,称为公钥,用于加密;其中一个是为用户专用的,是保密的,称为私钥,用于解密。
公钥密码体制是为了解决对称密码体制中最难解决的2个问题而提出的:
1.密钥分配问题:在对称密码中,接受方和发送方使用相同密钥。
一般情况下该密钥
通过加密信道进行传输。
但是加密信道可能会被攻击者攻击。
2.数字签名问题:如果使用对称加密来进行数字签名,那么在对密钥进行管理和分发
时带来被攻击者攻击的问题。
在公钥密码体制中存在2个密钥:公钥,私钥。
公钥和加密算法是公开的,公钥用于加密数据;私钥是保密的,用于解密。
以上内容仅供参考,如需获取更多详细信息,建议查阅公钥密码体制相关的资料或咨询数学领域专业人士。
对称密码体制和非对称密码体制的特点比较
对称密码体制和非对称密码体制的特点比较?密码体制分为私用密钥加密技术(对称加密)和公开密钥加密技术(非对称加密)。
(一)、对称密码体制对称密码体制是一种传统密码体制,也称为私钥密码体制。
在对称加密系统中,加密和解密采用相同的密钥。
因为加解密密钥相同,需要通信的双方必须选择和保存他们共同的密钥,各方必须信任对方不会将密钥泄密出去,这样就可以实现数据的机密性和完整性。
比较典型的算法有DES(Data Encryption Standard数据加密标准)算法及其变形Triple DES(三重DES),GDES(广义DES);欧洲的IDEA;日本的FEAL N、RC5等。
DES标准由美国国家标准局提出,主要应用于银行业的电子资金转帐(EFT)领域。
DES的密钥长度为56bit。
Triple DES 使用两个独立的56bit密钥对交换的信息进行3次加密,从而使其有效长度达到112bit。
RC2和RC4方法是RSA数据安全公司的对称加密专利算法,它们采用可变密钥长度的算法。
通过规定不同的密钥长度,,C2和RC4能够提高或降低安全的程度。
对称密码算法的优点是计算开销小,算法简单,加密速度快,是目前用于信息加密的主要算法。
尽管对称密码术有一些很好的特性,但它也存在着明显的缺陷,包括: l)进行安全通信前需要以安全方式进行密钥交换。
这一步骤,在某种情况下是可行的,但在某些情况下会非常困难,甚至无法实现。
例如,某一贸易方有几个贸易关系,他就要维护几个专用密钥。
它也没法鉴别贸易发起方或贸易最终方,因为贸易的双方的密钥相同。
另外,由于对称加密系统仅能用于对数据进行加解密处理,提供数据的机密性,不能用于数字签名。
因而人们迫切需要寻找新的密码体制。
2)规模复杂。
(二)、非对称密码体制非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被提出来的。
在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。
非对称密码体制的工作原理
非对称密码体制的工作原理
非对称密码体制的工作原理是基于一对密钥,分别称为公钥和私钥。
公钥是可公开的,任何人都可以获得,而私钥只有密钥的持有者可以访问。
工作原理如下:
1. 密钥生成:密钥的持有者首先生成一对公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
2. 加密:发送方想要加密一条消息时,使用接收方的公钥对消息进行加密。
只有拥有私钥的接收方才能解密该消息。
3. 解密:接收方收到加密的消息后,使用自己的私钥对消息进行解密,以获取原始的明文消息。
4. 数字签名:私钥的持有者还可以使用自己的私钥对消息进行数字签名。
数字签名是对消息的摘要进行加密,用于验证消息的完整性和身份认证。
5. 验证签名:接收方可以使用发送方的公钥对数字签名进行解密,以验证消息的完整性和发送方的身份。
通过使用非对称密码体制,可以实现安全的通信和数据传输。
加密和解密过程都是基于不同的密钥,保证了数据的机密性。
而数字签名和验证签名的过程则用于保证数据的完整性和真实性。
4.4非对称密码技术
为实现加密,需要公开(e, n),为实现解密需要(d, n)。
问题……
如何计算ab mod n?
如何判定一个给定的整数是素数? 如何找到足够大的素数p和q ?
如何计算ab mod n?
要点1:(a x b) mod n = [(a mod n) x (b mod n)] mod n] 要点2:a16=aaaaaaaaaaaaaaaa =a2, a4,a8, a16 更一般性的问题:am k m的二进制表示为bkbk-1…b0, 则 m bi 2 i
4.4.1 非对称密码学的基本原理
4.4.1 非对称密码学的基本原理
4.4.1 非对称密码学的基本原理
4.4.1 非对称密码学的基本原理
涉及到各方:发送方、接收方、攻击者 涉及到数据:公钥、私钥、明文、密文 非对称密码算法的条件:
产生一对密钥是计算可行的 已知明文m和公钥PK,计算c=Epk(m)是容易的. 已知明文m和私钥SK,计算c=Esk(m)是容易的. 对于攻击者,利用公钥来推断私钥是计算不可行的 已知公钥和密文,恢复明文是计算不可行的 (可选)加密和解密的顺序可交换
公钥
C f ( M ) M e mod n
M f 1 (C ) C d mod n
私钥 图 RSA利用单向陷门函数的原理
开 始
产 生 第 一 个 素 数
产 生 第 二 个 素 数
两 个 素 数 是 否 相 同
否
产 生 公 钥
求 欧 拉 值
产 生 加 密 密 钥
产 生 解 密 密 钥
如何判定一个给定的整数是素数
Miller and Rabin, WITNESS算法 WITNESS(a,n) 判定n 是否为素数,a是某个小于n的整数
非对称密码体制
非对称钥不等于解 密密钥,且无法从任意一个密钥推导出另一个密钥, 这样就大大加强了信息保护的力度,而且基于密钥 对的原理很容易实现数字签名和电子信封。 非对称加密算法中比较典型的是RSA算法,此外 还有背包密码算法、椭圆曲线算法、EIGamal算法等。 下面主要介绍最常用的RSA算法。
在采用公钥体制的情况下A向B传输数据的过
程,如下图所示:
使用两个密钥的加密和解密
非对称密码体制
1.1 非对称密码体制的实现过程
与对称密码技术相比较,利用非对称密码技 术进行安全通信,有以下优点: 通信双方事先不需要通过保密信道交换密钥。 密钥持有量大大减少。 非对称密码技术还提供了对称密码技术无法或很 难提供的服务。
(5)将明文P(假设P是个小于r的整数)加密为密文
C,计
算公式为:C = Pe mod r(e为幂次方)
(6)将密文C解密为明文P,计算公式为:
P = Cd mod r(d为幂次方)
非对称密码体制
1.3 对称密码体制与非对称密码体制的比较
对称密码体制是应用较早的密码体制,技术成熟。 在对称密码体制中,使用的密钥只有一个,发收信双方 都使用此密钥对数据进行加密和解密,这要求解密方事 先必须知道加密密钥。对称密码体制的特点是算法公开、 计算量小、加密速度快、加密效率高。不足之处是交易 双方都使用同样密钥,安全性得不到保证。密钥管理成 为了用户的负担。对称密码体制在分布式网络系统上使 用较为困难,主要是因为密钥管理困难,使用成本较高。
非对称密码体制
1.2 RSA算法
RSA算法是第一个既能用于数据加密又能 用于数字签名的算法,是由美国麻省理工学院 的Rivest、Shamir和Adleman在1978年提出的。
2非对称加密实验
(6)解密
清除明文文本框中的内容,点击“解密”按钮对密文进行解密,明文默认以十六进制形式显示在明文文本框中,如图1.1.720所示;可选择以文本形式查看明文。
(二)扩展实验
(1)在扩展实验中点击“ELGAMAL扩展实验”按钮,进入ELGAMAL扩展实验窗体。
(1)点击“扩展实验”框中的“RSA计算”按钮,进入RSA计算窗体。
输入报文信息,点击“计算MD5值”生成报文信息的信息摘要,选择p、q值,计算n、φ(n)、e和d并输入相应的文本框中,点击“检验”按钮对计算的各个参数值进行检验。
检验无误后,根据上述计算得到的RSA私钥,计算报文MD5值即报文摘要的前8位的签名值,并输入相应的文本框;点击“生成签名并检验”按钮,检验签名输入是否正确并自动生成消息摘要前8位的签名值并显示,
标准方法可选择公钥加密/私钥解密形式和公钥加密/私钥解密形式进行加解密,此处以公钥加密/私钥解密形式进行加解密,公钥加密/私钥解密可参照完成;注意在一次加解密过程中不要重新生成密钥对。
点击“公钥加密”按钮使用生成的公钥对明文进行加密,密文以十六进制显示在密文文本框中;清除明文文本框中的内容,点击“私钥解密”按钮对密文进行解密,明文默认以文本形式显示在明文文本框中,如图1.1.72所示;可选择以16进制查看明文。
具体步骤可参照古典密码实验中实验步骤二。
三、ECC
(一)扩展实验
(1)在扩展实验中点击“ECC扩展实验”按钮,进入ECC扩展实验窗体。
(2)确定合适的椭圆曲线,获取该曲线的基础解点集。首先,在主窗口的椭圆曲线组合框内的相应文本框中,输入素数p,以及椭圆曲线的2个系数a和b;然后,点击“测试曲线”,得到该椭圆曲线的基础解点集。
精品课件-应用密码学-第5章 非对称密码(3)
2020/11/19
15
1155
图5-1 y2≡x3+x+6所表示的曲线 图5-4 y2≡x3+x+6 (mod 11)所表示的曲线
通过比较y2≡x3+x+6在平面的曲线(见图5-1所示)和y2≡x3+x+6 ( mod 11) 在平面上的点(如图5-4所示),直观感觉没有太多的联系。
P +Q+ R1=O。则P+Q =- R1=R,如图5-2。
2020/11/19
2020/11/219020/11/
图5-2 R=P+Q示意图 2020/11/19
8
8 88
点P的倍点定义为:过P点做椭圆曲线的切线,设与椭圆曲线交于R1, 则 P+P+ R1=O, 故2P=- R1=R。如图5-3。
2020/11/19
5
5 55
本章的介绍以第一种椭圆曲线为主,如图5-1是y2≡x3+x+6所表示的曲线,该图 可以用matlab实现。显然该曲线关于x轴对称。
图5-1 y2≡x3+x+6所表示的 曲线
2020/11/19
2020/11/219020/11/
2020/11/19
6
6 66
2.椭圆曲线的加法
2020/11/19
2020/11/19
2020/11/19
20
2200
- ④ 计算点:(x1,y1)=kP - ⑤ 计算点:(x2,y2)=kQ,如果x2=0,则返回第③步 - ⑥ 计算:c=mx2 - ⑦ 传送加密数据(x1,y1,c)给B
(4)解密过程
当实体B解密从A收到的密文(x1,y1,c)时,执行步骤:
第九章密码技术9-1简述对称密钥密码体制、非对称密钥密码体制的
第九章密码技术9-1 简述对称密钥密码体制、非对称密钥密码体制的第九章密码技术与压缩技术9-1 简述对称密钥密码体制、非对称密钥密码体制的加密原理和各自的特点。
对称密码体制的加密方式可分为:(1)序列密码,。
它的主要原理是:通过有限状态机制产生性能优良的伪随机序列,使用该序列加密信息流,得到密文序列。
(2)分组密码。
分组密码的工作方式是将明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。
其主要特点:加解密双方在加解密过程中要使用完全相同或本质上等同的密钥。
非对称密钥密码体制的加密原理:在加密过程中,密钥被分解为一对。
这对密钥中的任何一把都可作为公开密钥通过非保密方式向他人公开,用于对信息的加密;而另一把则作为则私有密钥进行保存,用于对加密信息的解密。
其特点有:具有较强的保密功能,还克服了密钥发布的问题,并具有鉴别功能。
9-2 为什么说混合加密体制是保证网络上传输信息的安全的一种较好的可行方法,混合加密体制采用公开密钥密码技术在通信双方之间建立连接,包括双方的认证过程以及密钥的交换(传送秘密密钥),在连接建立以后,双有可以使用对称加密技术对实际传输的数据进行加密解密。
这样既解决了密钥分发的困难,又解决了加、解密的速度和效率问题,是目前解决网络上传输信息安全的一种较好的可行方法。
9-3 简述链路加密、节点加密和端对端加密等三种加密方式的特点。
链路加密方式只对通信链路中的数据加密,而不对网络节点内的数据加密。
使用链路加密装置能为链路上的所有报文提供传输服务:即经过一台节点机的所有网络信息传输均需加、解密,每一个经过的节点都必须有加密装置,以便解密、加密报文。
节点加密方式在中间节点里装有用于加、解密的保护装置,即由这个装置来完成一个密钥向另一个密钥的变换。
除了在保护装置里,即使在节点内也不会出现明文。
端对端方式由发送方加密的数据在没有到达最终目的地——接受节点之前不被解密。
加密、解密只是在源节点和目的节点进行。
密码学
1.密码体制分类:1)对称密码体制(密钥必须完全保密、加密与解密密钥相同,或可由其中一个很容易推出另一个,又称秘密密钥、单钥、传统密码体制,包括分组密码和序列密码)优点:加解密速度较快,有很高的数据吞吐率;使用的密钥相对较短;密文的长度与明文长度相同;缺点:密钥分发需要安全通道;密钥量大,难于管理;难以解决不可否认问题。
2)非对称密码体制(使用两个密钥,一个是对外公开的公钥,一个是必须保密的私钥,不能由公钥推出私钥,又称双钥或公开密钥密码体制)优点:密钥的分发相对容易;密钥管理简单;可以有效地实现数字签名。
缺点:与对称密码体制相比,非对称密码体制加解密速度较慢;同等安全强度下,非对称密码体制要求的密钥位数要多一些;密文的长度往往大于明文长度。
2.AES与DES对比:1)相似处:二者的圈(轮)函数都是由3层构成:非线性层、线性混合层、子密钥异或,只是顺序不同;AES的子密钥异或对应于DES中S盒之前的子密钥异或;AES的列混合运算的目的是让不同的字节相互影响,而DES中F函数的输出与左边一半数据相加也有类似的效果;AES的非线性运算是字节代换,对应于DES中唯一的非线性运算S盒;行移位运算保证了每一行的字节不仅仅影响其它行对应的字节,而且影响其他行所有的字节,这与DES中置换P相似。
2)不同之处:AES的密钥长度(128位192位256位)是可变的,而DES的密钥长度固定为56位;DES是面向比特的运算,AES是面向字节的运算;AES的加密运算和解密运算不一致,因而加密器不能同时用作解密器,DES 则无此限制。
3.Hash函数:也称散列、哈希、杂凑函数等,是一个从消息空间到像空间的不可逆映射;可将任意长度的输入经过变换得到固定长度的输出;是一种具有压缩特性的单向函数。
性质:1)H可应用于任意长度的消息2)H产生定长的输出3)对任意给定的消息x,计算H(x)较容易,用硬件和软件均可实现4)单向性5)抗弱碰撞性6)抗强碰撞性应用:数字签名;生成程序或者文档的数字指纹;用于安全传输和存储口令特点:1)输入数字串与输出数字串具有唯一的对应关系;输入数字串中2)任何变化会导致输出数字串也发生变化;从输出数字串不能够反求出输入数字串。
简述密码体制的分类方法
简述密码体制的分类方法密码体制的分类方法主要有以下几种:1. 对称密码体制(Symmetric Cryptography):也称为传统密码体制,加密和解密使用相同的密钥。
常见的对称密码算法有DES、AES等。
对称密码的优点是运算速度快,缺点是密钥管理困难,需要安全地分发和保存密钥。
2. 非对称密码体制(Asymmetric Cryptography):也称为公钥密码体制,加密和解密使用不同的密钥。
公钥用于加密,私钥用于解密。
常见的非对称密码算法有RSA、DSA等。
非对称密码的优点是密钥管理方便,缺点是运算速度慢。
3. 散列函数(Hash Function):散列函数将输入的任意长度的数据映射为固定长度的输出,常用于数据的完整性验证和密码存储。
常见的散列算法有MD5、SHA-1、SHA-256等。
4. 消息认证码(Message Authentication Code):消息认证码通过对消息进行加密并附加校验值(MAC)来实现消息的完整性和认证。
常见的MAC算法有HMAC、CMAC等。
5. 数字签名(Digital Signature):数字签名用于确认消息的发送者身份和保证消息的完整性和不可抵赖性。
常见的数字签名算法有RSA、DSA等。
6. 公钥基础设施(Public Key Infrastructure,PKI):PKI是一种基于非对称密码体制的密码体系,通过证书颁发机构(Certification Authority,CA)对公钥进行认证和管理,从而实现安全的交流和身份验证。
这些分类方法根据密码体制的特点和用途来进行划分,每种密码体制都有不同的应用场景和安全特性,根据具体的需求选择合适的密码体制可以保证信息的安全与可靠性。
非对称密码体制
非对称密码体制
非对称密码体制的基本概念 非对称密码体制的原理 RSA算法 RSA算法中的计算问题 RSA算法的安全性 非对称密码体制的应用
非对称密码体制的基本概念
非对称密码(公钥密码)与所有以前的密码方法的不同点
基于的基本思想不同 密钥的使用方式不同
公钥密码算法的密钥具有如下特点
是加密密钥与解密密钥是本质上不同的 是大多数公钥密码算法的加密密钥和解密密钥具有互换的性质,即两者是相对的
网络信息安全技术
非对称密码体制
非对称密码体制(Asymmetric CryptoSystem),也称为公钥密码体制(Public Key Cryptosystem),是现代密码学的重要组成部 分。公钥密码的思想在1976年由Diffie和Hellman在 其《密码学新方向》一文中提出。Rivest、Shamir 和Adleman在1978年提出了首个非对称密码体制, 即著名的RSA公钥密码体制。非对称密码体制的发明 是现代密码的具有里程碑意义的重要事件,它的出现 标志着现代密码学的创立。
可以通过加密算法生成密文:
C EPKB (M )
接收方B使用私有密钥容易通过解密算法对密文进行解密,以恢复原来的明文
从公开密钥PKB推出私有密钥SKB,在计算上是不可行的
非对称密码体制的原理
定义 单向陷门函数满足下列条件的函数f:D→V
1)对于任意给定的x∈D,计算y=f(x)是容易的。 2)对于几乎所有任意给定y∈V,计算x∈D使得y=f(x),
RSA算法中的计算问题
即计算(m)cmod N是RSA非对称密码 体制中的主要运算,其计算可以由 c-1次的模乘来实现,然而当比较
(m)c mod N 的有大效时计,算这问不题是一个好的算法,因为
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学数学与统计学实验教学中心实验报告一、实验目的:通过实验掌握非对称密码体制的重要思想。
二、实验内容:查阅资料,实现RSA密码体制的编码算法、译码算法、密钥生成算法查阅资料,实现ECC密码体制的编码算法、译码算法、密钥生成算法三、实验环境Win7、Eclipse四、实验过程(请学生认真填写):实验过程、结果以及相应的解释:1. 预备知识非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被提出来的。
在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。
如果一个人选择并公布了他的公钥,另外任何人都可以用这一公钥来加密传送给那个人的消息。
私钥是秘密保存的,只有私钥的所有者才能利用私钥对密文进行解密。
公钥密码体制的算法中最著名的代表是RSA系统,此外还有:背包密码、McEliece密码、Diffe_Hellman、Rabin、零知识证明、椭圆曲线、EIGamal算法等。
公钥密钥的密钥管理比较简单,并且可以方便的实现数字签名和验证。
但算法复杂,加密数据的速率较低。
公钥加密系统不存在对称加密系统中密钥的分配和保存问题,对于具有n个用户的网络,仅需要2n个密钥。
公钥加密系统除了用于数据加密外,还可用于数字签名。
2. 实验过程(一)RSA加密算法A、原理分析:RSA的具体计算算法:假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。
她可以用以下的方式来产生一个公钥和一个私钥:1.随意选择两个大的质数p和q,p不等于q,计算N=pq。
2.根据欧拉函数,求得r= φ(n) = φ(p)φ(q) = (p-1)(q-1)3.选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。
(模反元素存在,当且仅当e与r互质)4.将p和q的记录销毁。
(N,e)是公钥,(N,d)是私钥。
Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
加密消息假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。
他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。
假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。
用下面这个公式他可以将n加密为c:计算c并不复杂。
Bob算出c后就可以将它传递给Alice。
解密消息Alice得到Bob的消息c后就可以利用她的密钥d来解码。
她可以用以下这个公式来将c转换为n:得到n后,她可以将原来的信息m重新复原。
解码的原理是以及ed ≡1 (mod p-1)和ed ≡ 1 (mod q-1)。
由费马小定理可证明(因为p和q是质数)和这说明(因为p和q是不同的质数,所以p和q互质)注:本内容参考维基百科RSA加密算法,可能与老师说的有略微不同。
B、具体代码如下://具体实现的代码//RSA实现时候用大数数来做比较简单public class RSA1 {private final static SecureRandom random = new SecureRandom();private static BigInteger d; // 为私钥{d,n}中的dprivate static BigInteger e; // 其实就是公钥 <e,n>中的eprivate static BigInteger n; // 为公开的 p x qprivate static BigInteger p; // 需要保密的大素数 p qprivate static BigInteger q;/*** 产生长度为N位的公钥和私钥* @param N*/public void genKey(int N) {// 产生两个N/2位的大素数p和qp = BigInteger.probablePrime(N / 2, random);q = BigInteger.probablePrime(N / 2, random);// 计算(p-1)*(q-1)BigInteger phi =(p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));// 计算模数p*qn = p.multiply(q);// 随便找一个b,使得gcd(b, phi) =1;// 通用的公钥是2^16 + 1=65537e = new BigInteger("65537");// 计算出a,即b的模n逆d = e.modInverse(phi);}/*** 加密函数* @param plainText* 明文* @return密文*/public byte[] encrypt(byte[] plainText) {return new BigInteger(plainText).modPow(e,n).toByteArray();}/*** 解密函数* @param cipherText* 密文* @return明文*/public byte[] decrypt(byte[] cipherText) {return new BigInteger(cipherText).modPow(d,n).toByteArray();}public static void main(String[] args) throws FileNotFoundException,IOException, ClassNotFoundException {RSA1 rsa = new RSA1();rsa.genKey(128); // 产生密钥// 加密一句消息byte[] cipher = rsa.encrypt("hello word".getBytes());System.out.println("RSA 加密:" + new String(cipher));// 解密byte[] plain = rsa.decrypt(cipher);System.out.println("RSA 解密:" + new String(plain));}}结果如下:运行时候,主要的是以下代码:运行结果如下图://得到结果与真实结果一样。
说明正确(二)ECC加密算法A、原理分析:椭圆曲线密码学(Elliptic curve cryptography,缩写为ECC)是基于椭圆曲线数学的一种公钥密码的方法。
椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。
ECC的另一个优势是可以定义群之间的双线性映射,基于Weil 对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。
不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。
ECC的具体计算算法:a)密钥的生成Bob(使用者)执行了下列计算:i) 在区间[1,n-1]中随机选取一个整数d。
ii) 计算点Q=dP (d个P相加)iii) Bob公开自己的公开密钥(E(Fq),p,n,Q)iv) Bob的私钥为整数d。
Alice要发送消息m给Bob,Alice执行:i) 查找Bob的公钥(E(Fq),p,n,Q),ii) 将m表示成一个域元素m∈Fq,iii) 在区间[1,n-1]内选取一个随机数k,iv) 依据Bob的公钥计算点(x1,y1)=kP(k个P相加)v) 计算点(x2,y2)=kQ,如果x2=0,则回到第iii)步Ⅵ)计算C=mx2Ⅶ)传送加密数据(x1,y1,C)给Bobb) Bob的解密过程Bob收到Alice的密文(x1,y1,C)后,执行i) 使用私钥d,计算点(x2,y2)=d(x1,y1)通过计算m=C*x2,恢复出明文数据B、具体代码如下://具体实现的代码package ECC;public class ECC {private int a, p;private POINT ukAlpha, ukBeta;private int rKey;/*** Method ECCImpClass*/public ECC(int a, int p, int priK, POINT alpha) { this.a = a;this.p = p;this.rKey = priK;Alpha = alpha;this.generatingUkBeta();}/*** 欧几里得算法--求逆元*/public int[] euclid(int x0, int y0) {int x, y, a, b, c, d, pa, pb, pc, pd, q, r;int[] res = new int[2];x = x0;y = y0;pa = 1;pb = 0;pc = 0;pd = 1;a = 1;b = 0;c = 0;d = 1;while (y != 0) {r = x % y;q = (x - r) / y;a = pc;b = pd;c = pa - q * pc;d = pb - q * pd;x = y;y = r;pa = a;pb = b;pc = c;pd = d;}if (a < 0) {a = a + y0;}res[0] = x;res[1] = a;return res;}/*** 求bmod p 下的逆元** @param a* @param b* @param p* @return*/public int aUpBModP(int a, int b, int p) { int invB, res1;a = a % p;b = b % p;int[] res = this.euclid(b, p);//System.out.println("b mod p 的逆元:" + res[1]);invB = res[1];res1 = (a * invB) % p;if (res1 < 0) {res1 = res1 + p;}return res1;}/*** 求2P** @param pt* @return*/public POINT doublePoints(POINT pt) {int x1, y1, x2, y2, lambda, n1, n2;x1 = pt.getX();y1 = pt.getY();n1 = 3 * x1 * x1 + this.a;n2 = 2 * y1;lambda = this.aUpBModP(n1, n2, this.p);x2 = (lambda * lambda - 2 * x1) % (this.p);y2 = ((x1 - x2) * lambda - y1) % (this.p);if (x2 < 0) {x2 = x2 + this.p;}if (y2 < 0) {y2 = y2 + this.p;}return new POINT(x2, y2);}/*** 求nP** @param m* @param pt* @return*/public POINT anyPoint(int m, POINT pt) { int k;if (m == 1)return pt;else if (m == 2)return this.doublePoints(pt);else {if (m % 2 == 0) {k = m / 2;POINT p1 = this.doublePoints(pt);return this.anyPoint(k, p1);} else {POINT p1 = this.anyPoint(m - 1, pt);return this.add2Points(pt, p1);}}}/*** 两个点相加** @param p1* @param p2* @return*/public POINT add2Points(POINT p1, POINT p2) { int x1, y1, x2, y2, x3, y3, lambda, n1, n2;if (p1.isSamePoint(p2))return this.doublePoints(p1);x1 = p1.getX();y1 = p1.getY();x2 = p2.getX();y2 = p2.getY();n1 = y2 - y1;n2 = x2 - x1;lambda = this.aUpBModP(n1, n2, this.p);x3 = (lambda * lambda - x1 - x2) % (this.p);y3 = ((x1 - x3) * lambda - y1) % (this.p);if (x3 < 0) {x3 = x3 + this.p;}if (y3 < 0) {y3 = y3 + this.p;}return new POINT(x3, y3);}/*** Beta = d * alpha 生成*/public void generatingUkBeta() {Beta = this.anyPoint(this.rKey, Alpha);}public POINT getUkBeta() {return Beta;}/*** 加密点pt** @param pt* @param ranK* @return*/public POINT[] encripting(POINT pt, int ranK) { POINT[] ct = new POINT[2];ct[0] = this.anyPoint(ranK, Alpha); // k*PPOINT temp = this.anyPoint(ranK, Beta);//k*Q=(x2,y2)ct[1] = this.anyPoint(temp.getX(), pt);// c = mx2return ct;}/*** 解密** @param ct* @return*/public POINT decripting(POINT[] ct) {POINT p1, p2, p3;p1 = new POINT();p1.setX(ct[0].getX());p1.setY(ct[0].getY());p2 = this.anyPoint(this.rKey, p1);// (x2,y2)int[] res = this.euclid(p2.getX(), this.p);p3 = this.anyPoint(res[1], ct[1]);// p3 = this.add2Points(ct[1], p2);return p3;}/*** Method main** @param args*/public static void main(String[] args) {System.out.println("\nTesting the ecc:");System.out.println("——对(5, 19)加密——");ECC ecc3 = new ECC(1, 23, 9, new POINT(3, 13));POINT beta = ecc3.getUkBeta();System.out.println("公钥,Q=(" + beta.getX() + "," + beta.getY() + ")");POINT[] ct = ecc3.encripting(new POINT(5, 19), 5);System.out.println("(x1,y1) = ("+ ct[0].getX() + ","+ ct[0].getY()+ ")");System.out.println("(x2,y2) = ("+ ct[1].getX() + ","+ ct[1].getY()+ ")");POINT x = ecc3.decripting(ct);System.out.println("解密(" + x.getX() + "," + x.getY() + ")");}}// 点类class POINT {private int x, y;public POINT() {}public POINT(int x, int y) {this.x = x;this.y = y;}public void setX(int x) {this.x = x;}public void setY(int y) {this.y = y;}public int getX() {return x;}public int getY() {return y;}public boolean isSamePoint(POINT p) {if (x == p.getX() && y == p.getY()) {return true;} else {return false;}}public void printPoint() {System.out.println("The point is (" + this.x + "," + this.y + ")");}public POINT signPoint() {return new POINT(-this.x, -this.y);}}结果如下:运行时候,主要的是以下代码:五、实验总结1.遇到的问题及分析:遇到问题:ECC中在求几点P的素数阶n是不会求分析并解决:-查阅资料也没有解决,后来想了到找了一个k>>n的一个数,这样来解决,但是个人感觉不太严谨。