㈠ 瀵嗙爜闀垮害8~16浣,鏁板瓧銆佸瓧姣嶃佸瓧绗﹁呖灏戝寘钖涓ょ
鍙瑕佸綋鍓嶅瘑镰佸悓镞跺寘钖链夋暟瀛楀拰瀛楁瘝锛屼笖瀵嗙爜8浣崭互涓16浣崭互涓嫔氨鍙浠ャ
渚嬶细a4321789銆乤bc12561100銆
瀵嗙爜8~16浣嶏纴鏁板瓧銆佸瓧姣嶏纴镊冲皯鍖呭惈涓ょ嶅瓧绗︽槸鎸囧瘑镰侀暱搴︽渶灏戦渶瑕8浣嶏纴链闀夸笉瓒呰繃16浣嶏绂涓旈渶瑕佸悓镞朵娇鐢ㄦ暟瀛椼佸瓧姣崭袱绉嶅瓧绗︺
涓涓鏁板瓧鍗充竴涓瀛楃︼纴涓涓瀛楁瘝涔熸槸涓涓瀛楃︺备笉闄愬畾瀛楁瘝銆佹暟瀛楃殑涓鏁板拰椤哄簭锛屽彧瑕佺﹀悎瀵嗙爜闀垮害锛8-16锛夊氨鍙浠ャ傜幇鍦ㄥ緢澶氩瘑镰侀兘瑕佹眰浣跨敤澶氱嶅瓧绗︾殑娣峰悎鏂瑰纺锛岃繖镙蜂笉鏄撹鐚沧祴鎴栬呯牬瑙o纴浠ヤ缭鎶ょ敤鎴峰瘑镰佸畨鍏ㄣ
镓╁𪾢璧勬枡锛
RSA绠楁硶鏄绗涓涓鑳藉悓镞剁敤浜庡姞瀵嗗拰鏁板瓧绛惧悕镄勭畻娉曪纴涔熸槗浜庣悊瑙e拰镎崭綔銆俣SA绠楁硶鏄涓绉嶉潪瀵圭О瀵嗙爜绠楁硶锛屾墍璋挞潪瀵圭О锛屽氨鏄鎸囱ョ畻娉曢渶瑕佷竴瀵瑰瘑阍ワ纴浣跨敤鍏朵腑涓涓锷犲瘑锛屽垯闇瑕佺敤鍙︿竴涓镓嶈兘瑙e瘑銆
RSA镄勭畻娉曟秹鍙娄笁涓鍙傛暟锛歯,e1,e2銆
鍏朵腑锛宯鏄涓や釜澶璐ㄦ暟p鍜宷镄勭Н锛宯镄浜岃繘鍒琛ㄧず镞舵墍鍗犵敤镄勪綅鏁帮纴灏辨槸镓璋撶殑瀵嗛挜闀垮害銆
e1鍜宔2鏄涓瀵圭浉鍏崇殑鍊硷纴e1鍙浠ヤ换镒忓彇锛屼絾瑕佹眰e1涓(p-1)*(q-1)浜掕川(浜掕川锛氢袱涓姝f暣鏁鍙链鍏绾︽暟1镞讹纴浠栦滑镄勫叧绯诲彨浜掕川锛夛绂鍐嶉夋嫨e2锛岃佹眰(e2*e1)mod((p-1)*(q-1))=1銆
(n,e1),(n,e2)灏辨槸瀵嗛挜瀵广
鍙傝冭祫鏂欐潵婧愶细锏惧害锏剧-瀵嗙爜
㈡ 链镢楀悕镄勫叕阍ュ瘑镰佷綋鍒舵槸浠涔堢畻娉
RSA绠楁硶銆
RSA绠楁硶鏄鐩鍓嶆渶镢楀悕鍜屽箍娉涘簲鐢ㄧ殑鍏阍ュ瘑镰佷綋鍒朵箣涓銆傚悕瀛楀彇镊涓変綅鍙戞槑钥呯殑濮撴皬锛歊ivest銆丼hamir鍜孉dleman銆俣SA绠楁硶锘轰簬澶ф暟鍒呜В镄勫汹闅炬э纴阃氲繃鐢熸垚涓瀵瑰叕阍ュ拰绉侀挜𨱒ュ疄鐜板姞瀵嗗拰瑙e瘑镄勮繃绋嬨傚叕阍ョ敤浜庡姞瀵嗘暟鎹锛岀侀挜鐢ㄤ簬瑙e瘑鏁版嵁銆俣SA绠楁硶镄勫簲鐢ㄨ寖锲撮潪甯稿箍娉涳纴鍖呮嫭瀹夊叏阃氢俊銆佹暟瀛楃惧悕銆佽韩浠介獙璇佺瓑棰嗗烟銆傜敱浜庡叾瀹夊叏镐у拰鍙闱犳э纴RSA绠楁硶琚骞挎硾搴旂敤浜庝缭鎶ゆ晱镒熶俊鎭鍜屾暟鎹镄勫畨鍏ㄤ紶杈撱
㈢ 国密算法指的是什么
国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3等,其中:
SM2为国家密码管理局公布的公钥算法,其加密强度为256位。
SM1,对称加密算法,加密强度为128位,采用硬件实现。
SM3,密码杂凑算法,杂凑值长度为32字节,和SM2算法同期公布,参见《国家密码管理局公告(第 22 号)》。
SMS4,对称加密算法,随WAPI标准一起公布,可使用软件实现,加密强度为128位。
应用举例:
在门禁应用中,采用SM1算法进行身份鉴别和数据加密通讯,实现卡片合法性的验证,保证身份识别的真实性。 安全是关系国家、城市信息、行业用户、百姓利益的关键问题。
国家密码管理局针对现有重要门禁系统建设和升级改造应用也提出指导意见,加强芯片、卡片、系统的标准化建设。截止目前,国密门禁系统的升级的案例也逐渐增多,基于自主国产知识产权的CPU卡、CPU卡读写设备及密钥管理系统广泛受到关注。
㈣ 世界上各种密码的形式
1、二方密码:
二方密码(en:Two-square_cipher)比四方密码用更少的矩阵。
得出加密矩阵的方法和四方密码一样。
例如用“example”和“keyword”作密匙,加密lp。首先找出第一个字母(L)在上方矩阵的位置,再找出第二个字母(P)在下方矩阵的位置:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
在上方矩阵找第一个字母同行,第二个字母同列的字母;在下方矩阵找第一个字母同列,第二个字母同行的字母,那两个字母就是加密的结果:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
help me的加密结果:
he lp me
HE DL XW
这种加密法的弱点是若两个字同列,便采用原来的字母,例如he便加密作HE。约有二成的内容都因此而暴露。
2、四方密码
四方密码用4个5×5的矩阵来加密。每个矩阵都有25个字母(通常会取消Q或将I,J视作同一样,或改进为6×6的矩阵,加入10个数字)。
首先选择两个英文字作密匙,例如example和keyword。对于每一个密匙,将重复出现的字母去除,即example要转成exampl,然后将每个字母顺序放入矩阵,再将余下的字母顺序放入矩阵,便得出加密矩阵。
将这两个加密矩阵放在右上角和左下角,余下的两个角放a到z顺序的矩阵:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y WO a b c d e
R D A BC f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
加密的步骤:
两个字母一组地分开讯息:(例如hello world变成he ll ow or ld)
找出第一个字母在左上角矩阵的位置
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
同样道理,找第二个字母在右下角矩阵的位置:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找右上角矩阵中,和第一个字母同行,第二个字母同列的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u NO R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找左下角矩阵中,和第一个字母同列,第二个字母同行的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
这两个字母就是加密过的讯息。
he lp me ob iw an ke no bi的加密结果:
FY GM KY HO BX MF KK KI MD
3、三分密码
首先随意制造一个3个3×3的Polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。
(4)2018年发布的密码算法扩展阅读:
加密方法:
替换加密法:用一个字符替换另一个字符的加密方法。
换位加密法:重新排列明文中的字母位置的加密法。
回转轮加密法:一种多码加密法,它是用多个回转轮,每个回转轮实现单码加密。这些回转轮可以组合在一起,在每个字母加密后产生一种新的替换模式。
多码加密法:一种加密法,其替换形式是:可以用多个字母来替换明文中的一个字母。
夹带法:通过隐藏消息的存在来隐藏消息的方法。
㈤ aes128绠楁硶 瀵嗘枃鍜屾槑鏂囧备綍绠楀嚭瀵嗙爜
AES-128鏄涓绉嶅圭О锷犲瘑绠楁硶锛屼娇鐢ㄧ浉钖岀殑瀵嗛挜杩涜屽姞瀵嗗拰瑙e瘑銆傚瘑阍ラ暱搴︿负128浣嶏纸16瀛楄妭锛夛纴瀵嗛挜鍙浠ユ槸闅忔満鐢熸垚镄勚
瑕佽$畻鍑哄瘑镰侊纸鍗冲瘑鏂囧拰鏄庢枃涔嬮棿镄勮浆鎹锛夛纴闇瑕佷互涓嬫ラわ细
1. 瀵嗛挜鐢熸垚锛氶栧厛锛岄渶瑕佺敓鎴愪竴涓128浣岖殑瀵嗛挜銆傚瘑阍ュ彲浠ユ槸闅忔満鐢熸垚镄勶纴涔熷彲浠ヤ娇鐢ㄥ瘑镰佸﹀畨鍏ㄧ殑浼闅忔満鏁扮敓鎴愬櫒鐢熸垚銆
2. 鍒嗙粍鍜屽~鍏咃细灏嗘槑鏂囧垎鎴愬浐瀹氶暱搴︾殑鍧楋纸阃氩父涓128浣嶏级銆傚傛灉鏄庢枃镄勯暱搴︿笉鏄鍧楅暱搴︾殑鏁存暟鍊嶏纴闇瑕佽繘琛屽~鍏咃纴浠ユ弧瓒冲潡闀垮害镄勮佹眰銆
3. 鍒濆嬭疆瀵嗛挜锷狅细灏嗙敓鎴愮殑瀵嗛挜涓庣涓涓瀵嗘枃鍧楄繘琛屽纾鎴栨搷浣溿
4. 杞鍑芥暟锛欰ES绠楁硶涓浣跨敤浜嗕竴绯诲垪镄勮疆鍑芥暟锛屽寘𨰾瀛楄妭浠f崲锛圫ubBytes锛夈佽屼綅绉伙纸ShiftRows锛夈佸垪娣锋穯锛圡ixColumns锛夊拰杞瀵嗛挜锷狅纸AddRoundKey锛夌瓑镎崭綔銆傝繖浜涙搷浣滃湪姣忎竴杞涓閮戒细琚搴旂敤鍒板瘑鏂囧潡涓娿
5. 杞鏁板惊鐜锛氭牴鎹瓵ES绠楁硶镄勮勫畾锛屾牴鎹瀵嗛挜闀垮害纭瀹氩姞瀵呜疆鏁般傛疮涓杞涓閮戒细瀵瑰瘑鏂囧潡杩涜屼竴绯诲垪镄勮疆鍑芥暟镎崭綔銆
6. 链钖庝竴杞锛氩湪链钖庝竴杞涓锛屼笉浼氭墽琛屽垪娣锋穯锛圡ixColumns锛夋搷浣溿
7. 瀵嗘枃鐢熸垚锛氱粡杩囨墍链夎疆鏁扮殑澶勭悊钖庯纴链钖庡缑鍒扮殑瀵嗘枃鍗充负锷犲瘑钖庣殑缁撴灉銆
瑙e瘑杩囩▼涓庡姞瀵呜繃绋嬬浉浼硷纴鍙鏄鍦ㄨ疆瀵嗛挜锷狅纸AddRoundKey锛夋ラや腑浣跨敤镄勬槸阃嗗瘑阍ワ纴浠ラ嗗簭杩涜岃В瀵嗘搷浣溿
闇瑕佹敞镒忕殑鏄锛屽姞瀵嗗拰瑙e瘑浣跨敤鐩稿悓镄勫瘑阍ワ纴锲犳ゅ湪杩涜屾暟鎹浼犺緭镞讹纴闇瑕佺‘淇濆瘑阍ョ殑瀹夊叏镐э纴浠ュ厤琚链鎺堟潈镄勪汉銮峰缑瀵嗛挜骞惰В瀵嗘暟鎹銆
㈥ 十大常见密码加密方式
一、密钥散列
采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘要的160位(20字节)散列值。MD5相对SHA1来说,安全性较低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。
二、对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
三、非对称加密
非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
四、数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。
五、直接明文保存
早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
六、使用MD5、SHA1等单向HASH算法保护密码
使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。
七、特殊的单向HASH算法
由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。
八、PBKDF2
该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。
九、BCrypt
BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线破解的威胁模型分析中表现并不突出。
十、SCrypt
SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于破解。
㈦ 鍗佸ぇ甯歌佸瘑镰佸姞瀵嗘柟寮
1銆丷SA绠楁硶瀵嗙爜RSA绠楁硶鏄绗涓涓鑳藉悓镞剁敤浜庡姞瀵嗗拰鏁板瓧绛惧悕镄勭畻娉曪纴涔熸槗浜庣悊瑙e拰镎崭綔銆俣SA绠楁硶鏄涓绉嶉潪瀵圭О瀵嗙爜绠楁硶锛屾墍璋挞潪瀵圭О锛屽氨鏄鎸囱ョ畻娉曢渶瑕佷竴瀵瑰瘑阍ワ纴浣跨敤鍏朵腑涓涓锷犲瘑锛屽垯闇瑕佺敤鍙︿竴涓镓嶈兘瑙e瘑銆
2銆佹瘆濡傜敤鎴疯剧疆镄勫瘑镰佹槸钬123456钬濓纴鐩存帴灏嗏123456钬濅缭瀛桦湪鏁版嵁搴扑腑锛岃繖绉嶆槸链绠鍗旷殑淇濆瓨鏂瑰纺锛屼篃鏄链涓嶅畨鍏ㄧ殑鏂瑰纺銆备絾瀹为檯涓娄笉灏戜簰镵旂绣鍏鍙革纴閮藉彲鑳介噰鍙栫殑鏄杩欑嶆柟寮忋
3銆佸圭О锷犲瘑瀵圭О锷犲瘑閲囩敤鍗曢挜瀵嗙爜绯荤粺镄勫姞瀵嗘柟娉曪纴钖屼竴涓瀵嗛挜鍙浠ュ悓镞剁敤浣滀俊鎭镄勫姞瀵嗗拰瑙e瘑锛岃繖绉嶅姞瀵嗘柟娉旷О涓哄圭О锷犲瘑锛屼篃绉颁负鍗曞瘑阍ュ姞瀵嗐
㈧ 加密技术06-加密总结
对称密码是一种用相同的密钥进行加密和解密的技术,用于确保消息的机密性。在对称密码的算法方面,目前主要使用的是 AES。尽管对称密码能够确保消息的机密性,但需要解决将解密密钥配送给接受者的密钥配送问题。
主要算法
DES
数据加密标准(英语:Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。
DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。
原理请参考: 加密技术01-对称加密-DES原理
3DES
三重数据加密算法(英语:Triple Data Encryption Algorithm,缩写为TDEA,Triple DEA),或称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次DES算法。由于计算机运算能力的增强,原版DES由于密钥长度过低容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
注意:有3个独立密钥的3DES的密钥安全性为168位,但由于中途相遇攻击(知道明文和密文),它的有效安全性仅为112位。
3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。
密文 = E k3 (D k2 (E k1 (明文)))
而解密则为其反过程:
明文 = D k3 (E k2 (D k1 (密文)))
AES
AES 全称 Advanced Encryption Standard(高级加密标准)。它的出现主要是为了取代 DES 加密算法的,因为 DES 算法的密钥长度是 56 位,因此算法的理论安全强度是 56 位。于是 1997 年 1 月 2 号,美国国家标准技术研究所宣布什望征集高级加密标准,用以取代 DES。AES 也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6 和 MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael 算法获胜。
AES 密码与分组密码 Rijndael 基本上完全一致,Rijndael 分组大小和密钥大小都可以为 128 位、192 位和 256 位。然而 AES 只要求分组大小为 128 位,因此只有分组长度为 128 位的 Rijndael 才称为 AES 算法。
本文 AES 默认是分组长度为 128 位的 Rijndael 算法
原理请参考: 加密技术02-对称加密-AES原理
算法对比
公钥密码是一种用不同的密钥进行加密和解密的技术,和对称密码一样用于确保消息的机密性。使用最广泛的一种公钥密码算法是 RAS。和对称密码相比,公钥密码的速度非常慢,因此一般都会和对称密码一起组成混合密码系统来使用。公钥密码能够解决对称密码中的密钥交换问题,但存在通过中间人攻击被伪装的风险,因此需要对带有数字签名的公钥进行认证。
公钥密码学的概念是为了解决对称密码学中最困难的两个问题而提出
应用场景
几个误解
主要算法
Diffie–Hellman 密钥交换
迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。公钥交换的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表,也是在公开文献中发布的第一个非对称方案。
Diffie–Hellman 算法的有效性是建立在计算离散对数很困难的基础上。简单地说,我们可如下定义离散对数。首先定义素数 p 的本原跟。素数 p 的本原根是一个整数,且其幂可以产生 1 到 p-1 之间所有整数,也就是说若 a 是素数 p 的本原根,则
a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整数 1 到 p-1 的一个置换。
对任意整数 b 和素数 p 的本原跟 a,我们可以找到唯一的指数 i 使得
b ≡ a i (mod p) 其中 0 <= i <= p-1
其中 a, b, p 这些是公开的,i 是私有的,破解难度就是计算 i 的难度。
Elgamal
1985年,T.Elgamal 提出了一种基于离散对数的公开密钥体制,一种与 Diffie-Hellman 密钥分配体制密切相关。Elgamal 密码体系应用于一些技术标准中,如数字签名标准(DSS) 和 S/MIME 电子邮件标准。
基本原理就是利用 Diffie–Hellman 进行密钥交换,假设交换的密钥为 K,然后用 K 对要发送的消息 M,进行加密处理。
所以 Elgamal 的安全系数取决于 Diffie–Hellman 密钥交换。
另外 Elgamal 加密后消息发送的长度会增加一倍。
RSA
MIT 的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在 1977 年提出并于 1978 年首次发表的算法。RSA 是最早满足要求的公钥算法之一,自诞生日起就成为被广泛接受且被实现的通用的公钥加密方法。
RSA 算法的有效性主要依据是大数因式分解是很困难的。
原理请参考: 加密技术03-非对称加密-RSA原理
ECC
大多数使用公钥密码学进行加密和数字签名的产品和标准都使用 RSA 算法。我们知道,为了保证 RSA 使用的安全性,最近这些年来密钥的位数一直在增加,这对使用 RSA 的应用是很重的负担,对进行大量安全交易的电子商务更是如此。近来,出现的一种具有强大竞争力的椭圆曲线密码学(ECC)对 RSA 提出了挑战。在标准化过程中,如关于公钥密码学的 IEEE P1363 标准中,人们也已考虑了 ECC。
与 RSA 相比,ECC 的主要诱人之处在于,它可以使用比 RSA 短得多的密钥得到相同安全性,因此可以减少处理负荷。
ECC 比 RSA 或 Diffie-Hellman 原理复杂很多,本文就不多阐述了。
算法对比
公钥密码体制的应用
密码分析所需计算量( NIST SP-800-57 )
注:L=公钥的大小,N=私钥的大小
散列函数是一种将长消息转换为短散列值的技术,用于确保消息的完整性。在散列算法方面,SHA-1 曾被广泛使用,但由于人们已经发现了一些针对该算法理论上可行的攻击方式,因此该算法不应再被用于新的用途。今后我们应该主要使用的算法包括目前已经在广泛使用的 SHA-2,以及具有全新结构的 SHA-3 算法。散列函数可以单独使用,也可以作为消息认证、数字签名以及伪随机数生成器等技术的组成元素来使用。
主要应用
主要算法
MD5
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位( 16 字节,被表示为 32 位十六进制数字)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于 1992 年公开,用以取代 MD4 算法。这套算法的程序在 RFC 1321 中被加以规范。
2009年,中国科学院的谢涛和冯登国仅用了 2 20.96 的碰撞算法复杂度,破解了MD5的碰撞抵抗,该攻击在普通计算机上运行只需要数秒钟。2011年,RFC 6151 禁止MD5用作密钥散列消息认证码。
原理请参考: 加密技术04-哈希算法-MD5原理
SHA-1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦资料处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全,不能继续使用,自2010年以来,许多组织建议用SHA-2或SHA-3来替换SHA-1。Microsoft、Google以及Mozilla都宣布,它们旗下的浏览器将在2017年停止接受使用SHA-1算法签名的SSL证书。
2017年2月23日,CWI Amsterdam与Google宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为概念证明。
2020年,针对SHA-1的选择前缀冲突攻击已经实际可行。建议尽可能用SHA-2或SHA-3取代SHA-1。
原理请参考: 加密技术05-哈希算法-SHA系列原理
SHA-2
SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
SHA-2 系列的算法主要思路和 SHA-1 基本一致
原理请参考: 加密技术05-哈希算法-SHA系列原理
SHA-3
SHA-3 第三代安全散列算法(Secure Hash Algorithm 3),之前名为 Keccak 算法。
Keccak 是一个加密散列算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上设计。
2012年10月2日,Keccak 被选为 NIST 散列函数竞赛的胜利者。SHA-2 目前没有出现明显的弱点。由于对 MD5、SHA-0 和 SHA-1 出现成功的破解,NIST 感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的 SHA-3。
SHA-3 在2015年8月5日由 NIST 通过 FIPS 202 正式发表。
原理请参考: 加密技术05-哈希算法-SHA系列原理
算法对比