zoukankan      html  css  js  c++  java
  • 信息加密技术及密钥安全管理

      通常,为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可分为三类:单项散列加密、对称加密和非对称加密。

    1. 单向散列加密

      单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算的过程是单向的,即不能对固定长度的输出进行计算从而获得输入信息。

       利用单向散列加密这个特性,可以进行密码加密保存,即用户注册时输入的密码不直接保存到数据库,而是对密码进行单向散列加密,将密文存入数据库,用户登录时,进行密码验证,同样计算得到输入密码的密文,并和数据库中的密文比较,如果一致,则密码验证成功。

     

       这样保存在数据库中的是用户输入的密码的密文,而且不可逆地计算得到密码的明文,因此即使数据库被“拖库”,也不会泄漏用户的密码信息。

      虽然不能通过算法将单向散列密文反算得到明文,但是由于人们设置密码具有一定的模式,因此通过彩虹表(人们常用密码和对应的密文关系表)等手段可以即兴猜测式破解。

      为了加强单向散列计算的安全性,还会给散列加点盐(salt),salt相当于加密的密钥,增加破解难度。

      常用的单向散列算法有MD5、SHA等。单向散列算法还有一个特点就是输入的任何微小变化都会导致输出的完全不同,这个特性有时也会被用来生成信息摘要、计算具有高离散程度的随机数等途径。

    2. 对称加密

      所谓对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算)。

      对称加密常用在信息需要安全交互或存储的场合,如Cookie加密、通信加密等。

      对称加密的优点是算法简单,加密效率高,系统开销小,适合对大量数据加密。缺点是加密使用同一个密钥,远程通信的情况下如何安全的交换密钥是个难题,如果密钥丢失,那么所有的加密信息也就没有秘密可言。

      常用的对称加密算法有DES算法、RC算法等。对称加密是一种传统加密手段,也是最常用的加密手段,适用于绝大多数需要加密的场合。

    3. 非对称加密

      不同于对称加密,非对称加密和解密使用的密钥不是同一个密钥,其中一个对外界公开,被称为公钥,另一个只有所有者知道,被称为私钥。用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开。理论上说,不可能通过私钥获取公钥。

      非对称加密技术通常用在信息安全传输,数字签名等场合。

      信息发送者A通过公开渠道获取信息接收者B的公钥,对提交信息进行加密,然后通过非安全传输通道将密文信息发送给B,B得到密文信息后,用自己的私钥对信息进行解密,获取原始的明文信息。即使密文在传输过程中遭到窃取,窃取者没有解密密钥也无法还原明文。

      数字签名的过程则相反,签名者用自己的私钥对信息进行加密,然后发送给对方,接收方用签名者的公钥对信息进行解密,获取原始明文信息,由于私钥只有签名者拥有,因此该信息是不可抵赖的,具有签名的性质。

      在实际应用中,常常会混合使用对称加密和非对称加密。先试用非对称加密技术对对称密钥进行安全传输,然后使用对称加密技术进行信息加解密与交换。而有时,对同一个数据两次使用非对称加密,可同时实现信息安全传输与数字签名的目的。

      非对称加密的常用算法有RSA算法等。HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密。

    4. 密钥安全管理

      前述的几种加密技术,能够达到安全保密效果的一个重要前提是密钥的安全。不管是单向散列加密用到的salt、对称机密的密钥、还是非对称加密的私钥,一旦这些密钥泄漏出去,那么所有基于这些密钥加密的信息就失去了秘密性。

      信息的安全是靠密钥保证的。但是实际开发中,工程师直接将密钥写在源代码中,稍好的写在配置文件中,线上和开发环境配置不同的密钥。总之,至少在公司内部,密钥不是秘密。

      实践中,改善密钥安全性的手段有两种。

      一种方案是把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,对外提供加密和解密服务,应用系统通过调用这个服务,实现数据的加解密。但这种方案成本较高,而且可能会成为应用的瓶颈,每次加密/解密都需要一次远程服务调用,系统性能开销也较大。

      另一种方案是将加密算法放到应用系统中,密钥放在独立服务器中,为了提高密钥的安全性,实际储存时,密钥被切分成数片,加密后分别保存在不同存储介质中,兼顾密钥安全性的同时又改善了性能。

       应用程序调用密钥安全管理系统提供加解密服务接口对信息进行加解密,该接口实现了常用的加解密算法并可根据需求任意扩展。加解密服务接口通过密钥服务器的密钥服务取得加解密密钥,并缓存在本地(定时更新)。而密钥服务器中的密钥则多来自多个密钥存储服务器,一个密钥分片后储存在多个存储服务器中,每个服务器都有专人负责管理。密钥申请者、密钥管理者、安全审核人员通过密钥管理控制台管理更新密钥,每个人各司其职,没有人能查看完整的密钥信息。

  • 相关阅读:
    小程序组件事件
    关于微信小程序中组件和页面对全局样式的继承性
    创建Java程序并设置快捷提示
    微信小程序设置全局字体
    微信小程序组件的使用
    微信开发者工具的一些快捷键
    消除flex-wrap之后每个item上下的距离
    flex布局中的主轴和侧轴的确定
    C++string中用于查找的find系列函数浅析
    C++11 图说VS2013下的引用叠加规则和模板参数类型推导规则
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/14110066.html
Copyright © 2011-2022 走看看