加密算法应用之密码保护_第1页
加密算法应用之密码保护_第2页
加密算法应用之密码保护_第3页
加密算法应用之密码保护_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

加密算法应⽤之密码保护⽬前,各企、事业单位和国家机关纷纷建⽴了⾃⼰的信息系统,并且各信息系统的规模在不断扩⼤,地位和作⽤也越来越突出,安全问题也就逐渐被⼈们所重视。⼈们关注较多的是⽹络传输的安全,⽽系统后台服务器存放的⽤户⼝令的泄密也会给企业带来不可估量的损失。因此,建⽴⼀套完善的安全机制,以有效保护⽤户⼝令同样重要。本⽂以⽤户登录模块为应⽤场景,从、传输、存储三⽅⾯,介绍如何对⽤户的密码进⾏保护,才不会导致⽤户信息泄露。涉及的知识点:加密算法、消息摘要算法、安全随机函数、硬件加密设备、⽤户登录最佳实践等。数据泄露事件(数据来源于互联⽹)2011年12⽉,国内最⼤的程序员社区CSDN遭拖库,600万个账户信息泄露。2014年5⽉,⼩⽶论坛涉及800万⽤户信息遭泄露,信息包括⽤户名、密码、注册IP、邮箱等。2015年10⽉,⽹易邮箱遭攻击,近5亿条⽤户信息被泄露,包括⽤户名、密码、密码保护信息、登陆IP以及⽤户⽣⽇等多个原始信息。2016年,UBER泄露的数据包括五千万名优步客户的姓名、电⼦邮件和电话号码,⼤约七百万司机个⼈资料2017年6⽉,美国共和党全国委员会承包商托管在AWSS3上的数据库泄露,暴露了超过1.98亿美国公民1.1TB的资料,约占投票⼈⼝的61%,泄露的数据包含美国选民的个⼈信息。2018年8⽉华住5亿条数据泄露,包括1.23亿条官⽹注册资料、1.3亿条⼊住登记⾝份信息以及2.4亿条详细开房记录。当天股价下跌4.36%2018年6⽉3⽇,以⾊列DNA测试⽹站Myheritage9230万个⽤户的邮箱地址和哈希密码泄露。并没有发现这些泄露数据遭到滥⽤的情况,⽽且⿊客只是获取了⽤户邮箱地址。2018年6⽉13⽇凌晨,AcFun(A站)发布公告称,A站受到⿊客攻击,近千万条⽤户数据外泄,2017年7⽉7⽇之后从未登陆过的⽤户以及密码强度低的⽤户需要⽴刻更改密码,⽽跟A站⽤户信息中密码保持⼀致的,也要⼀并更改。对称加密:采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密。常⽤对称加密算法:AES、SM4、3DES、TDEA、Blowfish、RC5、IDEA、SKIPJACK、DES、XXTEA加密:Aes(“密钥”,“要加密的值”)⾮对称加密:⾮对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是⼀对,如果⽤公开密钥对数据进⾏加密,只有⽤对应的私有密钥才能解密;如果⽤私有密钥对数据进⾏加密,那么只有⽤对应的公开密钥才能解密。常⽤加密算法:ECC、RSA、Elgamal、Diffie-Hellman、DSA(数字签名)、SM2ECC和RSA区别:数据安全,RSA的密钥需要不断增加,但密钥的长度导致其加解密的速度⼤为降低。1985年ECC发明,并推⼴迅速.ECC的优势:抗攻击性强、CPU占⽤少,内容使⽤少,加密速度快消息摘要算法(Hash算法):Hash,⼀般翻译做“散列”,也有直接⾳译为“哈RSA在1976年发明,为了保障希”的。就是把任意长度的输⼊通过散列算法变换成固定长度的输出(消息摘要),该输出就是散列值。不推荐的Hash算法:MD5、SHA-1⼀般Hash算法:SM3、SHA3-512、SHA3-256、SHA2-512、SHA2-256、HAVAL、RipeMD、WHIRLPOOL慢Hash:bcrypt、PBKDF2、scrypt密钥Hash:HMAC扩展阅读:算⼒(也称哈希率)是计算机计算哈希函数输出的速度。在⽐特币“挖矿”中,对于数学难题的求解需要找到相应的数学解,⽽对于任意⼀个给定范围内的Hash值,其求解只能通过⾃动⽣成的随机数,因此⼀个挖矿机每秒能做多少次求解过程就是算⼒的代表,其单位为Hash/s。例如,当达到10Th/s的哈希率时,意味着它可以每秒进⾏10万亿次计算。截⽌⾄2018年8⽉,⽐特币全⽹算⼒约为45EH/s。(450亿兆哈希/秒)什么是加盐哈希假如密码是“a123456.”,md5的结果如下:Md5(“a123456.”)=9A40BF57F7C5C6D317AC689DFD359F89简单密码,是很容易被逆推出来的。但是假如我们往简单密码⾥加点盐:Md5(“a123456.”+“%&d73h*”)=42CF9F20BF02D6FFA36557BE6334469F那么散列值就会安全很多加盐的正确⽅法:不要使⽤固定不变的salt。每个⽤户的salt都需要不同。salt要保持⼀定的长度。salt必须由服务端使⽤安全的随机函数⽣成。防⽌随机数被预测。客户端运算需要的salt需要从服务端动态获取。客户端加盐hash的结果并不是最终服务端存盘的结果。

