㈠ 密码技术
密码算法的特性
1、是否需要事先配送私钥:对称密码需要考虑
2、是否会遭到中间人攻击:非对称密码分发公钥时需要考虑
3、不可抵赖(可被双方 和 第三方 用原理证明):非对称密码分发公钥时需要考虑
4、能否保证消息的机密性:即不可破译
5、能否保证消息的完整性(一致性):即不可篡改
6、不可冒充(伪造)
总结:对称密码(解决456)--非对称密码之单向通信--> 混合密码(解决1) --非对称密码之数字签名--> 公钥证书(解决23)
概念
密码算法:加密算法 + 密钥 + 解密算法,简称密码
密钥空间:密钥的所有取值
隐蔽式安全性:以密码算法不为人所知,来保证机密性
分组密码:对明文进行分组加密,而非以全文作为输入
流密码:不分组,整体加密
破解密文的方法
1、窃听 + 破译
2、社会工程学
破解密钥的方法
1、暴力破解(密钥穷举),例如破译凯撒密码
2、频率分析,例如破译简单替换密码
3、选择明文攻击(对分组进行明文穷举)
加密系统的可选技术
隐写术:将消息藏在更大的数据中,例如藏头诗
伪随机数生成器
散列值(摘要,哈希值,指纹):原文经过散列函数(摘要函数,哈希函数,杂凑函数,单向加密)计算出来的值
对称密码(共享密钥密码):加密和解密用同一个私钥
非对称密码(公钥密码):公钥加密,私钥解密
消息认证码
数字签名
公钥证书
碰撞:两个消息的散列值相同
弱抗碰撞性:给定一条消息,很难找到另一条消息与其散列值相同。防止以下情形,Bob持有一个消息A,计算其摘要;Alice找到与A散列值相同的另一条消息B,用B将A调包;由于摘要不变,不被Bob发觉
强抗碰撞性:很难找到两条散列值相同的消息。防止以下情形,Alice拿两个摘要相同的消息A和B,将A发给Bob;Bob计算其摘要;Alice再用B将A调包;由于摘要不变,不被Bob发觉
MD5(Message Digest 5)
历史:1991年Ronald Rivest 设计出MD5
现状:2004年王小云提出了MD5碰撞攻击算法
SHA
历史:1993年NIST发布SHA,1995年发布SHA-1,2002年发布SHA-2
现状:2004年王小云提出了SHA-0的碰撞攻击算法;2005年王小云提出了SHA-1的碰撞攻击算法
SHA-3
历史:2007年NIST发起选拔SHA-3,2012年Joan Daemen等人设计的Keccak算法被选定为SHA-3
弱伪随机数:随机性
强伪随机数:不可预测性
真随机数:不可重现性
随机数生成器:硬件可以通过热噪声实现真随机数
伪随机数生成器:软件只能生成伪随机数,需要一种子seed来初始化
伪随机数算法:线性同余法、散列法、密码法等
好的对称密码解决:不可破译
缺点:需要事先配送密钥
凯撒密码
加密算法:字母平移
密钥:平移位数
解密算法:逆向平移
破解密钥:穷举可能的密钥
简单替换密码
加密算法:一个字母替换成另一个字母
密钥:替换表
解密算法:逆向替换
破解密钥:对密文的字母 和 字母组合进行频率分析,与通用频率表对比;用破译出来的明文字母,代入密文,循环分析
Enigma密码
发明者:德国人Arthur Sherbius
加密算法:双重加密,每日密钥作为密钥1,想一个密钥2;用密钥1加密密钥2,得到密钥2密文;用密钥2加密消息;将密钥2密文和消息密文一起发出
密钥:密钥册子记录的每天不同的密钥
解密算法:用每日密钥解密密钥2密文,得到密钥2;用密钥2解密消息密文
破译者:Alan Turing 图灵
DES密码(Data Encryption Standard)
历史:1974年IBM公司的Horst Feistel开发出了Lucifer密码,1977年被美国国家标准学会(American National Standards Institute,ANSI)确定为DES标准
加密算法:以64比特为一组,进行16轮运算。在一轮中,把一组分为左侧和右侧,并从密钥中提取子密钥;轮函数用一侧和子密钥生成一个比特序列,用这个比特序列对另一侧进行异或运算(XOR)
密钥:长度56位
破译:可在现实时间内被暴力破解
三重DES密码(triple-DES,TDEA,3DES)
加密算法:将DES重复三次
密钥:长度 56 * 3
AES密码(Advanced Encryption Standard)
历史:1997年,美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)公开募集AES,2000年比利时密码学家Joan Daemen 和 Vincent Rijmen提交的Rijndael方案,被选为标准
加密算法:以128比特为一组,进行多轮的替换、平移、矩阵运算
密钥:有128,192,256三种长度
分组密码的迭代模式
ECB模式:Electronic CodeBook mode,电子密码本模式;明文分组 和 密文分组 顺序对应。主动攻击者可以改变密文分组的顺序,复制 或 删除密文分组,使得接受者解密后得到错误的明文
CBC模式:Cipher Block Chaining mode,密码分组链接模式;将本组明文 和 上组密文 进行异或运算后,在进行加密;如果被篡改,则不能正常解密
CFB模式:Cipher Feedback mode,密文反馈模式;将本组明文 和 上组密文 进行异或运算后,就得到本组的密文
OFB模式:Output Feedback mode,输出反馈模式;用随机比特序列作为初始化组(初始化向量);用初始化组的密文和 明文分组 异或运算,得到密文分组;再次对初始化组密文进行加密运算,得到新的初始化组密文,跟下组明文进行异或运算,以此类推
CTR模式:CounTeR mode,计数器模式;用随机比特序列作为计数器的初始值,加密后与明文分组进行异或操作,得到密文分组;计数器加一,对下组明文进行加密
对称密码中,发送方发送密文时,带上消息的MAC值A;接收方用相同方法计算出MAC值B;对比A和B,确保消息不被篡改
Encrypt-then-MAC:MAC值为消息密文的散列值
Encrypt-and-MAC:MAC值为消息明文的散列值
MAC-then-Encrypt:MAC值为明文散列值的密文
重放攻击:攻击者窃听到Alice给Bob发送的消息后,重复给Bob发送,Bob以为都是Alice发的
预防重放攻击:消息里带有一个id
比对称密码:不可篡改、不可伪造
缺点:需要实现配送私钥
基于口令的密码:Password Based Encryption,PBE
解决:密钥(会话密钥)保存问题
CEK:会话密钥
KEK:用来加密CEK的密钥
方案
1、随机数作为盐salt,口令 + 盐 的散列值作为KEK
2、用KEK加密CEK,得到CEK密文
3、只保存盐和CEK密文,人脑记住口令,丢弃KEK
字典攻击:如果没有盐参与生成KEK,那么口令决定了KEK,常用的口令对应一个常用KEK字典,攻击者直接拿常用KEK去解密CEK密文
盐的作用:KEK由盐参与形成,不可能有KEK字典包含这样的KEK
非对称密码单向通信,不能单独用于通信,只用在混合密码中
方案:Alice 给 Bob 分发加密密钥(公钥);Bob用公钥加密消息,发送给Alice;Alice用解密密钥(私钥)解密
总结:消息接收者是密钥对主人,即私钥持有人;公钥用于加密,私钥用于解密
RSA密码
历史:1978年,Ron Rivest、Adi Shamir、Reonard Adleman共同发表了RSA
加密算法:密文 = 明文 E mode N
公钥:E 和 N的组合
解密算法:明文 = 密文 D mode N
私钥:D 和 N的组合
生成密钥对
生成质数:用伪随机数生成随机数,通过Miller-Rabin测试法测试它是不是质数,直到得到质数
求最大公约数:欧几里得的辗转相除法
1、求N
生成两个512位的质数p和q,N = p * q
2、求L
L是p-1 和 q-1 的最小公倍数
3、求E
用伪随机数生成(1,L)范围内的随机数,直到满足E和L的最大公约数为1
4、求D
用伪随机数生成(1,L)范围内的随机数,直到满足(E * D) mod L = 1
破解:对N进行质因数分解,得到p和q,从而求出D。但是对大数的质因数分解,未有快速有效的方法
首次通信为混合密码,后续通信为对称密码
比消息认证码:无需事先配送私钥
总体思路:Bob 用会话密钥加密消息,用Alice的公钥加密会话密钥,一起发给Alice;Alice用私钥解密会话密钥,用会话密钥解密消息
会话密钥:用来加密消息的 对称密码的密钥
1、Alice 给 Bob 发送公钥
2、Bob随机生成会话密钥,用会话密钥加密消息,得到消息密文
3、Bob用公钥加密会话密钥,得到会话密钥密文
4、Bob将会话密钥密文和消息密文一起发给Alice
5、Alice用私钥解密会话密钥,再用会话密钥解密消息
6、双方都有了会话密钥,从此以后,可以用对称密码通信了,带上消息认证码
缺点:分发公钥时,可能遭受中间人攻击;Alice可能对给Bob发送公钥这件事进行抵赖
中间人攻击:中间人从一开始Alice向Bob发放公钥时,就拦截了消息,得到Alice的公钥;然后伪装成Alice,向Bob发送自己的公钥;从而Bob打算发给Alice的消息,能被中间人解密
不能单独用于通信,只用在公钥证书中
明文签名:Alice用签名密钥(私钥)加密消息的摘要,把摘要密文和消息明文一起发给Bob;Bob解密摘要密文,得到摘要A;算出明文摘要B,对比A和B
总结:私钥用于加密,公钥用于解密,与 非对称加密之单向通信,刚好反过来
公钥证书:Public-Key Certificate,PKC,简称证书
认证机构:Certification Authority,CA
证书标准:国际电信联盟ITU 和 国际标准化组织ISO指定的X.509标准
流程:
1、Alice在CA登记
2、CA生成Alice的证书明文,包含Alice登记的信息、Alice的公钥、CA信息
3、CA用自己的私钥加密证书明文部分,得到数字签名
4、证书明文部分 和 数字签名 组成PKC,颁发给Alice
5、Bob向Alice获取这个PKC,拿本地已有的CA公钥去验证证书,就得到了可信的Alice的公钥
6、从此Alice 和 Bob之间可以进行混合密码通信
首次通信为从CA获取PKC,后续通信为混合密码
比混合密码:防止了中间人攻击;CA不能抵赖自己的证书
历史:1994年网景公司设计出SSL,2014年SSL 3.0被发现安全漏洞,1999年IEIF发布TLS
TLS(Transport Layer Security)是SSL(Secure Socket Layer)的后续版本,在tcp和http之间加一层TLS,就是https
OpenSSL:OpenSSL是实现SSL/TLS协议的工具包
以https为例
0、浏览器安装时,存有几个CA公钥;服务器在CA登记,拿到证书
1、浏览器访问一个https地址,服务器返回自己的证书
2、浏览器根据证书上的CA信息,拿对应的CA公钥验证证书,得到可信的服务器公钥
3、浏览器生成对称密码的密钥(会话密钥),用服务器公钥加密后发给服务器
4、服务器解密后得到会话密钥,从此用对称密码通信,带上消息认证码
1、生成JKS证书:keytool -genkeypair -alias "别名" -keyalg "RSA" -keystore "D:app.jks"
2、将JKS转换成PKCS12:keytool -importkeystore -srckeystore D:app.jks -destkeystore D:app.p12 -deststoretype pkcs12
3、将PKCS12转成pem:openssl pkcs12 -in ./app.p12 -out app.pem
4、提取加密后的私钥:将pem中 “—–BEGIN ENCRYPTED PRIVATE KEY—–” 至 “—–END ENCRYPTED PRIVATE KEY—–” 的内容拷贝出来,保存为ciphertext.key
5、将密文私钥转成明文私钥:openssl rsa -in ciphertext.key -out plaintext.key
.jks(Java Key Storage):二进制格式,包含证书和私钥,有密码保护
.pfx 或 .p12(Predecessor of PKCS#12):二进制格式,包含证书和私钥,有密码保护
.pem(Privacy Enhanced Mail):文本格式,包含证书,可包含私钥,私钥有密码保护
.der 或 .cer:二进制格式,只包含证书
.crt(Certificate):可以是der格式,也可以是pem格式,只包含证书
SSL证书:SSL证书必须绑定域名,不能绑定IP
加密服务、密钥管理服务
㈡ 信息加密技术的加密技术分析
加密就是通过密码算术对数据进行转化,使之成为没有正确密钥任何人都无法读懂的报文。而这些以无法读懂的形式出现的数据一般被称为密文。为了读懂报文,密文必须重新转变为它的最初形式--明文。而含有用来以数学方式转换报文的双重密码就是密钥。在这种情况下即使一则信息被截获并阅读,这则信息也是毫无利用价值的。而实现这种转化的算法标准,据不完全统计,到现在为止已经有近200多种。在这里,主要介绍几种重要的标准。按照国际上通行的惯例,将这近200种方法按照双方收发的密钥是否相同的标准划分为两大类:一种是常规算法(也叫私钥加密算法或对称加密算法),其特征是收信方和发信方使用相同的密钥,即加密密钥和解密密钥是相同或等价的。比较着名的常规密码算法有:美国的DES及其各种变形,比如3DES、GDES、New DES和DES的前身Lucifer; 欧洲的IDEA;日本的FEAL N、LOKI?91、Skipjack、RC4、RC5以及以代换密码和转轮密码为代表的古典密码等。在众多的常规密码中影响最大的是DES密码,而最近美国NIST(国家标准与技术研究所)推出的AES将有取代DES的趋势,后文将作出详细的分析。常规密码的优点是有很强的保密强度,且经受住时间的检验和攻击,但其密钥必须通过安全的途径传送。因此,其密钥管理成为系统安全的重要因素。另外一种是公钥加密算法(也叫非对称加密算法)。其特征是收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推导解密密钥。比较着名的公钥密码算法有:RSA、背包密码、McEliece密码、Diffe Hellman、Rabin、Ong Fiat Shamir、零知识证明的算法、椭圆曲线、EIGamal算法等等⑷。最有影响的公钥密码算法是RSA,它能抵抗到目前为止已知的所有密码攻击,而最近势头正劲的ECC算法正有取代RSA的趋势。公钥密码的优点是可以适应网络的开放性要求,且密钥管理问题也较为简单,尤其可方便的实现数字签名和验证。但其算法复杂,加密数据的速率较低。尽管如此,随着现代电子技术和密码技术的发展,公钥密码算法将是一种很有前途的网络安全加密体制。这两种算法各有其短处和长处,在下面将作出详细的分析。 在私钥加密算法中,信息的接受者和发送者都使用相同的密钥,所以双方的密钥都处于保密的状态,因为私钥的保密性必须基于密钥的保密性,而非算法上。这在硬件上增加了私钥加密算法的安全性。但同时我们也看到这也增加了一个挑战:收发双方都必须为自己的密钥负责,这种情况在两者在地理上分离显得尤为重要。私钥算法还面临这一个更大的困难,那就是对私钥的管理和分发十分的困难和复杂,而且所需的费用十分的庞大。比如说,一个n个用户的网络就需要派发n(n-1)/2个私钥,特别是对于一些大型的并且广域的网络来说,其管理是一个十分困难的过程,正因为这些因素从而决定了私钥算法的使用范围。而且,私钥加密算法不支持数字签名,这对远距离的传输来说也是一个障碍。另一个影响私钥的保密性的因素是算法的复杂性。现今为止,国际上比较通行的是DES、3DES以及最近推广的AES。
数据加密标准(Data Encryption Standard)是IBM公司1977年为美国政府研制的一种算法。DES是以56 位密钥为基础的密码块加密技术。它的加密过程一般如下:
① 一次性把64位明文块打乱置换。
② 把64位明文块拆成两个32位块;
③ 用机密DES密钥把每个32位块打乱位置16次;
④ 使用初始置换的逆置换。
但在实际应用中,DES的保密性受到了很大的挑战,1999年1月,EFF和分散网络用不到一天的时间,破译了56位的DES加密信息。DES的统治地位受到了严重的影响,为此,美国推出DES的改进版本-- 三重加密(triple Data Encryption Standard)即在使用过程中,收发双方都用三把密钥进行加解密,无疑这种3*56式的加密方法大大提升了密码的安全性,按现在的计算机的运算速度,这种破解几乎是不可能的。但是我们在为数据提供强有力的安全保护的同时,也要化更多的时间来对信息进行三次加密和对每个密层进行解密。同时在这种前提下,使用这种密钥的双发都必须拥有3个密钥,如果丢失了其中任何一把,其余两把都成了无用的密钥。这样私钥的数量一下又提升了3倍,这显然不是我们想看到的。于是美国国家标准与技术研究所推出了一个新的保密措施来保护金融交易。高级加密标准(Advanced Encryption Standard)美国国家技术标准委员会(NIST)在2000年10月选定了比利时的研究成果Rijndael作为AES的基础。Rijndael是经过三年漫长的过程,最终从进入候选的五种方案中挑选出来的。
AES内部有更简洁精确的数学算法,而加密数据只需一次通过。AES被设计成高速,坚固的安全性能,而且能够支持各种小型设备。AES与3DES相比,不仅是安全性能有重大差别,使用性能和资源有效利用上也有很大差别。虽然到现在为止,我还不了解AES的具体算法但是从下表可以看出其与3DES的巨大优越性。
还有一些其他的一些算法,如美国国家安全局使用的飞鱼(Skipjack)算法,不过它的算法细节始终都是保密的,所以外人都无从得知其细节类容;一些私人组织开发的取代DES的方案:RC2、RC4、RC5等。 面对在执行过程中如何使用和分享密钥及保持其机密性等问题,1975年Whitefield Diffe和Marti Hellman提出了公开的密钥密码技术的概念,被称为Diffie-Hellman技术。从此公钥加密算法便产生了。
由于采取了公共密钥,密钥的管理和分发就变得简单多了,对于一个n个用户的网络来说,只需要2n个密钥便可达到密度。同时使得公钥加密法的保密性全部集中在及其复杂的数学问题上,它的安全性因而也得到了保证。但是在实际运用中,公共密钥加密算法并没有完全的取代私钥加密算法。其重要的原因是它的实现速度远远赶不上私钥加密算法。又因为它的安全性,所以常常用来加密一些重要的文件。自公钥加密问世以来,学者们提出了许多种公钥加密方法,它们的安全性都是基于复杂的数学难题。根据所基于的数学难题来分类,有以下三类系统目前被认为是安全和有效的:大整数因子分解系统(代表性的有RSA)、椭圆曲线离散对数系统(ECC)和离散对数系统 (代表性的有DSA),下面就作出较为详细的叙述。
RSA算法是由罗纳多·瑞维斯特(Rivet)、艾迪·夏弥尔(Shamir)和里奥纳多·艾德拉曼(Adelman)联合推出的,RAS算法由此而得名。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的着名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。它得具体算法如下:
① 找两个非常大的质数,越大越安全。把这两个质数叫做P和Q。
② 找一个能满足下列条件得数字E:
A. 是一个奇数。
B. 小于P×Q。
C. 与(P-1)×(Q-1)互质,只是指E和该方程的计算结果没有相同的质数因子。
③ 计算出数值D,满足下面性质:((D×E)-1)能被(P-1)×(Q-1)整除。
公开密钥对是(P×Q,E)。
私人密钥是D。
公开密钥是E。
解密函数是:
假设T是明文,C是密文。
加密函数用公开密钥E和模P×Q;
加密信息=(TE)模P×Q。
解密函数用私人密钥D和模P×Q;
解密信息=(CD)模P×Q。
椭圆曲线加密技术(ECC)是建立在单向函数(椭圆曲线离散对数)得基础上,由于它比RAS使用得离散对数要复杂得多。而且该单向函数比RSA得要难,所以与RSA相比,它有如下几个优点:
安全性能更高 加密算法的安全性能一般通过该算法的抗攻击强度来反映。ECC和其他几种公钥系统相比,其抗攻击性具有绝对的优势。如160位 ECC与1024位 RSA有相同的安全强度。而210位 ECC则与2048bit RSA具有相同的安全强度。
计算量小,处理速度快 虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。因此ECC总的速度比RSA、DSA要快得多。
存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
带宽要求低 当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。而公钥加密系统多用于短消息,例如用于数字签名和用于对对称系统的会话密钥传递。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
ECC的这些特点使它必将取代RSA,成为通用的公钥加密算法。比如SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。