非对称算法讲解
- 格式:doc
- 大小:183.52 KB
- 文档页数:8
rsa算法基本原理RSA算法基本原理RSA是一种非对称加密算法,它的基本原理是利用大素数的因数分解困难性来实现加密和解密的过程。
RSA算法由三个步骤组成:密钥生成、加密和解密。
1. 密钥生成RSA算法中,首先需要生成一对密钥:公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
密钥的生成过程如下:1.1 选择两个大素数p和q,并计算它们的乘积n=p*q。
n的长度决定了RSA算法的安全性。
1.2 计算n的欧拉函数φ(n)=(p-1)*(q-1)。
1.3 选择一个与φ(n)互质的整数e,1 < e < φ(n)。
1.4 计算e关于φ(n)的模反元素d,即满足e*d ≡ 1 (mod φ(n))的整数d,1 < d < φ(n)。
1.5 公钥为(n, e),私钥为(n, d)。
2. 加密加密过程是指使用公钥对原始数据进行加密的过程。
加密过程如下:2.1 将原始数据转换为整数m,满足0 ≤ m < n。
2.2 计算密文c ≡ m^e (mod n),即对m进行模n的指数操作。
2.3 密文c即为加密后的数据。
3. 解密解密过程是指使用私钥对密文进行解密的过程。
解密过程如下:3.1 计算明文m ≡ c^d (mod n),即对密文c进行模n的指数操作。
3.2 明文m即为解密后的数据。
RSA算法的安全性基于大整数的因子分解问题的困难性,因为在当前计算能力下,对于非常大的整数进行因子分解是非常耗时的。
这使得RSA算法在现实应用中具有较高的安全性。
除了加密和解密外,RSA算法还可以用于数字签名和密钥协商等领域。
数字签名是指用私钥对数据进行签名,然后用公钥进行验证,以确保数据的完整性和来源可靠性。
密钥协商是指两个通信方通过交换公钥来协商出一个共享的对称密钥,以便进行后续的加密通信。
总结一下,RSA算法是一种基于大整数的非对称加密算法,利用大素数的因子分解困难性来实现数据的加密和解密。
它的安全性建立在大整数因子分解问题的困难性上,适用于保护数据的机密性、完整性和来源可靠性。
对称加密和⾮对称加密的区别简介:1. 对称加密: 加密和解密的秘钥使⽤的是同⼀个.2. ⾮对称加密: 与对称加密算法不同,⾮对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
⼀:对称加密算法: 密钥较短,破译困难,除了数据加密标准(DES),另⼀个对称密钥加密系统是国际数据加密算法(IDEA),它⽐DES 的加密性好,且对计算机性能要求也没有那么⾼.优点:算法公开、计算量⼩、加密速度快、加密效率⾼缺点:在数据传送前,发送⽅和接收⽅必须商定好秘钥,然后使双⽅都能保存好秘钥。
其次如果⼀⽅的秘钥被泄露,那么加密信息也就不安全了。
另外,每对⽤户每次使⽤对称加密算法时,都需要使⽤其他⼈不知道的唯⼀秘钥,这会使得收、发双⽅所拥有的钥匙数量巨⼤,密钥管理成为双⽅的负担。
常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES⼆:⾮对称加密算法: 公开密钥与私有密钥是⼀对,如果⽤公开密钥对数据进⾏加密,只有⽤对应的私有密钥才能解密;如果⽤私有密钥对数据进⾏加密,那么只有⽤对应的公开密钥才能解密。
因为加密和解密使⽤的是两个不同的密钥,所以这种算法叫作⾮对称加密算法。
⾮对称加密算法实现机密信息交换的基本过程是:甲⽅⽣成⼀对密钥并将其中的⼀把作为公⽤密钥向其它⽅公开;得到该公⽤密钥的⼄⽅使⽤该密钥对机密信息进⾏加密后再发送给甲⽅;甲⽅再⽤⾃⼰保存的另⼀把专⽤密钥对加密后的信息进⾏解密。
甲⽅只能⽤其专⽤密钥解密由其公⽤密钥加密后的任何信息。
优点:安全缺点:速度较慢常见的⾮对称加密算法有: RSA、ECC(移动设备⽤)、Diffie-Hellman、El Gamal、DSA(数字签名⽤)Hash算法(摘要算法)Hash算法特别的地⽅在于它是⼀种单向算法,⽤户可以通过hash算法对⽬标信息⽣成⼀段特定长度的唯⼀hash值,却不能通过这个hash值重新获得⽬标信息。
RSA⾮对称加密算法基本定义:RSA公开密钥密码体制。
所谓的公开密钥密码体制就是使⽤不同的加密密钥与解密密钥,是⼀种“由已知加密密钥推导出解密密钥在计算上是不可⾏的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,⽽解密密钥(即秘密密钥)SK是需要保密的。
加密算法E和解密算法D也都是公开的。
虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
数据加解密过程:数据发送⽅使⽤数据接收⽅发放的公钥对发送数据进⾏RSA加密,⽣成的密⽂发送给数据接收⽅;数据接收⽅使⽤公钥对应的私钥对密⽂进⾏RSA解密,得到明⽂信息.数据是以密⽂形式传输的,即使密⽂被截获,想要破解得到对应的明⽂是⼏乎不可能的(这涉及到数论的相关理论,不予延伸).破解难度主要体现在两点:1.破解密⽂需要对应的私钥,⽽私钥的长度有1024、2048、3072等,因此暴⼒破解是不可⾏的;2.虽然解密的私钥是由加密公钥解决的(公钥,私钥组成⼀个密钥对),但是却不能通过公钥推导计算出对应的私钥.3.RSA使⽤公钥加密数据,得到的密⽂都是不同的,因此⽆法像破解MD5⼀样穷举出对应的明⽂内容.C#代码实现的加解密:/// <summary>/// RSA 加密/// </summary>/// <param name="source">需加密的数据</param>/// <param name="publicKey">公钥</param>/// <returns></returns>public static string EncryptRsa(string source, string publicKey){using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){rsa.FromXmlString(publicKey);var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true);return Convert.ToBase64String(cipherbytes);}}/// <summary>/// RSA解密/// </summary>/// <param name="source">需解密的数据</param>/// <param name="privateKey">私钥</param>/// <returns></returns>public static string DecryptRsa(string source, string privateKey){using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){rsa.FromXmlString(privateKey);var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true);return Encoding.UTF8.GetString(cipherbytes);}}。
常⽤加密算法学习总结之⾮对称加密公开密钥密码学(英语:Public-key cryptography)也称⾮对称式密码学(英语:Asymmetric cryptography)是密码学的⼀种演算法。
常⽤的⾮对称加密算法有 RSA DSA ECC 等。
⾮对称加密算法使⽤公钥、私钥来加解密。
公钥与私钥是成对出现的。
多个⽤户(终端等)使⽤的密钥交公钥,只有⼀个⽤户(终端等)使⽤的秘钥叫私钥。
使⽤公钥加密的数据只有对应的私钥可以解密;使⽤私钥加密的数据只有对应的公钥可以解密。
⾮对称加密通信过程下⾯我们来看⼀看使⽤公钥密码的通信流程。
假设Alice要给Bob发送⼀条消息,Alice是发送者,Bob是接收者,⽽这⼀次窃听者Eve依然能够窃所到他们之间的通信内容。
⑴ Alice与bob事先互不认识,也没有可靠安全的沟通渠道,但Alice现在却要透过不安全的互联⽹向bob发送信息。
⑵ Alice撰写好原⽂,原⽂在未加密的状态下称之为明⽂ plainText。
⑶ bob使⽤密码学安全伪随机数⽣成器产⽣⼀对密钥,其中⼀个作为公钥 publicKey,另⼀个作为私钥 privateKey。
⑷ bob可以⽤任何⽅法传送公钥publicKey 给Alice,即使在中间被窃听到也没问题。
⑸ Alice⽤公钥publicKey把明⽂plainText进⾏加密,得到密⽂ cipherText⑹ Alice可以⽤任何⽅法传输密⽂给bob,即使中间被窃听到密⽂也没问题。
⑺ bob收到密⽂,⽤私钥对密⽂进⾏解密,得到明⽂ plainText。
由于其他⼈没有私钥,所以⽆法得知明⽂;如果Alice,在没有得到bob私钥的情况下,她将重新得到原⽂。
Processing math: 100%RSARSA是⼀种⾮对称加密算法,是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年⼀起提出,并以三⼈姓⽒开头字母拼在⼀起组成的。
[转]国密SM2⾮对称算法与实现国密SM2算法标准包括4个部分,第1部分为总则,主要介绍了ECC基本的算法描述,包括素数域和⼆元扩域两种算法描述,第2部分为数字签名算法,这个算法不同于ECDSA算法,其计算量⼤,也⽐ECDSA复杂些,也许这样会更安全吧,第3部分为密钥交换协议,与ECDH功能相同,但复杂性⾼,计算量加⼤,第4部分为公钥加密算法,使⽤ECC公钥进⾏加密和ECC私钥进⾏加密算法,其实现上是在ECDH上分散出流密钥,之后与明⽂或者是密⽂进⾏异或运算,并没有采⽤第3部分的密钥交换协议产⽣的密钥。
对于SM2算法的总体感觉,应该是国家发明,其计算上⽐国际上公布的ECC算法复杂,相对来说算法速度可能慢,但可能是更安全⼀点。
SM2标准还公布了⼀条建议的256位的ECC曲线,但没有在国际上被公认。
SM2算法是好,但要使⽤,⼜有很多障碍,就是统⼀的国际标识与互认,如算法没有OID标识,曲线也没有公认OID标识,这在通⽤上就⼤打折扣了,这⼀点需要考虑的。
⽹上可以查到⼀些SM2算法的实现代码,有C#的、有Java的,还有C的,但想找到⼀个完整的C语⾔代码还是很难,⼈家做了不公开,算法标准都公开的,代码不开源啊,但⽐较有意义的是这些代码都是使⽤Openssl或bouncycastle这些开源的算法库实现的。
但⾄少给你个信息,使⽤开源密码算法可以实现SM2算法。
要实现SM2算法,⾸先要实现ECC曲线基本描述,这个要独⽴去写还是需要很多计算算法能⼒的,不是搞数学的,还是有许多难度的。
Openssl的ECC算法是SUN公司奉献的,⼤家就是⼤家,写的就是好。
Bouncycastle也是⼀个⽐较好的算法,有Java版和C#版,⽹上可以得到C#的SM2算法,但是使⽤C语⾔的代码能够下载的SM2都有⼀点骗⼈感情啊,只给了代码测试运⾏包,没有公开源码。
笔者按着这些信息,细细分析了Openssl的ECC、ECDSA、ECDH算法,可以作为基础⽤来实现SM2是豪⽆问题的,待代码进⼀步完善后可以与⼤家分享。
PHP使⽤⾮对称加密算法加密的类型:在⽇常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明⽂加密成复杂的密⽂。
⽬前主流加密⼿段⼤致可分为单向加密和双向加密。
单向加密:通过对数据进⾏摘要计算⽣成密⽂,密⽂不可逆推还原。
算法代表:Base64,MD5,SHA;双向加密:与单向加密相反,可以把密⽂逆推还原成明⽂,双向加密⼜分为对称加密和⾮对称加密。
对称加密:指数据使⽤者必须拥有相同的密钥才可以进⾏加密解密,就像彼此约定的⼀串暗号。
算法代表:DES,3DES,AES,IDEA,RC4,RC5;⾮对称加密:相对对称加密⽽⾔,⽆需拥有同⼀组密钥,⾮对称加密是⼀种“信息公开的密钥交换协议”。
⾮对称加密需要公开密钥和私有密钥两组密钥,公开密钥和私有密钥是配对起来的,也就是说使⽤公开密钥进⾏数据加密,只有对应的私有密钥才以前⼀直对客户端传给服务器的信息加密这⼀块⼀脸懵,如果app⾥⾯的⽤户登录信息被抓包拿到了,⼤写着 username:root,password:123456,那不是很尴尬。
偶然做版权输⼊的时候遇到了rsa,在⽀付宝⽀付的时候也接触过,当时不知道这是啥⼦,现在才知道。
他能保证,客户端给出的信息,只有拥有私钥的服务器才能看,其他⼈看的都是乱码,嘿嘿。
⾮对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是⼀对,如果⽤公开密钥对数据进⾏加密,只有⽤对应的私有密钥才能解密;如果⽤私有密钥对数据进⾏加密,那么只有⽤对应的公开密钥才能解密。
因为加密和解密使⽤的是两个不同的密钥,所以这种算法叫作⾮对称加密算法。
注意以上的⼀个点,公钥加密的数据,只有对应的私钥才能解密在⽇常使⽤中是酱紫的:将私钥private_key.pem⽤在服务器端,公钥发放给android跟ios等前端客户端⽤公钥加密过后,数据只能被拥有唯⼀私钥的服务器看懂。
非对称算法之RSA的签名剖析前言数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
不清楚的请自行科普数字签名。
本篇主要来讲签名值具体是怎么计算出来的~一、动手解密签名值1、测试密钥2、编写代码解密众所周知:RSA加密解密:私钥解密,公钥加密。
RSA数字签名-俗称加签验签:私钥加签,公钥验签。
其实:也是有私钥加密,公钥解密的。
只是因为公钥是公开的,私钥加密后所有人都可以解密,没有意义,所以常用签名,而不是加密。
私钥加签的本质也是私钥加密数据的Hash值。
这里有个小技巧:我们用公钥对签名值解密,使用RSA_NO_PADDING,这样就能得到签名时私钥加密的数据。
鉴于篇幅长度,代码只贴出关键部分。
代码之PHP:其他语言代码整理ing…本次测试java、js、C#、PHP。
结果均一致,如下:简单分析1. 字符串”hello world”进行sha256运算得到hash:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde 92. 在Hash结果前数据填充:3031300d0609608648016503040201050004203. PKCS1 在上一步结果前填充:二、结合资料分析RSA的补位1、签名时,对Hash值的数据填充方式对hash算法id和hash值进行ASN.1的DER编码。
如下:为方便理解,我们使用ASN1dump对示例中的数据做解析:直接上图:可以看到sha256的算法id,2.16.840.1.101.3.4.2.1:数据也在其中,另附上部分算法id:另因为各个hash算法id是固定的,计算的结果也是固定的。
所以不同的hash算法的填充也是固定的。
如下:2、pkcs1padding V1.5的填充模式参考rfc2312以下描述均以十六进制字符串来描述。
所有加密算法及对称加密和⾮对称加密分类对称加密:双⽅使⽤的同⼀个密钥,既可以加密⼜可以解密,这种加密⽅法称为对称加密,也称为单密钥加密。
优点:速度快,对称性加密通常在消息发送⽅需要加密⼤量数据时使⽤,算法公开、计算量⼩、加密速度快、加密效率⾼。
缺点:在数据传送前,发送⽅和接收⽅必须商定好秘钥,然后使双⽅都能保存好秘钥。
其次如果⼀⽅的秘钥被泄露,那么加密信息也就不安全了。
另外,每对⽤户每次使⽤对称加密算法时,都需要使⽤其他⼈不知道的唯⼀秘钥,这会使得收、发双⽅所拥有的钥匙数量巨⼤,密钥管理成为双⽅的负担。
在对称加密算法中常⽤的算法有:DES、AES等。
AES:密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节DES:密钥的长度64位,8个字节。
⾮对称加密:⼀对密钥由公钥和私钥组成(可以使⽤很多对密钥)。
私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。
私钥只能由⼀⽅保管,不能外泄。
公钥可以交给任何请求⽅。
在⾮对称加密算法中常⽤的算法有:RSA、Elgamal、背包算法、Rabin、Diffie-Hellman、ECC(椭圆曲线加密算法)。
使⽤最⼴泛的是RSA算法,Elgamal是另⼀种常⽤的⾮对称加密算法。
缺点:速度较慢优点:安全1.分类加密算法⾸先分为两种:单向加密、双向加密。
单向加密是不可逆的,也就是只能加密,不能解密。
通常⽤来传输类似⽤户名和密码,直接将加密后的数据提交到后台,因为后台不需要知道⽤户名和密码,可以直接将收到的加密后的数据存储到数据库。
双向加密算法通常分为对称性加密算法和⾮对称性加密算法,对于对称性加密算法,信息接收双⽅都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进⾏加解密了。
⾮对称算法与之不同,发送双⽅A,B事先均⽣成⼀堆密匙,然后A将⾃⼰的公有密匙发送给B,B 将⾃⼰的公有密匙发送给A,如果A要给B发送消息,则先需要⽤B的公有密匙进⾏消息加密,然后发送给B端,此时B端再⽤⾃⼰的私有密匙进⾏消息解密,B向A发送消息时为同样的道理。
非对称算法 非对称密钥算法是指一个加密算法的加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥。
简介
非对称密钥也叫公开密钥加密,它是用两个数学相关的密钥对信息进行编码。在此系统中,其中一个密钥叫公开密钥,可随意发给期望同密钥持有者进行安全通信的人。公开密钥用于对信息加密。第二个密钥是私有密钥,属于密钥持有者,此人要仔细保存私有密钥。密钥持有者用私有密钥对收到的信息进行解密。
优点
首先,在多人之间进行保密信息传输所需的密钥组和数量很小;第二,密钥的发布不成问题;第三,公开密钥系统可实现数字签名。缺点:公开密钥加密比私有密钥加密在加密/解密时的速度慢。
加解密时采用的密钥的差异:从上述对对称密钥算法和非对称密钥算法的描述中可看出,对称密钥加解密使用的同一个密钥,或者能从加密密钥很容易推出解密密钥对称密钥算法具有加密处理简单,加解密速度快,密钥较短,发展历史悠久等特点,非对称密钥算法具有加解密速度慢的特点,密钥尺寸大,发展历史较短等特点。
asymmetric encoding algorithm非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行加密后再发送给乙方;乙方再用自己的私匙对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。 SM2椭圆曲线公钥密码算法 SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。
ECC椭圆曲线密码体制Koblitz和Miller在1985年各自引入密码学。椭圆曲线的Weierstrass方程为23213246yaxyayxaxaxa,其上面的所有点和无穷远点构成一个加法交换群,其中无穷远点是加法零元。此群的加法法则可以由弦切法所给出,具体见下图。
左图中是两个不同点P和Q的加法,右图为相同的点P和P的加法。由弦切法便可以给出椭圆曲线上的加法方程。多倍点运算是指:给定一点P和一个整数k,计算kP,即k个P点的和。椭圆曲线上的离散对数问题为:给定点P和kP,计算整数k。椭圆曲线密码体制的安全性便是建立在椭圆曲线离散对数问题之上。
SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及示例。
SM2算法主要考虑素域pF和2mF上的椭圆曲线,分别介绍了这两类域的表示,运算,以及域上的椭圆曲线的点的表示,运算和多倍点计算算法。然后介绍了编程语言中的数据转换,包括整数和字节串,字节串和比特串,域元素和比特串,域元素和整数,点和字节串之间的数据转换规则。详细说明了有限域上椭圆曲线的参数生成以及验证,椭圆曲线的参数包括有限域的选取,椭圆曲线方程参数,椭圆曲线群基点的选取等,并给出了选取的标准以便于验证。最后给出椭圆曲线上密钥对的生成以及公钥的验证,用户的密钥对为(s,sP),其中s为用户的私钥,sP为用户的公钥,由于离散对数问题从sP难以得到s,并针对素域和二元扩域给出了密钥对生成细节和验证方式。总则中的知识也适用于SM9算法。
在总则的基础上给出了数字签名算法(包括数字签名生成算法和验证算法),密钥交换协议以及公钥加密算法(包括加密算法和解密算法),并在每个部分给出了算法描述,算法流程和相关示例。
数字签名算法适用于商用应用中的数字签名和验证,可满足多种密码应用中的身份认证和数据完整性,真实性的安全需求。密钥交换协议适用于商用密码应用中的密钥交换,可满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话秘钥)。公钥加密算法适用于国家商用密码应用中的消息加解密,消息发送者可以利用接收者的公钥对消息进行加密,接收者用对应的私钥进行解,获取消息。
数字签名算法,密钥交换协议以及公钥加密算法都使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器。数字签名算法,密钥交换协议以及公钥加密算法根据总则来选取有限域和椭圆曲线,并生成密钥对,具体算法,流程和示例见SM2标准。
SM2算法和RSA、对称算法等强度对比如下。 保密级别 对称密钥长度 RSA密钥长度 ECC密钥长度 保密年限 80 80 1024 160 2010 112 112 2048 224 2030 128 128 3072 256 2040 192 192 7680 384 2080 256 256 15360 512 2120 SM9非对称算法 SM9是基于对的标识密码算法,与SM2类似,包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。在这些算法中使用了椭圆曲线上的对这一个工具,不同于传统意义上的SM2算法,可以实现基于身份的密码体制,也就是公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。
密码中双线性对12:TeGGG满足如下条件: 双线性性:对任意的1PG,2QG,以及,NabZ,有(,)(,)abeaPbQePQ; 非退化性:(,)1ePQ,其中P为1G的生成元,Q为2G的生成元; 可计算性:存在有效的算法计算(,)ePQ。 其中1G,2G为椭圆曲线上的加法群,而TG为有限域的乘法群。在椭圆曲线对中,根据1G与2G是否关系,以及椭圆曲线上的自同态,可以将对分成三种类型,需要考虑在超奇异椭圆曲线,常椭圆曲线上来选取对。常用的对有Weil对,Tate对,Ate对,以及最优对等。基于对的标识密码算法建立在一些对的难解问题,例如双线性Diffie-Hellman问题,双线性逆DH问题等。椭圆曲线上的双线
性对为*:()[]()/()kkkkqqqqeEFrEFrEFF 其中k为()qEF的嵌入次数。双线性对的双线性的性质是基于对的标识密码算法的基础。
SM2中的总则部分同样适用于SM9,由于SM9总则中添加了适用于对的相关理论和实现基础。椭圆曲线双线性对定义和计算在扩域上进行,总则中给出了
扩域的表示和运算,考虑mpF和3mF上的椭圆曲线。数据类型转换同样包括整数与字节串,比特串和字节串,字节串和域元素,点和字节串之间的转换,其中字节串和域元素之间的数据类型转换涉及到扩域。系统参数的生成比SM2复杂,涉及到对的相关参数,验证也相应地复杂。并在附录B里面详细地描述了计算对的算法Miller算法,并给出了Tate对,Ate的计算,以及适合对的椭圆曲线的生成。
基于总则中的椭圆曲线以及对的基本选取,给出系统参数组,系统主密钥和用户密钥的产生。用户密钥由系统的主密钥和用户标识共同产生。SM9给出了数字签名算法(包括数字签名生成算法,数字签名验证算法),密钥交换协议,以及密钥封装机制和公钥加密算法(包括密钥封装算法,加密盒解密算法)。数字签名算法适用于接收者通过签名者的标识验证数据的完整性和数据发送者的身份,也适用于第三方确定签名及所签数据的真实性。密钥交换协议可以使用通信双方通过双方的标识和自身的私钥经过两次或者可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。密钥封装机制和公钥加密算法中,利用密钥封装机制可以封装密钥给特定的实体。公钥加密和解密算法即基于标识的非对称秘密算法,该算法使消息发送者可以利用接收者的标识对消息进行加密,唯有接收者可以用相应的私钥对该密文进行解密,从而获取消息。基于对的算法中同样使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器,密钥封装机制和公钥加密算法中使用了国家密码管理局批准的对称密码算法和消息认证码函数。基于对的数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法的具体算法,流程图和示例见SM9标准。 RSA算法 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
基本含义
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法