密钥哈希算法介绍只要攻击者可以检测对⼀个密码的猜测是否正确,那么他们就可以进⾏字典攻击或暴⼒攻击。通过软件实现更安全的密码,那么可以向哈希计算中增加⼀个密钥,只有知道这个密钥的⼈才能校验密码。有了这层加固,即使数据被拖库,攻击者也⽆法从hash的结果逆推回原始密码。⽐如使⽤AES算法;将密钥包含到哈希字符串中,或使⽤密钥哈希算法HMAC。加密:Hmac(“密钥”,“HASH值”)使⽤建议:1.⼤部分针对数据库的⼊侵都是由于SQL注⼊攻击,因此不要给攻击者进⼊本地⽂件系统的权限(禁⽌数据库服务访问本地⽂件系统2.不要将密钥硬编码到代码⾥,尤其是多套部署时,应该在安装时随机⽣成。3.使⽤加密协议传输KEY,对访问者进⾏验证,只允许特定的机器有权限访问。4.如果攻击者获取了进⼊系统的最⾼权限,那么⽆论密钥被储存在哪,他们都可以窃取到。5.⽆论如何,这个措施⽐没有好。慢哈希介绍慢哈希(是⼀种密钥扩展技术)这类算法使⽤⼀个安全因⼦或迭代次数作为参数,这个值决定了哈希函数会有多慢。PBKDF2PBKDF2是⼀个⽐较简单的算法,它根据’iterations’参数⼤⼩,执⾏N次HMAC运算。HW数据库密码存储的最低安全要求是,1000次HMAC-SHA256计算,推荐的是1万次。使⽤GPU阵列、或FPGA来破解PBKDF2仍相对容易。注意这⾥说的是相对,为了⽐较接下来提到的另外两种算法。BCryptBCrypt在1999年发明,基于Blowfish加密算法变形⽽来。bcrypt最⼤的好处是有⼀个参数(workfactor),可⽤于调整计算强度,⽽且workfactor是包括在输出的摘要中的。bcrypt经过了很多安全专家的仔细分析,使⽤在以安全著称的OpenBSD中,⼀般认为它⽐PBKDF2更能承受随着计算能⼒加强⽽带来的风险。bcrypt也有⼴泛的函数库⽀持,因此建议使⽤这种⽅式存储密码。ScryptScrypt于2009年产⽣,和上述两种⽅案不同,scrypt不仅计算所需时间长,⽽且占⽤的内存也多,使得并⾏计算多个摘要异常困难。据scrypt⽹站称,“针对scrypt的硬件暴⼒攻击的成本⼤约是类似bcrypt攻击的成本的4000倍”。scrypt没有在⽣产环境中⼤规模应⽤,并且缺乏仔细的审察和⼴泛的函数库⽀持。但是,scrypt在算法层⾯只要没有破绽,它的安全性应该⾼于PBKDF2和bcrypt。springsecurity中默认使⽤的BCryptPasswordEncoder慢哈希⽅法,每次加密的结果都不⼀样。采⽤Blowfish+随机盐+密钥对密码进⾏加密。其中:$是分割符;2a是bcrypt加密版本号;14是cost的值(2的指数,10是1024次),⽤于指定Hash的次数,(范围:4-31);⽽后的前22位是salt值;再然后的字符串就是密码的密⽂了。使⽤建议:如果在⼀个Web程序中使⽤密钥扩展,需要额外的资源处理⼤量认证请求,并且密钥扩展也使得⽹站更容易遭受拒绝服务攻击(DoS)。不过把迭代次数设定得低⼀点,应该基于认证请求最⾼峰时的剩余硬件资源来计算迭代次数。要求⽤户每次登录时输⼊验证码可以消除拒绝服务的威胁。另外,可以把系统设计为迭代次数可随时调整的。执⾏⼀个简短的性能基准测试,找到使哈希函数⼤约耗费0.5秒的值。这样,程序就可以尽可能保证安全,⽽⼜不影响到⽤户体验。本⽂中的代码在⽐较哈希值的时候,都是经过固定的时间才返回结果以上算法都也都运⽤了“慢⽐较”技术,⽐如Bcrypt.matches⽅法举个例⼦,使⽤标准的⽅法⽐较“xyzabc”和“abcxyz”,由于第⼀个字符就不同,不需要检查后⾯的内容就可以马上返回结果。相反,如果⽐较“aaaaaaaaaaB”和“aaaaaaaaaaZ”,⽐较算法就需要遍历最后⼀位前所有的“a”,然后才能知道它们是不相同的。有⼈已经实现了运⽤计时攻击破解密码,因此在⽐较密码时要注意什么是安全的随机数?在安全应⽤场景,随机数应该使⽤安全的随机数。密码学意义上的安全随机数,要求必须保证其不可预测性。不可预测性是指每个数都统计独⽴于其他数,因⽽不可预测。不能让攻击者从先前的随机数推导出后⾯的随机数。使⽤计算机⽣成随机数的主要⽅法有两种:伪随机数⽣成器(PRNGs)和真随机数⽣成器(TRNGs)。这两种⽅法有不同的特点,各有利弊。伪随机数:并不是你所期望的那种随机数字,⽽是⼀种算法。它使⽤数学公式或简单的预计算表来⽣成随机出现的数字序列。线性同余法是PRNG的⼀个很好的例⼦。伪随机数特点:⾼效、可预测性、有周期伪随机数在Linux系统中调⽤:/dev/urandom真随机数:从物理现象中提取随机性并将其引⼊计算机。⽣成真实随机数的过程都涉及到识别数据中不可预测的微⼩变化。例如,HotBits在放射性衰变和随机衰变之间的延迟上⼏乎没有变化。ORG使⽤了⼤⽓噪声振幅的微⼩变化。真随机数特点:效率低、不可预测、没有周期真随机数在Linux系统中调⽤:/dev/random各语⾔安全的随机函数:PHPmcrypt_create_iv,openssl_random_pseudo_bytesjava.security.SecureRandomJavaDotNET(C#,VB)RubySystem.Security.Cryptography.RNGCryptoServiceProviderSecureRandomPythonos.urandomPerlMath::Random::SecureC/C++(WindowsAPI)CryptGenRandomAnylanguageonGNU/LinuxorUnixReadfrom/dev/random真随机数JAVA实现例⼦byte[]salt=newbyte[128];SecureRandomsecureRandom=newSecureRandom();secureRandom.nextBytes(salt);不要⾃⼰指定种⼦。如:secureRandom.setSeed(System.currentTimeMillis());应当使⽤系统随机源。系统默认的随机源是什么?这取决于$JAVA_HOME/jre/lib/security/java.security配置中的securerandom.source属性。例如jdk1.8中该配置为:securerandom.source=file:/dev/random使⽤⽆参构造函数实例化SecureRandom,在⼤多数系统中,默认的算法是“nativePRNG”,从/dev/random获取随机数。硬件加密设备介绍硬件加密设备包括加密U盾、安全模块(HSM)、加密机等通过加密算法和加密密钥将明⽂转变为密⽂进⾏数据保护的安全技术。硬件加密设备的核⼼是密码学。加密设备⽬前仍是⼤数据时代保护信息的⼀种最可靠的办法。为什么使⽤硬件加密设备?从技术实现的⽅式来看,⽬前存在两类加密机制:软件加密和硬件加密。软件加密实现容易,投资较⼩,但密钥及算法易于外泄,安全级别较低。当采⽤硬件加密时,密钥存放在加密设备中,任何⼈都⽆法获得加密设备中的密钥,同时⾼端的加密设备如加密机⾃⾝的安全性也作了周全的设计,使其不仅具有物理锁防撬、打开机盖密钥⾃动销毁的防拆设计,⽽且在情况紧急时,如断电的情况下,也能快速地进⾏⼈⼯毁钥等技术⼿段,来有效地防⽌内、外部⼈员的攻击。硬件加密机如何保证安全?1.制度上,对主密钥永远保密处理(⽤多分量机制)2.渗透的每个⽤户的密码(⼀机⼀密或⼀户⼀密)3.每个机器或每户都有相应的主密钥和⼯作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论