非对称加密的加密过程
❶ 图文彻底搞懂非对称加密(公钥密钥)
前文详细讲解了对称加密及算法原理。那么是不是对称加密就万无一失了呢?对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥。你可以能会提出疑问:既然要加、解密,当然双方都要持有密钥,这有什么问题呢?别急,我们继续往下看。
我们先看一个例子,小明和小红要进行通信,但是不想被其他人知道通信的内容,所以双方决定采用对称加密的方式。他们做了下面的事情:
1、双方商定了加密和解密的算法
2、双方确定密钥
3、通信过程中采用这个密钥进行加密和解密
这是不是一个看似完美的方案?但其中有一个步骤存在漏洞!
问题出在步骤2:双方确定密钥!
你肯定会问,双方不确定密钥,后面的加、解密怎么做?
问题在于确定下来的密钥如何让双方都知道。密钥在传递过程中也是可能被盗取的!这里引出了一个经典问题:密钥配送问题。
小明和小红在商定密钥的过程中肯定会多次沟通密钥是什么。即使单方一次确定下来,也要发给对方。加密是为了保证信息传输的安全,但密钥本身也是信息,密钥的传输安全又该如何保证呢?难不成还要为密钥的传输再做一次加密?这样不就陷入了死循环?
你是不是在想,密钥即使被盗取,不还有加密算法保证信息安全吗?如果你真的有这个想法,那么赶紧复习一下上一篇文章讲的杜绝隐蔽式安全性。任何算法最终都会被破译,所以不能依赖算法的复杂度来保证安全。
小明和小红现在左右为难,想加密就要给对方发密钥,但发密钥又不能保证密钥的安全。他们应该怎么办呢?
有如下几种解决密钥配送问题的方案:
非对称加密也称为公钥密码。我更愿意用非对称加密这种叫法。因为可以体现出加密和解密使用不同的密钥。
对称加密中,我们只需要一个密钥,通信双方同时持有。而非对称加密需要4个密钥。通信双方各自准备一对公钥和私钥。其中公钥是公开的,由信息接受方提供给信息发送方。公钥用来对信息加密。私钥由信息接受方保留,用来解密。既然公钥是公开的,就不存在保密问题。也就是说非对称加密完全不存在密钥配送问题!你看,是不是完美解决了密钥配送问题?
回到刚才的例子,小明和下红经过研究发现非对称加密能解决他们通信的安全问题,于是做了下面的事情:
1、小明确定了自己的私钥 mPrivateKey,公钥 mPublicKey。自己保留私钥,将公钥mPublicKey发给了小红
2、小红确定了自己的私钥 hPrivateKey,公钥 hPublicKey。自己保留私钥,将公钥 hPublicKey 发给了小明
3、小明发送信息 “周六早10点soho T1楼下见”,并且用小红的公钥 hPublicKey 进行加密。
4、小红收到信息后用自己的私钥 hPrivateKey 进行解密。然后回复 “收到,不要迟到” 并用小明的公钥mPublicKey加密。
5、小明收到信息后用自己的私钥 mPrivateKey 进行解密。读取信息后心里暗想:还提醒我不迟到?每次迟到的都是你吧?
以上过程是一次完整的request和response。通过这个例子我们梳理出一次信息传输的非对称加、解密过程:
1、消息接收方准备好公钥和私钥
2、私钥接收方自己留存、公钥发布给消息发送方
3、消息发送方使用接收方公钥对消息进行加密
4、消息接收方用自己的私钥对消息解密
公钥只能用做数据加密。公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。
下面我用一个更为形象的例子来帮助大家理解。
我有下图这样一个信箱。
由于我只想接收我期望与之通信的朋友信件。于是我在投递口加了一把锁,这把锁的钥匙(公钥)我可以复制n份,发给我想接受其信件的人。只有这些人可以用这把钥匙打开寄信口,把信件投入。
相信通过这个例子,可以帮助大家彻底理解公钥和私钥的概念。
RSA 是现在使用最为广泛的非对称加密算法,本节我们来简单介绍 RSA 加解密的过程。
RSA 加解密算法其实很简单:
密文=明文^E mod N
明文=密文^D mod N
RSA 算法并不会像对称加密一样,用玩魔方的方式来打乱原始信息。RSA 加、解密中使用了是同样的数 N。公钥是公开的,意味着 N 也是公开的。所以私钥也可以认为只是 D。
我们接下来看一看 N、E、D 是如何计算的。
1、求 N
首先需要准备两个很大质数 a 和 b。太小容易破解,太大计算成本太高。我们可以用 512 bit 的数字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密钥对过程中产生的数,并不参与加解密。L 是 (a-1) 和 (b-1) 的最小公倍数
3、求 E(公钥)
E 有两个限制:
1<E<
E和L的最大公约数为1
第一个条件限制了 E 的取值范围,第二个条件是为了保证有与 E 对应的解密时用到的 D。
4、求 D(私钥)
D 也有两个限制条件:
1<D<L
E*D mod L = 1
第二个条件确保密文解密时能够成功得到原来的明文。
由于原理涉及很多数学知识,这里就不展开细讲,我们只需要了解这个过程中用到这几个数字及公式。这是理解RSA 安全性的基础。
由于 N 在公钥中是公开的,那么只需要破解 D,就可以解密得到明文。
在实际使用场景中,质数 a,b 一般至少1024 bit,那么 N 的长度在 2048 bit 以上。D 的长度和 N 接近。以现在计算机的算力,暴力破解 D 是非常困难的。
公钥是公开的,也就是说 E 和 N 是公开的,那么是否可以通过 E 和 N 推断出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍数。想知道 L 就需要知道质数 a 和 b。破解者并不知道这两个质数,想要破解也只能通过暴力破解。这和直接破解 D 的难度是一样的。
等等,N 是公开的,而 N = a*b。那么是否可以对 N 进行质因数分解求得 a 和 b 呢?好在人类还未发现高效进行质因数分解的方法,因此可以认为做质因数分解非常困难。
但是一旦某一天发现了快速做质因数分解的算法,那么 RSA 就不再安全
我们可以看出大质数 a 和 b 在 RSA 算法中的重要性。保证 a 和 b 的安全也就确保了 RSA 算法的安全性。a 和 b 是通过伪随机生成器生成的。一旦伪随机数生成器的算法有问题,导致随机性很差或者可以被推断出来。那么 RSA 的安全性将被彻底破坏。
中间人攻击指的是在通信双方的通道上,混入攻击者。他对接收方伪装成发送者,对放送放伪装成接收者。
他监听到双方发送公钥时,偷偷将消息篡改,发送自己的公钥给双方。然后自己则保存下来双方的公钥。
如此操作后,双方加密使用的都是攻击者的公钥,那么后面所有的通信,攻击者都可以在拦截后进行解密,并且篡改信息内容再用接收方公钥加密。而接收方拿到的将会是篡改后的信息。实际上,发送和接收方都是在和中间人通信。
要防范中间人,我们需要使用公钥证书。这部分内容在下一篇文章里会做介绍。
和对称加密相比较,非对称加密有如下特点:
1、非对称加密解决了密码配送问题
2、非对称加密的处理速度只有对称加密的几百分之一。不适合对很长的消息做加密。
3、1024 bit 的 RSA不应该在被新的应用使用。至少要 2048 bit 的 RSA。
RSA 解决了密码配送问题,但是效率更低。所以有些时候,根据需求可能会配合使用对称和非对称加密,形成混合密码系统,各取所长。
最后提醒大家,RSA 还可以用于签名,但要注意是私钥签名,公钥验签。发信方用自己的私钥签名,收信方用对方公钥验签。关于签名,后面的文章会再详细讲解。
❷ 非对称加密算法
非对称加密算法是一种密钥的保密方法。
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
另一方面,甲方可以使用自己的私钥对机密信息进行签名后再发送给乙方;乙方再用甲方的公钥对甲方发送回来的数据进行验签。
甲方只能用其私钥解密由其公钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
❸ 科普知识—对称加密和非对称加密
区块链技术中广泛应用到非对称加密技术,非对称加密技术保证了信息在传输过程中的安全性,非对称加密技术是在对称加密技术上发展来的。本文主要阐述对称加密技术和非对称加密技术的概念和特点,并举例说明。
对称加密就是用相同的密钥对原文进行加密和解密,通信双方共用一个密钥。
基于对称加密算法传输信息“ABC”的步骤。
(1)发送方通过密钥对原文"ABC"进行加密,得到密文"abc",并发送给接收方。密钥为将字母转换为对应的小写字母,大写A转换为小写a,“BC”同理转换为“bc”。
(2)发送方将密钥发送给接收方。
(3)接收方通过密钥对密文进行解密,反推出原文“ABC”。
对称加密算法的缺点:无法确保密钥被安全传递。
密钥就是传说中的“密码本”。密文在传输过程中是可能被第三方截获的,关键就落在“密码本”上,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,所以经常看到电影、电视剧的情节中通过各种手段保护密码本的安全送达。
非对称加密技术很好的解决了对称加密技术密钥无法安全传递的问题。
非对称加密有两个密钥,即公钥(Public Key)和私钥(Private Key),对数据进行加密和解密使用不同的密钥。使用公钥进行加密,使用私钥进行解密。
非对称加密算法中私钥就是一个随机数,基于不同的算法生成不同的随机数,如:SHA256算法生成的是256位的随机数,通常是调用操作系统的随机数生成器来生成私钥,私钥通过一定的加密算法推导出公钥,私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。
基于非对称加密算法传输信息“hello world”的步骤。
(1)发送方使用接收方的公钥对待发送信息“hello world”加密,此处需注意:信息发送给谁,使用谁的公钥进行加密,公钥是可以公开的,类似于银行卡账户。
(2)发送方将加密后的密文通过网络发送给接收方。
(3)接收方接收到密文后,使用自己的私钥对密文进行解密,从而获得传输信息“hello world”。
采用非对称加密算法即使第三方在网络上截获到密文,但其无法获得接收方的私钥,也就无法对密文进行解密,作为接收方务必保证自己私钥的安全,所以非对称加密技术解决了密钥传输过程的安全性问题。
本文主要阐述对称加密技术和非对称加密技术的概念和特点,并举例说明。对称加密是通信双方共用密钥,无法保证密钥的安全传递;非对称加密使用接收方的公钥对数据加密,接收方使用自己的私钥解密,即使信息被第三方截获,由于没有接收方的私钥,也无法破解密文。
❹ 简要说说对称加密和非对称加密的原理以及区别是什么
对称加密的原理是数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
非对称加密的原理是甲方首先生成一对密钥同时将其中的一把作为公开密钥;得到公开密钥的乙方再使用该密钥对需要加密的信息进行加密后再发送给甲方;甲方再使用另一把对应的私有密钥对加密后的信息进行解密,这样就实现了机密数据传输。
对称加密和非对称加密的区别为:密钥不同、安全性不同、数字签名不同。
一、密钥不同
1、对称加密:对称加密加密和解密使用同一个密钥。
2、非对称加密:非对称加密加密和解密所使用的不是同一个密钥,需要两个密钥来进行加密和解密。
二、安全性不同
1、对称加密:对称加密如果用于通过网络传输加密文件,那么不管使用任何方法将密钥告诉对方,都有可能被窃听。
2、非对称加密:非对称加密因为它包含有两个密钥,且仅有其中的“公钥”是可以被公开的,接收方只需要使用自己已持有的私钥进行解密,这样就可以很好的避免密钥在传输过程中产生的安全问题。
三、数字签名不同
1、对称加密:对称加密不可以用于数字签名和数字鉴别。
2、非对称加密:非对称加密可以用于数字签名和数字鉴别。
❺ 使用非对称加密及解密的过程详解
前面我们知道对称加密是对一份文件进行加密,且对应的只有一个密码?例如:A有一份文件,她使用对称加密算法加密后希望发给B,那么密码肯定也要一起交给B!这中间就会出现安全隐患,如果密码被第三方L嗅探到并截取,那么加密的文件就赤裸裸的出现在L的面前。
如果A有很多文件需要加密并发送给很多人!那么就会生成很多的密钥,这么多的密钥保管就成了一个很棘手的问题,况且还要把密钥发给不同的人!这无疑增添了很多的风险!
如何能改善这种安全性不高的加密算法,数学家们发现了另一种加密方式。称之为《非对称加密》asymmetric encryption。非对称加密算法需要两个密钥【公开密钥】(publickey)和【私有密钥】(privatekey)。下面简称【公匙】、【私匙】
【公钥】与【私钥】是一对,如果使用公开密匙对数据进行加密,那么只有对应的私有密匙才能解密;相反,如果使用私有密匙对数据进行加密,那么只有对应的公开密匙进行解密。因加密解密使用的是两种不同的密匙,所以这种算法称之为【非对称加密算法】。
在使用非对称加密前,A和B先各自生成一对公匙和私匙,然后把各自的公匙交给对方,并把自己的私匙妥善保管!如图所示:
在A给B发送信息之前,首先使用B发给A的公匙对信息进行加密处理,然后发送给B,B在收到密文之后,使用自己的私匙解密;B在给A回复信息时,先使用A发来的公匙对回复信息加密,然后发出,A收到密文后使用自己的私匙解密即可!如图所示:
❻ 非对称加密算法
如果要给世界上所有算法按重要程度排个序,那我觉得“公钥加密算法”一定是排在最前边的,因为它是现代计算机通信安全的基石,保证了加密数据的安全。
01 对称加密算法
在非对称加密出现以前,普遍使用的是对称加密算法。所谓对称加密,就是加密和解密是相反的操作,对数据进行解密,只要按加密的方式反向操作一遍就可以获得对应的原始数据了,举一个简单的例子,如果要对字符串"abc"进行加密,先获取它们的ANSCII码为:97 98 99;密钥为+2,加密后的数据就是:99 100 101,将密文数据发送出去。接收方收到数据后对数据进行解密,每个数据减2,就得到了原文。当然这只是一个非常简单的例子,真实的对称加密算法会做得非常复杂,但这已经能够说明问题了。
这样的加密方法有什么缺点呢?首先缺点一:密钥传递困难;想想看如果两个人,分别是Bob和Alice,Bob要给Alice发消息,那Bob就要把密钥通过某种方式告诉Alice,有什么可靠的途径呢?打电话、发邮件、写信...等等方式好像都不靠谱,都有被窃取的风险,也只有两人见面后当面交流这一种方式了;缺点二:密钥数量会随着通信人数的增加而急剧增加,密钥管理将会是一个非常困难的事情。
02 非对称加密算法
1976年,两位美国计算机学家,提出了Diffie-Hellman密钥交换算法。这个算法的提出了一种崭新的构思,可以在不直接传递密钥的情况下,完成解密。这个算法启发了其他科学家,让人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应的关系即可,这样就避免了直接传递密钥。这种新的加密模式就是“非对称加密算法”。
算法大致过程是这样的:
(1)乙方 生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
03 RSA非对称加密算法
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。
从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
公钥加密 -> 私钥解密
只有私钥持有方可以正确解密,保证通信安全
私钥加密 -> 公钥解密
所有人都可以正确解密,信息一定是公钥所对应的私钥持有者发出的,可以做签名
04 质数的前置知识
RSA的安全性是由大数的质因数分解保证的。下面是一些质数的性质:
1、任意两个质数构成素质关系,比如:11和17;
2、一个数是质数,另一个数只要不是前者的倍数,两者就构成素质关系,比如3和10;
3、如果两个数之中,较大的那个是质数,则两者构成互质关系,比如97和57;
4、1和任意一个自然数都是互质关系,比如1和99;
5、p是大于1的整数,则p和p-1构成互质关系,比如57和56;
6、p是大于1的奇数,则p和p-2构成互质关系,比如17和15
05 RSA密钥生成步骤
举个“栗子“,假如通信双方为Alice和Bob,Alice要怎么生成公钥和私钥呢?
St ep 1:随机选择两个不相等的质数p和q;
Alice选择了3和11。(实际情况中,选择的越大,就越难破解)
S tep 2 :计算p和q的乘积n;
n = 3*11 = 33,将33转化为二进制:100001,这个时候密钥长度就是6位。
Step 3 :计算n的欧拉函数φ(n);
因为n可以写为两个质数相乘的形式,欧拉函数对于可以写成两个质数形式有简单计算方式
φ(n) = (p-1)(q-1)
Step 4 :随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质;
爱丽丝就在1到20之间,随机选择了3
Step 5 :计算e对于φ(n)的模反元素d
所谓模反元素,就是指有一个整数d,可以使得ed被φ(n)除的余数为1
Step 6 :将n和e封装成公钥,n和d封装成私钥;
在上面的例子中,n=33,e=3,d=7,所以公钥就是 (33,3),私钥就是(33, 7)。
密钥生成步骤中,一共出现了六个数字,分别为:
素质的两个数p和q,乘积n,欧拉函数φ(n),随机质数e,模反元素d
这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的,可以删除。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。
那么,有无可能在已知n和e的情况下,推导出d?
(1)ed 1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。
结论是如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。
BUT!
大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。
维基网络这样写道:
"对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有较短的RSA密钥才可能被暴力破解。到现在为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"
06 RSA加密和解密过程
1、加密要用公钥(n,e)
假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对m进行加密。
所谓"加密",就是算出下式的c:
爱丽丝的公钥是 (33, 3),鲍勃的m假设是5,那么可以算出下面的等式:
于是,c等于26,鲍勃就把26发给了爱丽丝。
2、解密要用私钥(n,d)
爱丽丝拿到鲍勃发来的26以后,就用自己的私钥(33, 7) 进行解密。下面的等式一定成立(至于为什么一定成立,证明过程比较复杂,略):
也就是说,c的d次方除以n的余数为m。现在,c等于26,私钥是(33, 7),那么,爱丽丝算出:
因此,爱丽丝知道了鲍勃加密前的原文就是5。
至此,加密和解密的整个过程全部完成。整个过程可以看到,加密和解密使用不用的密钥,且不用担心密钥传递过程中的泄密问题,这一点上与对称加密有很大的不同。由于非对称加密要进行的计算步骤复杂,所以通常情况下,是两种算法混合使用的。
07 一些其它的
在Part 5的第五步,要求一定要解出二元一次方程的一对正整数解,如果不存在正整数解,这该怎么办?
扩展欧几里得算法给出了解答:
对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by;
第五步其实等价于:ed - kφ(n) = 1, e与φ(n)又互质,形式上完全与扩展欧几里得算法的一致,所以一定有整数解存在。
Reference:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
❼ 什么是非对称加密
它是和对称加密相对应的。
对称加密是比较原始的加密手段,它的特点就是加密的密码和解密的密码是同一个,比如说压缩软件就是,即你在压缩包上加的密码是什么,解密的密码也必须是这个。很显然,对称加密的好处是简单快捷,坏处是保密性不佳,你得告诉对方这个密码才行,即中间必须存在一个双方交流密码的过程,这就产生了被人窃去的危险——别人要是窃去了这个密码,那信息也就暴露了。
非对称加密则是,想要加密一个文件,需要生出两个密码,一个公开密码,一个私人密码。比如说你想让对方给你发涉密文件,你就用非对称加密工具生出公私两个密码,然后把公开密码发给他,对方就用这个公开密码对要传来的文档进行加密,然后把这个用公开密码加密的文件发给你,你就可以用你的私人密码进行解密。对方或别人仅仅知道公开密码,无法就此逆推出私人密码,所以能够保证私人密码的安全性,也就保证了传输过程的保密性,涉密文件不会就此被人解密(别人偷去无用,因为没有私人密码,无法解开)。这就是非对称加密在涉密文件传输的应用。
如果把上边这个过程反过来,非对称加密则会实现另一种用途,电子签名。比如说你发了一份文件,别人怎么会知道这个文件就是你发的,而不是别人冒用你的身份发的呢?就算有你的亲笔签名,可架不住有笔迹摹仿高手呢。这种时候,你就可以用你的私有密码对这份公开的文件进行加密,然后再把公开密码随同公布。如果别人用你公布的公开密码能够对此文件进行解密,如此便可以就此验证出加密者就是你本人,它的安全性很高,其保密性比真正的笔迹更要安全。
非对称应用的这两个过程可以各简缩成四个字,就是传输涉密文件时,“公(用密码)加私(人密码)解”,电子签名(验明发文者正身)时,是“私(人密码)加公(开密码)解”。
可以看出,非对称加密的好处就是保密性好,因为中间不需要双方交流私人密码的过程——只需要交流公开密码,而这个公开密码第三方偷去了没用(无法就它推导出私人密码),不好处也很明显,就是过程相对复杂,解密效率不及对称式的。
嗯,非对称加密对比对称加密,还有一个明显的不同点,即加密者自己无法解密。对方得到公开密码后,用它对文件进行加密后,这个加密后的文件,对方虽然是生成者,可他自己也没法解密。这一点和对称加密截然不同。
所以,要是需要双方或多方交流重要、敏感的信息,还是用非对称加密为宜。但若是自个儿保密用的,或是文件密级不是那么高的,综合看来大概用对称加密更好。
❽ 密码学基础(三):非对称加密(RSA算法原理)
加密和解密使用的是两个不同的秘钥,这种算法叫做非对称加密。非对称加密又称为公钥加密,RSA只是公钥加密的一种。
现实生活中有签名,互联网中也存在签名。签名的作用有两个,一个是身份验证,一个是数据完整性验证。数字签名通过摘要算法来确保接收到的数据没有被篡改,再通过签名者的私钥加密,只能使用对应的公钥解密,以此来保证身份的一致性。
数字证书是将个人信息和数字签名放到一起,经由CA机构的私钥加密之后生成。当然,不经过CA机构,由自己完成签名的证书称为自签名证书。CA机构作为互联网密码体系中的基础机构,拥有相当高级的安全防范能力,所有的证书体系中的基本假设或者前提就是CA机构的私钥不被窃取,一旦 CA J机构出事,整个信息链将不再安全。
CA证书的生成过程如下:
证书参与信息传递完成加密和解密的过程如下:
互质关系:互质是公约数只有1的两个整数,1和1互质,13和13就不互质了。
欧拉函数:表示任意给定正整数 n,在小于等于n的正整数之中,有多少个与 n 构成互质关系,其表达式为:
其中,若P为质数,则其表达式可以简写为:
情况一:φ(1)=1
1和任何数都互质,所以φ(1)=1;
情况二:n 是质数, φ(n)=n-1
因为 n 是质数,所以和小于自己的所有数都是互质关系,所以φ(n)=n-1;
情况三:如果 n 是质数的某一个次方,即 n = p^k ( p 为质数,k 为大于等于1的整数),则φ(n)=(p-1)p^(k-1)
因为 p 为质数,所以除了 p 的倍数之外,小于 n 的所有数都是 n 的质数;
情况四:如果 n 可以分解成两个互质的整数之积,n = p1 × p2,则φ(n) = φ(p1p2) = φ(p1)φ(p2)
情况五:基于情况四,如果 p1 和 p2 都是质数,且 n=p1 × p2,则φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)
而 RSA 算法的基本原理就是欧拉函数中的第五种情况,即: φ(n)=(p1-1)(p2-1);
如果两个正整数 a 和 n 互质,那么一定可以找到整数 b,使得 ab-1 被 n 整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。欧拉定理可以用来证明模反元素必然存在。
可以看到,a的 φ(n)-1 次方,就是a对模数n的模反元素。
n=p x q = 3233,3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。
在实际使用中,一般场景下选择1024位长度的数字,更高安全要求的场景下,选择2048位的数字,这里作为演示,选取p=61和q=53;
因为n、p、q都为质数,所以φ(n) = (p-1)(q-1)=60×52= 3120
注意,这里是和φ(n) 互互质而不是n!假设选择的值是17,即 e=17;
模反元素就是指有一个整数 d,可以使得 ed 被 φ(n) 除的余数为1。表示为:(ed-1)=φ(n) y --> 17d=3120y+1,算出一组解为(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。
注意,这里不能选择3119,否则公私钥相同??
公钥:(n,e)=(3233,2753)
私钥:(n,d)=(3233,17)
公钥是公开的,也就是说m=p*q=3233是公开的,那么怎么求e被?e是通过模反函数求得,17d=3120y+1,e是公开的等于17,这时候想要求d就要知道3120,也就是φ(n),也就是φ(3233),说白了,3233是公开的,你能对3233进行因数分解,你就能知道d,也就能破解私钥。
正常情况下,3233我们可以因数分解为61*53,但是对于很大的数字,人类只能通过枚举的方法来因数分解,所以RSA安全性的本质就是:对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
人类已经分解的最大整数是:
这个人类已经分解的最大整数为232个十进制位,768个二进制位,比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。所以实际使用中的1024位秘钥基本安全,2048位秘钥绝对安全。
网上有个段子:
已经得出公私钥的组成:
公钥:(n,e)=(3233,2753)
私钥:(n,d)=(3233,17)
加密的过程就是
解密过程如下:
其中 m 是要被加密的数字,c 是加密之后输出的结果,且 m < n ,其中解密过程一定成立可以证明的,这里省略证明过程。
总而言之,RSA的加密就是使用模反函数对数字进行加密和求解过程,在实际使用中因为 m < n必须成立,所以就有两种加密方法:
对称加密存在虽然快速,但是存在致命的缺点就是秘钥需要传递。非对称加密虽然不需要传递秘钥就可以完成加密和解密,但是其致命缺点是速度不够快,不能用于高频率,高容量的加密场景。所以才有了两者的互补关系,在传递对称加密的秘钥时采用非对称加密,完成秘钥传送之后采用对称加密,如此就可以完美互补。
❾ 非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。
经典的非对称加密算法如RSA算法等安全性都相当高.
非对称加密的典型应用是数字签名。
采用双钥密码系统的加密方法,在一个过程中使用两个密钥,一个用于加密,另一个用于解密,这种加密方法称为非对称加密,也称为公钥加密,因为其中一个密钥是公开的(另一个则需要保密)。