——秘密的精髓
?在运用对称密码、公钥密码、音讯认证码、数字签名等密码技术使用,都需求一个称为 密钥的庞大数字。但是,数字自身的大小并不主要,主要的是 密钥空间的大小 ,也就是可以出现的密钥的总数量,由于密钥空间越大,中止暴力破解就越困难。密钥空间的大小是由 密钥长度 决议的。
?对称密码DES的密钥的实质长度为56比特(7个字节)。
例如,
一个DES密钥用二进制可以表示为:
0101000111101100010010110001001000111101 01000010 00000011
用十六进制则能够表示为:
51 EC 4B 12 3D 42 03
而用十进制则能够表示为:
2305928028626269955
?在对称密码三重DES中,包括使用两个DES密钥的DES-EDE2和使用三个DES密钥的DES-EDE3这两种方式。
DES-EDE2的密钥长度实质长度为112比特(14字节),比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F
DES-EDE3的密钥的本质长度为168比特(21字节),比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96
?对称密码AES的密钥长度能够从128、192和256比特中中止选择,当密钥长度为256比特时,比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96
B9 42 DC FD A0 AE F4 5D 60 51 F1
? 密钥和明文是等价的 。假定明文具有100万的价值,那么用来加密这段明文的密钥也就是具有100万元的价值;假定明文值1亿元,密钥也就值1亿元;假定明文的方式是生死攸关的,那么密钥也十分是生死攸关的。
?在对称密码中,加密和解密使用同一个密钥。由于发送者和接收者需求共享密钥,因此对称密码又称为共享密钥密码。对称密码中所使用的密钥必需对发送者和接收者以外的人失密,否则第三方就能够解密了。
?在音讯认证码中,发送者和接收者使用共享的密钥来停止认证。音讯认证码只能由持有合法密钥的人计算进去。将音讯认证码附加在通讯报文前面,就能够识别通讯方式能否被窜改或伪装,由于“持有合法的密钥”就是发送者和接收者合法身份的证明,因此音讯认证码的密钥必需对发送者以外的人失密,否则就会发生窜改和伪装的风险。
?在数字签名中,签名生成和考证使用不同的密钥,只需持有私钥的自己才干够生成签名,但由于考证签名使用的是公钥,因此任何人都能够考证签名。
?对称密码和公钥密码的密钥都是用于确保秘密性的密钥。假定不知道用于解密的合法密钥,就无法得知明文的方式。
?相对地,消息认证码和数字签名所使用的密钥,则是用于认证的密钥。假设不知道合法的密钥,就无法窜改数据,也无法伪装自己的身份。
?当我们访问以https://扫尾的网页时,Web效力器和阅读器之间会停止基于SSL/TLS的加密通讯。在这样的通讯中所使用的密钥是仅限于本次通讯的一次密钥,下次通讯时就不能使用了,想这样每次通信只能使用一次的密钥称为 会话密钥 。
?由于会话密钥只在本次通信中有效,万一窃听者获取了本次通信的会话密钥,也只能破译本次通信的形式。
?固然每次通信都会改换会话密钥,但假设用来生成密钥的伪随机数生成器质量不好,窃听者就有能够预测出下次生成会话密钥,这样就会发生通信形式被破译的风险。
?相关于每次通信改换的会话密钥,一直被重复使用的密钥称为 主密钥 。
?一般来说,加密的对象是用户直接使用的消息,这样的状况下所使用的密钥称为CEK(Contents Encryting Key,形式加密密钥);相对地,用于加密密钥的密钥则称为KEK(Key Encryting Key,密钥加密密钥)。
?在很多状况下,之前提到的会话密钥都是被作为CEK使用的,而主密钥则是被作为KEK使用的。
?生成密钥的最好方法就是使用随机数,由于米哟啊需求具有不易被他人推测的本质。在能够的状况下最好使用能够生成密码学上的随机数的硬件装备,但一般我们都是使用伪随机数生成器这一特地为密码学用途想象的软件。
?在生成密钥时,不能自己随意写出一些像“3F 23 52 28 E3....”这样的数字。由于固然你想生成的是随机的数字,但不论如何都无法防止人为倾向,而这就会成为攻击者的手段。
?虽然生成伪随机数的算法有很多种,但密码学用途伪随机生成器必需是特地针对密码学用途而想象的。例如,有一些伪随机数生成器可以用于游戏和模拟算法,固然这些伪随机数生成器所生成的数列看起也是随机的,但只需不是特地为密码学用途想象的,就不能用来生成密钥,由于这些伪随机数生成器不具有不可预测性这一实质。
?有时分我们也会使用人类的可以记住的口令(pasword或passphrase)来生成密钥。口令指的是一种由多个单词组成的较长的password。
?严酷来说,我们很少直接使用口令来作为密钥使用,一般都是将口令输入单向散列函数,然后将取得的散列值作为密钥使用。
?在使用口令生成密钥时,为了防止字典攻击,需求在口令上附加一串称为盐(salt)的随机数,然后在将其输入单向散列函数。这种方法称为“基于口令的密码(Password Based Encryption,PBE)”。
?在使用对称密码时,如何在发送者和接收者之间共享密钥是一个次要的效果,要处置密钥配送效果,可以采用事前共享密钥,使用密钥分配中心,使用公钥密码等方法,除了上述方法,之前还提到一种处置密钥配送的效果的方法称为Diffie-Hellman密钥交流。
?有一种提供通信秘密性的技术称为 密钥更新 (key updating),这种方法就是在使用共享密钥停止通信的进程中,活期更改密钥。当然,发送者和接收者必需同时用十分的方法来改动密钥才行。
?在更新密钥时,发送者和接收者使用单向散列函数计算以后密钥的散列值,并将这个散列值用作新的密钥。冗杂说,就是 用以后密钥散列值作为下一个密钥 。
?我们假定在通信进程中的某个时间点上,密钥被窃听者获取了,那么窃听者就可以用这个密钥将之后的通信内容部合成密。但是,窃听者却无法解密更新密钥这个时间点之前的内容,由于这需求用单向散列函数的输入反算出单向散列函数的输出。由于单向散列函数具有单向性,因而就保证了这样的反算是十分困难的。
?这种避免破译过去的通信内容机制,称为 后向平安 (backward security)。
?由于会话密钥在通信进程中仅限于一次,因此我们不需求保管这种秘密。但是泰国鲁士坤皮的情降膏,当密钥需求重复使用时,就必需要思索保管密钥的效果了。
?人类是 无法记住具有适用长度的密钥 的。例如,像下面这样一个AES的128比特的密钥,普通人是很难记住的。
51 EC 4B 12 3D 42 03 30 04 DB 98 95 93 3F 24 9F
就算勉强记住了,也只过不是记住一个密钥而已。但假设要记住多个像这样的密钥并且保证不遗忘,实际上是非常困难的。
?我们记不住密钥,但假设将密钥保管下去又能够会被攫取。这真是一个头疼的效果。这个问题很稀有到完整处置,但我们可以思索一些合理的处置方法。
?将密钥保管生文件,并将这个文件保具有平安柜等平安中央。但是放在平安柜里的话,出门就无法使用了。这种情况,出门时就需要随身照应密钥。而如果将密钥放在存储卡随身照应的话,就会发生活储卡丧失、被盗等风险。
?万一密钥被盗,为了能够让攻击者花更多的时间才干泰国婆难颂墓地情降真正使用这个密钥,我们可以使用将密钥加密后保管的方法,当然,要将密钥加密,必需需要另一个密钥。像这样用于密码加密的密钥,普通称为KEK。
?对密钥停止加密的方法虽然没有完整处理机密性的问题,但在梦想中却是一个非常有效中央法,由于这样做可以增加需要保管密钥的数量。
?假定计算机上有100万个文件,区分使用不同的密钥进行加密生成100万个密文,结果我们手上就发生了100万个密钥,而要保管100万个密钥是很困难的。
?于是,我们用一个密钥(KEK)将这100万个密钥进行加密,那么往常我们只需保管者一个KEK就可以了,这一个KEK的价值相当于签名的100万个密钥的价值的总和。
?用1个密钥来替代多个密钥进行保管的方法,和认证机构的层级化非常相似。在后者中,我们不需要怀疑多个认证机构,而只需要怀疑一个根CA就可以了。非常的,我们也不需要确保多个密钥的机密性,而只需要确保一个KEK的机密性就可以了。
?密钥的作废和生成是同等主要的,这是由于密钥和明文是等价的。
?假定Alice向Bob发送了一封加密邮件。Bob在解密之后阅读了邮件的内容,这时本次通信所使用的密钥关于Alice和Bob来说就不需要了。不在需要的密钥必需妥善删除,因为如果被窃听者Eve获取,之前发送的加密邮件就会被解密。
?如果密钥是计算机上的一个文件,那么仅仅删除这个文件是缺少以删除密钥的,因为有一些技术能够让删除的文件“恢复”。此外,很多情况下文件的内容还会残留在计算机的内存中,因此必需将这些踪迹完整抹去。简而言之,要完整删除密钥,不但要用到密码软件,还需要在设想计算机系统时抵消息安全进行充沛的思索
?如果包括密钥的文件被误删大约保管密钥的笔记本电脑维护了,会怎样样?
?如果丧失了对称密钥密码的共享密钥,就无法解密密文了。如果丧失了消息认证码的密钥,就无法向通信对象证明自己的身份了。
?公钥密码中,一般不太会发送丧失公钥的情况,因为公钥是完整公开的,很有能够在其他电脑上具有正本。
?最大的问题是丧失公钥密码的私钥。如果丧失了公钥密码的私钥,就无法解密用公钥密码加密的密文了。此外,如果丧失了数字签名的私钥,就无法生成数字签名了。
?Diffie-Hellman密钥交流(Diffie-Hellman key exchange)是1976年由Whitfield Diffie和Martin Hellman单首发明的一种算法。使用这种算法,通信双方仅经过交流一些可以公开的消息就能够生成共享机密数字,而这一秘密数字就可以被用作对称密码的密钥。IPsec 中就使用了经过改良的Diffie-Hellman密钥交流。
2 Alice 生成一个随机数A
?A是一个1 ~ P-2之间的整数。这个数是一个只需Alice知道的密码数字,没有必要通知Bob,也不能让Eve知道。
Alice计算出的密钥=Bob计算出的密钥
? 在方法1-7中,双方交换数字一共有4个,P、G、G Amod P 和 G Bmod P。依据这4个数字计算出Alice和Bob的共享密钥是非常困难的。
?如果Eve能欧知道A和B的恣意一个数,那么计算G A*B就很冗杂了,但是仅仅依据下面的4个数字很难求出A和B的。
?依据G Amod P 计算出A的有效算法到往常还没有出现,这问题成为有限域(finite field) 的 聚会对数问题 。
?Diffie-Hellman密钥交换是使用了“聚会对数问题”的冗杂度来完成密钥的安全交换的,如果将“聚会对数问题”改为“椭圆曲线上团圆对数问题”,这样的算法就称为 椭圆曲线Diffie-Hellman 密钥交换。
?椭圆曲线Diffie-Hellman密钥交换在总体流程上是不变的,只是所使用的数学问题不同而已。椭圆曲线Diffie-Hellman密钥交换能够用较短的密钥长度完成较高的安全性。
?基于口令密码(password based encryption,PBE)就是一种根据口令生成密钥并用该密钥进行加密的方法。其中加密和解密使用同一个密钥。
?PBE有很多种完成方法。例如RFC2898和RFC7292 等规范中所描画的PBE就经过Java的javax.crypto包等进行了完成。此外,在经过密码软件PGP保管密钥时,也会使用PBE。
PBE的意义可以依照下面的逻辑来了解。
想确珍主要消息的机制性。
↓
将消息直接保管到磁盘上的话,能够被他人看到。
↓
用密钥(CEK)抵消息进行加密吧。
↓
但是这次又需要确保密钥(CEK)的机密性了。
↓
将密钥(CEK)直接保具有磁盘上似乎很风险。
↓
用另一个密钥(KEK)对密钥进行加密(CEK)吧。
↓
等等!这次又需要确保密钥(KEK)的机密性了。进入死循环了。
↓
既然如此,那就用口令来生成密钥(KEK)吧。
↓
但只用口令繁杂遭到字典攻击
↓
那么就用口令和盐独自生成密钥(KEK)吧。
↓
盐可以和加密后的密钥(CEK)一切保具有磁盘上,而密钥(KEK)可以直接抛弃。
↓
口令就记在本人的脑子里吧。
PBE加密包括下列3个方法:
? 盐是由伪随机数生成器生成的随机数,在生成密钥(KEK)时会和口令一同被输入单向散列函数。
?密钥(KEK)是根据秘密的口令生成的,加盐似乎没有什么意义,那么盐终究起到什么作用呢?
? 盐是用来进攻字典攻击的 。字典攻击是一种事激进行计算并准备好候选密钥列表的方法。
?我们假设在生成KEK的时分没有加盐。那么自动攻击者Mallory就可以根据字典数据事教员成少量的候选KEK。
?在这里,事前是很主要的一点。这意味着Mallory可以在攫取到加密会话的密钥之前,就准备好了少量的候选KEK。当Mallory攫取加密的会话密钥后,就需要尝试将它解密,这是准备好了大批事教员成的候选KEK,就能够大幅度变短尝试的时间,这就是 字典攻击 (dictionary attack)。
?如果在生成KEK时加盐,则盐的长度越大,候选KEK的数量也会随之增大,事教员成的的候选KEK就会变得非常困难。只需Mallory还没有取得盐,就无法生成候选KEK。这是因为加盐之后,候选KEK的数量会变得非常庞大。
?具有充沛长度的密钥是无法用人脑回想的。口令也是一样,我们也无法记住具有充沛比特数的口令。
?在PBE中,我们经过口令生成密钥(KEK),在用这个密钥来加密会话密钥(CEK)。由于经过口令生成的密钥(KEK)强度不如由伪随机数生成器生成的会话密钥(CEK),这就似乎是将一个动摇的安全柜的钥匙放在了一个不怎样动摇的安全柜保管,因此在使用基于口令的密钥时,需要将盐和加密后的CEK通过物理方法进行维护。例如将盐和加密后的CEK保存到存储卡随身照应。
?在生成KEK时,通过屡次使用单向散列函数就可以提高安全性。例如,将盐和口令输入单向散列函数,进行1000次的散列函数所取得的散列值作为KEK来使用,是一个不错的方法。
?像这样将单向散列函数进行屡次迭代的方法称为 拉伸 (stretching)。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图根源于原著
一、主体不同
1、密钥:是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。
2、密码:是一种用来混杂的技术,使用者希冀将一般的(可识别的)消息改动为无法识别的消息。
二、特性不同
1、密钥:消息的发送方和接收方使用同一个密钥去加密和解密数据。优势是加/解密速度快,适宜于对大数据量进行加密,但密钥管理困难。
2、密码:密码除了用于消息加密外,也用于数据信息签名和安全认证。密码的使用也不再只局限于为军事、外交退让效力,普遍使用在社会和经济活动中。
三、优势不同
1、密钥:使用的对称加密算法比拟烦琐高效,密钥冗杂,破译极端困难,由于系统的保密性主要取决于密钥的安全性。
2、密码:密码是隐蔽了真实内容的符号序列。就是把用公开的、规范的信息编码表示的信息通过一种变换手段,将其变为除通信双方以外其别人所不能读懂的信息编码。
参考资料根源:百度百科-密码
参考资料根源:百度百科-密钥
从密码学角度来说,普通“密码”只是口令,如各种账户的登录“密码”,而真正意义上的密码是与密码相对,如在加密文件的时分,加密生成的文件自身才是真正意义上的密码,加密前的文件是密码,我们设置的“密码”会通过已知的算法转换为密钥,然后密钥可以繁杂了解为一种映照联系,能把密码转换成密码,也能把密码转换成密码,“密码”与密钥是函数中的自变量与因变量的联系,所以在这个场景内,“密码”与密钥在逻辑上,留意是逻辑上,是同一种东西。那么既然有了密码,密钥还有什么具有的意义?密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的数据,密钥分为两种:对称密钥与非对称密钥,关于普通的对称密码学,加密运算与解密运算使用异样的密钥。一般使用的加密算法比拟烦琐高效,密钥冗杂,破译极端困难,由于系统的保密性主要取决于密钥的安全性,所以,在公开的计算机网络上安全地传送和保管密钥是一个严酷的问题,正是由于对称密码学中双方都使用相同的密钥,因此无法完成数据签名和不可招认性等功用,使得密钥比密码更为安全。
二者从词义上基本没区别,只是一字之差,在英文中,密码一般是指password,“密钥”是个现代词,在英文中注释为key,如果说有区别的话,团体了解是“密钥可以由多组密码所组成”,不知道能否准确。