精华内容
下载资源
问答
  • 数据加密

    千次阅读 2019-12-13 19:45:20
    数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。       数据加密仍是计算机...

    最近女友突然问我什么是加密:

    我当然毫无求生欲的先偷懒贴一波百度的加密

          数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。
          数据加密仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现信息隐蔽,从而起到保护信息的安全的作用。

    然后我就被打了,原因:你敷衍我。。。。

    简单来说就是通过加密算法将明文(谁拿到内容,都能看懂的),变为密文(别人都看不懂,只有某些人才能看懂的内容)。

    加密的方法根据密钥的不同分为两种体系。

    对称加密非对称加密

    对称加密:就是加密和解密用同一种密钥。比如我们都了解的阿特巴希加密法,26个英文字母正序和倒叙排列就是对应的关系。

    明文是A 对应的 密文就是Z
    明文是B 对应的 密文就是Y

    在阿特巴希密码中“nlmvb”代表“MONEY”。

    制作密文是用阿特巴希加密法制作,读取也就是解密是也用阿特巴希加密法解密。

    比如我想对女友说I Love You 。我要先用加密码改造成密文,也就是R OLEV BLF 而而她想看懂也要用相同的加密发。

    这就是对称加密。

    优点:效率高,加密速度快,可以加密大量的数据,几G到几十G;

    缺点:密钥的传递问题,特别是多个人同时通信。
    我用的密钥怎么远程传递给女友呢?
    多人同时通信的问题,如果我在群聊里说了一句密文,只想让女友知道,但是所有知道我加密法的人都能知道我的意思。也就造成的安全隐患。

    非对称加密

    加密和解密使用不同的密钥。

    通过公钥和私钥实现的,就是我发布了两个规则,一个规则用来加密叫做公钥,一个规则用来解密叫做私钥。比如一段信息:6666 用公钥加密后是rueidgfsnj,然后用私钥解密后是6666。

    公钥就随便传播,反正私钥在我手上只有我能读。

    进一步解释就是收文件的一方发送公钥给别人。

    优点:解决了密钥传递的问题

    缺点:效率低,加密速度慢,比对称加密速度慢1000倍,只能加密少量数据

    对称加密+非对称加密
    将一段信息先进行对称加密,因为速度快,能加密大文件。然后将对称加密的密钥进行非对称加密,最后传输的是2个文件,1、被加密的数据文件。2、被加密的密钥文件。

    解密时,先用私钥解密密钥文件,获得对称加密的密钥,然后用这个密钥解密数据文件。

    在这里插入图片描述

    加密算法:

    就是具体的数据加密过程了。

    GPG
          PGP是比较成熟的加密算法,由于PGP算法太安全(破解它需要3亿年),属于美国政府严禁传入中国的计算机产品。我们现在能够得以使用GnuPG(它是PGP的开源产品),是要感谢GNU和自由软件运动,这也是我们推崇开源运动的原因!!GPG是一个完全免费、源代码公开,并且与PGP完全兼容的软件产品。今天,GPG已经拥有众多的企业和个人用户。作为一个开源并且免费的加密和数字签名软件已经存在多年。它不但可以为企业、个人之间的重要信息提供加密保护,还可以为出版的软件、内核等电子产品进行数字签名,防止产品被篡改,最大程度地保障信息安全。

    SSL
          SSL:Secure Sockets
          Layer 安全套接层,为Netscape(美国网景公司)所研发;
          TLS:Transport Layer Security(传输层安全)是SSL的继任者,为网络通信提供安全及数据完整性的一种安全协议。
    SSL的功能:
          TLS与SSL在传输层对网络连接进行加密,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
          已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
          目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。
          SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

    HTTPS

    具体操作:

    secret:172.16.12.95
    secret2:172.16.12.96

    [root@secret ~]# useradd username1
    [root@secret ~]# echo 000000 | grep username1 --stdin
    
    [root@secret2 ~]# useradd username2
    [root@secret2 ~]# echo 000000 | passwd username2 --stdin
    

    用这两个用户登录。

    【1】GPG

    1、对称加密:

    [username1@secret ~]$ echo "hi username2" > file.txt
    [username1@secret ~]$ gpg -c file.txt
    

    然后弹出这个。

    在这里插入图片描述
    输入密码:英文字母,数字,字符,8位以上。

    我的是:abc123_# 只要记住就好了。

    [username1@secret ~]$ ls
    file.txt  file.txt.gpg
    

    然后就很能看到加密后的文件了。

    确实无法看懂…

    在这里插入图片描述

    [username1@secret ~]$ scp file.txt.gpg username2@172.16.12.96:/home/username2
    把密文发过去。
    

    secret2解密。

     gpg -d file.txt.gpg 
    
    gpg: directory `/home/username2/.gnupg' created
    gpg: new configuration file `/home/username2/.gnupg/gpg.conf' created
    gpg: WARNING: options in `/home/username2/.gnupg/gpg.conf' are not yet active during this run
    gpg: keyring `/home/username2/.gnupg/secring.gpg' created
    gpg: keyring `/home/username2/.gnupg/pubring.gpg' created
    gpg: CAST5 encrypted data
    gpg: encrypted with 1 passphrase
    hi username2   >>>>>>>这个就是解密后的内容
    gpg: WARNING: message was not integrity protected
    

    需要输入在1上设置的密码。abc123_#。就可以解码了。

    [username2@secret2 ~]$ gpg -d file.txt.gpg  > file1
    直接存到硬盘上。
    

    2、非对称加密

    这个最好直接连虚拟而不是远程,因为会根据鼠标键盘的移动轨迹记录随机数。远程工具没有鼠标,很慢。

    [username1@secret ~]$ gpg --gen-key
    
    Please select what kind of key you want:
       (1) RSA and RSA (default)
       (2) DSA and Elgamal
       (3) DSA (sign only)
       (4) RSA (sign only)
    Your selection? 1	##加密算法
    
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048)	##密钥长度
    Requested keysize is 2048 bits
    
    Please specify how long the key should be valid.
             0 = key does not expire
          <n>  = key expires in n days
          <n>w = key expires in n weeks
          <n>m = key expires in n months
          <n>y = key expires in n years
    Key is valid for? (0) 0	##密钥的有效期
    Key does not expire at all
    
    Is this correct? (y/N) y
    
    GnuPG needs to construct a user ID to identify your key.
    
    Real name: user2-node2		##唯一标识
    Email address: xxx@126.com	##邮箱
    Comment: user2's key		##描述,可以不写
    
    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O	##确认
    
    

    在这里插入图片描述
    看上边的,动鼠标和键盘记录随机数。

    在这里插入图片描述
    完成状态。

    在这里插入图片描述
    这几个就是生成的文件了。

    在家目录的.gnupg/下。

    查看公钥,私钥:

    [username1@secret ~]$ gpg --list-key    //公钥
    /home/username1/.gnupg/pubring.gpg
    ----------------------------------
    pub   2048R/2318820A 2019-12-13
    uid                  username-12.95 (username1's key) <username1@163.com>
    sub   2048R/72FC8115 2019-12-13
    
    
    [username1@secret ~]$ gpg --list-secret-key   //私钥
    /home/username1/.gnupg/secring.gpg
    ----------------------------------
    sec   2048R/2318820A 2019-12-13
    uid                  username-12.95 (username1's key) <username1@163.com>
    ssb   2048R/72FC8115 2019-12-13
    

    username1给username2发送文件:

    user2导出公钥:

    [username2@secret2 ~]$ gpg --export username2-12.96		//乱数形式  后边的是公钥的real-name,上边说的唯一标识。
    [username2@secret2 ~]$ gpg --export --armor username2-12.96		//二进制形式
    

    在这里插入图片描述
    乱数形式的

    [username2@secret2 ~]$ gpg --export --armor username2-12.96
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v2.0.22 (GNU/Linux)
    
    mQENBF3z3d4BCADKfMNGyidxEChZEuFXErnARnoDeZJluGXkyC/mXSBVzNGnS7mI
    e4xQUclVNEdPUYYFDRgW2vE6ggReA1O7giwZX+Fw1ePFYaLtG0mD/zUTzWUP+K5S
    /69gX9R87lrLQCB4EilSwF0quLgY9K0MeNkF1655KtEsFxs68jjAGu4VvVRP3xmN
    40wNKCXXVwGoW/gUDcVoQPcrCgmfAAkiS46lv5J0X0a8WzB9G+FagPNJvjUGDynC
    

    二进制形式的。

    [username2@secret2 ~]$ gpg --export --armor username2-12.96 > username2.pub
    制作公钥文件
    

    用scp发给username1

    username1导入2 的公钥

    [username1@secret ~]$ gpg --import username2.pub 
    
    查看公钥发现有2个
    [username1@secret ~]$ gpg  --list-key
    /home/username1/.gnupg/pubring.gpg
    ----------------------------------
    pub   2048R/2318820A 2019-12-13
    uid                  username-12.95 (username1's key) <username1@163.com>
    sub   2048R/72FC8115 2019-12-13
    
    pub   2048R/2BB8ED53 2019-12-13
    uid                  username2-12.96 (username2's key) <username2@163.com>
    sub   2048R/1E4DA576 2019-12-13
    

    username1用2 的公钥加密。

    [username1@secret ~]$ cp /etc/passwd ./userlist.txt
    做一个数据文件。
    [username1@secret ~]$ gpg --encrypt --recipient username2-12.96  --armor userlist.txt
    加密
    

    此时u2发过来的那个公钥文件基本没啥用了,因为已经导入了公钥。

    [username1@secret ~]$ ls
    file.txt  file.txt.gpg  userlist.txt  userlist.txt.asc  username2.pub
    

    已经能看到userlist.txt.asc这个加密后的文件。

    再把这个加密后的文件发给u2

    user2解密:

    [user2@secret2 ~]$ gpg --decrypt --armor userlist.txt.asc
    	输入自己的私钥密码
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    就能看到文件内容了
    

    导入的公钥是不被信任的,需要对公钥进行签名操作:
    u1

    [user1@secret ~]$ gpg --fingerprint username2-12.96
    	查看u2的公钥的指纹信息
    [user1@secret ~]$ gpg --sign-key username2-12.96
    	对u2的公钥进行签名操作
    	输入自己的私钥密码
    Really sign? (y/N) y
    

    现在在用公钥进行加密就不回提示是危险的公钥。

    【2】openssl

    [username1@secret ~]$ openssl
    OpenSSL> ?
    openssl:Error: '?' is an invalid command.
    
    Standard commands
    asn1parse         ca                ciphers           cms               
    crl               crl2pkcs7         dgst              dh   
    
    Standard commands	
    	//命令
    
    Message Digest commands (see the `dgst' command for more details
    	//用于签名的加密算法
    	
    Cipher commands (see the `enc' command for more details)
    	//用于加密的加密算法
    

    1、对称加密:
    user1

    [username1@secret ~]$ openssl enc -e -bf -in userlist.txt -out userlist.txt.ssl
    enter bf-cbc encryption password:  //设置对称加密的密码
    Verifying - enter bf-cbc encryption password:
    	enc	加密操作
    	-e	加密
    	-bf	加密算法
    	-in		准备加密的文件
    	-out	加密后生成的文件
    [username1@secret ~]$ scp userlist.txt.ssl username2@172.16.12.96:/home/username2
    发给u2
    

    user2

    [username2@secret2 ~]$ openssl enc -d -bf -in userlist.txt.ssl -out userlist.txt
    enter bf-cbc decryption password://输入user1 那边设置的密码
    
    然后生成文件userlist.txt
    
    [username2@secret2 ~]$ cat userlist.txt
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ok
    

    2、非对称加密
    生成公钥和私钥:
    私钥可以设置密码,也可以不设置密码。

    [user2@node2 ~]$ openssl genrsa 1024 > user2.pri
    	创建私钥,无密码
     user2.pri私钥文件
     
    
    [user2@node2 ~]$ openssl genrsa -des3 1024 > user2.pas
    Generating RSA private key, 1024 bit long modulus
    ......................................................++++++
    .........++++++
    e is 65537 (0x10001)
    Enter pass phrase:
    Verifying - Enter pass phrase:
    	创建私钥,有密码
    

    从私钥中提取公钥

    [username2@secret2 ~]$ openssl rsa -in user2.pri -pubout -out user2.pub
    writing RSA key
    
    user2.pub这个是公钥文件
    
    [user2@node2 ~]$ openssl rsa -in user2.pas -pubout -out user2.pub1
    Enter pass phrase for user2.pas:输入私钥密码
    writing RSA key
    
    带密码私钥提取公钥
    
    [username2@secret2 ~]$ scp user2.pub username1@172.16.12.95:/home/username1
    
    公钥发给u1
    
    [username1@secret ~]$ openssl rsautl -in userlist.txt -out userlist-txt.sec -pubin -inkey user2.pub -encrypt
    RSA operation error
    139963374098336:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:153:
    可以看到报错,因为文件太大了。
    
    [username1@secret ~]$ ls -lh userlist.txt
    -rw-r--r-- 1 username1 username1 1.8K Dec 14 03:01 userlist.txt
    这都算大。。。。。。
    

    user1重新加密

    [username1@secret ~]$ echo "123456" > key
    [username1@secret ~]$ openssl rsautl -in key -out key.sec -pubin -inkey user2.pub -encrypt
    
    [username1@secret ~]$ scp key.sec username2@172.16.12.96:/home/username2
    发给user2
    

    user2 解密

    [username1@secret ~]$ openssl rsautl -in key.sec -out key -inkey user2.pri -decrypt
    
    [username1@secret ~]$ cat key
    123456
    

    3、对称加密+非对称加密
    user1给user2发送大文件,并加密。
    首先、用对称加密加密大的数据文件。
    其次、用非对称加密法加密对称加密的加密算法和密码,生成密钥密码文件。
    最后、user2 用私钥解密密钥密码文件,获得对称加密的算法和密码,用得到的算法和密码解密数据文件。

    user1:

    [username1@secret ~]$ openssl enc -e -bf -in userlist.txt -out userlist.txt.ssl
    对称加密大文件。并设置密码。
    
    [username1@secret ~]$ echo "-bf,123" > key
    制作密钥文件,里边写了对称加密的算法和密码。
    
    [username1@secret ~]$ openssl rsautl -in key -out key.sec -pubin -inkey user2.pub -encrypt
    非对称加密加密这个密钥文件。、
    
    [username1@secret ~]$ scp key.sec username2@172.16.12.96:/home/username2
    [username1@secret ~]$ scp userlist.txt.ssl username2@172.16.12.96:/home/username2
    两个文件都发给user2
    

    user2解密

    [username2@secret2 ~]$ openssl rsautl -in key.sec -out key -inkey user2.pri -decrypt
    解密密钥文件
    [username2@secret2 ~]$ cat key
    -bf,123
    获得对称加密的算法和密码
    [username2@secret2 ~]$ openssl enc -d -bf -in userlist.txt.ssl -out userlist.txt
    enter bf-cbc decryption password:
    输入密码 用bf算法
    
    [username2@secret2 ~]$ 
    [username2@secret2 ~]$ ls
    key.sec    user2.pub     userlist.txt.asc  username2.pub
    key           user2.pri  userlist.txt--->这个就是解密后的大文件, 
    

    到此,加密就基本说完了。我女友是懂了,非常开心的打了我,说又知道了对她来说没啥用的东西。

    我直接吓醒了,然后长出了一口气,幸好我没有女朋友。

    展开全文
  • 常用js数据加密

    万次阅读 2019-11-21 11:20:27
    常用js数据加密 原生js已经支持base64加密及解密 //加密 window.btoa(this.shop) //解密 window.atob(this.shop)

    博客地址:http://www.globm.top/blog/1/detail/39
    常用js数据加密

    1. 原生js已经支持base64加密及解密
    //加密
    window.btoa(this.shop)
    
    //解密
    window.atob(this.shop)
    

    但是,window.btoa并不支持中文加密,可以使用曲线救国的方法

    //加密
    window.btoa(encodeURIComponent(this.company_name))
    //解密
    decodeURIComponent(window.atob(this.company_name))
    

    不过,使用encode中文转码在编译真的是‘曲线救国了’!

    1. md5加密

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致

    常用js md5库
    https://github.com/blueimp/JavaScript-MD5

    npm install crypto-js
    
    //使用crypto
    //md5.js
    import crypto from 'crypto';
    export default ({
    //将对象以‘键名=键值’方式存储到数组中,再以‘&’连接并加密,
      getSign(params){
        let objsort = this.objKeySort(params);
        let arr = [];
        for (let i in objsort) {
          arr.push((i + "=" + objsort[i]));
        }
        var  md5 = crypto.createHash("md5");
        md5.update(arr.join("&")); //需要加密的密码
        return md5.digest('hex').toUpperCase();  //password 加密完的密码
      },
      //排序的函数
      objKeySort(obj) {
        //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
        var newkey = Object.keys(obj).sort();
        var newObj = {};//创建一个新的对象,用于存放排好序的键值对
        for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
          newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
        }
        return newObj;//返回排好序的新对象
      }
    })
    
    展开全文
  • 数据加密技术和数据加密算法

    千次阅读 2019-04-15 10:16:26
    数据加密技术 现代社会对信息安全的需求大部分可以通过密码技术来实现。密码技术是信息安全技术中的核心技术,它主要由密码编码技术和密码分析技术两个分支组成。密码编码技术的主要任务是寻求产生安全性高的有效...

    转自:http://www.cnblogs.com/wxbjs/archive/2011/09/02/2163540.html

    数据加密技术

    现代社会对信息安全的需求大部分可以通过密码技术来实现。密码技术是信息安全技术中的核心技术,它主要由密码编码技术和密码分析技术两个分支组成。密码编码技术的主要任务是寻求产生安全性高的有效密码算法。以满足对消息进行加密或认证的要求。密码分析技术的主要任务是彼译密码或伪造认证码,实现窃取机密信息或进行诈骗破坏活动。这两个分支既相互对立,又相互依存。信息的安全性主要包括两个方面即信息的保密性和信息的认证性。保密的目的是防止对手破译系统中的机密信息,认证的目的是验证信息的发送者是真正的,而不是冒充的。验证信息的完整性,即验证信息在传送或存储过程中未被窜改、重放或延迟等。信息的保密性和信息的认证性是信息安全性的两个不同方面,认证不能自动地提供保密性,而保密也不能自然地提供认证功能。在用密码技术保护的现代信息系统的安全性主要取决于对密钥的保护,而不是依赖于对算法或硬件本身的保护,即密码算法的安全性完全寓于密钥之中。可见,密钥的保护和管理在数据系统安全中是极为重要的。人们目前特别关注的是密钥托管技术。

    一、信息保密技术

    信息的保密性是信息安全性的一个重要方面。保密的目的是防止对手破译信息系统中的机密信息。加密是实现信息保密性的一种重要手段,就是使用数学方法来重新组织数据,使得除了合法的接收者外,任何其他人要想恢复原先的"消息"(将原先的消息称作"明文")或读懂变化后的"消息"(将变化后的消息称作"密文")是非常困难的,将密文变换成明文的过程称作解密。可见,加密技术可使一些重要数据存储在一台不安全的计算机上,或可以在一个不安全的信道上传送,只有持有合法密钥的一方才能获得"明文"。所谓加密算法就是对明文进行加密时所采用的一组规则,解密算法就是对密文进行解密时所采用的一组规则。加密算法和解密算法的操作通常都是在一组密钥控制下进行的,分别称为加密密钥和解密密钥。根据加密密钥和解密密钥是否相同,可将现有的加密体制分为两种:一种是私钥或对称加密体制、这种体制的加密密钥和解密密钥相同,其典型代表是美国的数据加密标准(D E S):另一种是公钥或非对称加密体制,这种体制的加密密钥和解密密钥不相同并且从其中一个很难推出另一个。加密密钥可以公开,而解密密钥可由用户自己秘密保存,其典型代表是R S A体制。

    根据明文加密方式的不同,又可将私钥加密体制分为两类:一类是流密码,在这类体制中,明文按字符逐位地被加密;另一类是分组密码,在这类体制中,先将明文分组(每组含有多个字符),然后逐组地进行加密。

    从社会应用密码的需求来看,目前国际上最关心的加密技术有两种:一种是分组密码。另一种是公钥密码。

    1. 分组密码技术

    DES是日前研究最深入、应用最广泛的一种分组密码。己有长达20年的历史。DES的研究大大丰富了设计和分析分组密码的理论、技术和方法。针对DES,人们研制了各种各样的分析分组密码的方法,比如差分分析方法和线性分析方法,这些方法对DES的安全性有一定的威胁,但没有真正对16轮D E S的安全性构成威胁。自从DES公布之日起,人们就认为DES的密钥长度太短(只有56比特),不能抵抗最基本的攻击方法--穷搜索攻击。

    目前,国际上公开的分组密码算法有100多种,比如,Lucifer、IDEA、SAFER,k-64、RC5、Skipjack、RC2、FEAL一N、REDOC一II、L0KI、CAST、Khuf u、Khafre、MMB、3一WAY、TEA、MacGuffin、SHARK、BEAR、LION、CA.1.1、CRAB、Biowfish、G0 ST、SQUARE和MISTY等。对这些算法感兴趣的读者可在Schneier所著的《Applied Cry ptography:Protocals,Algorithms,and Source CodeinC》一书和会议论文集《FastSoftware Encryption》中找到它们的详细讨论,也可以通过Internet查询到。美国目前正在制定和评估新的数据加密标准,替代1998年到期的DES。

    2. 公钥加密技术

    私钥密码体制的缺陷之一是通信双方在进行通信之前需通过一个安全信道事先交换密钥。这在实际应用中通常是非常困难的。而公钥密码体制可使通信双方无须事先交换密钥就可建立起保密通信。公钥算法要比私钥算法慢得多。在实际通信中,一般利用公钥密码体制来保护和分配(交换)密钥,而利用私钥密码体制加密消息。公钥密码体制主要用于认证(比如数字签名,身份识别等)和密钥管理等。公钥密码体制的出现为解决私钥密码体制的密钥分配开辟了一条广阔的道路。

    值得一提的是,在有些文献中,公钥密码体制的含义很广,不仅包括公钥加密体制,而且还包括各种公钥协议比如数字签名、身份识别协议、密钥交换协议等,但我们这里所说的公钥密码体制,除了特别声明外,特指公钥加密体制。

    目前国际上已经有许多种公钥密码体制,但比较流行的和被人们认可的公钥密码主要有两类,一类是基于大整数因子分解问题的,其中最典用的代表是RSA公钥密码体制:另--类是基于离散对数问题的,比如E lGamal公钥密码体制和椭圆曲线公钥密码体制。由于分解大整数的能力日益增强,所以对RSA公钥密码的安全带来了一定的威胁,512比特模长的RSA体制已经不安全。人们建议使用l024比特模长,要保证20年的安全就要选择1280比特模长,增大模长带来了实现上的难度。而基于离散对数问题的公钥密码在目前技术下有512比特模长;就能够保证其安全性。特别是椭圆曲线上的离散对数的计算要比有限域上的离散对数的计算更困难,能设计出密钥更短的公钥密码体制,因而受到了国际上广泛的关注,RSA等一些公司已经开发出了符合IEEEP l363标准的椭圆曲线公钥密码。

    RSA算法的安全性是基于分解大整数的困难性。在RSA体制中使用了这样一条基本事实:一般地说,分解两个大素数之积是一利很困难的事情。

    下面是A使用一个公钥密码体制发送信息给B的过程:

    (1)A首先获得B的公钥。

    (2)A用B的公钥加密信息,然后发送给B。

    (3)B用自己的私钥解密A发送的信息。

    已经制造出了许多不同的RSA加密芯片。RSA算法在美国已申请了专利,将于2000年9月20日到期。破译RSA的一个直接的方法是分解n,目前的分解能力大概为130位十进制数,但512比特(l54位十进制数)模长的RSA体制安全性已经受到一定的威胁,人们建议使时l024比特(308位十进制数)模长。关于RSA体制,也有一些别的分析方法,比如选择密文攻击、同模攻击和低指数攻击等。这些攻击告诫人们在选择RSA体制的参数和使用RSA体制时必须遵循一定的规则。

    除了RSA外,还有一些别的公钥加密算法,比如E lGamal算法、Rabin算法、McEliece算法、Merkie一Hellman背包算法、Chor一Rivest背包算法、有限自动机公钥算法、椭圆曲线的密码算法、细胞自动机公钥密码算法、LU公钥密码算法、多重密钥的公钥密码算法和概率加密算法等。

    二、信息认证技术

    信息的认证性是信息安全性的另一个重要方面。认证的目的有两个:一是验证信息的发送者是真正的,而不是冒充的:二是验证信息的完整性.即验证信息在传送或存储过料中是否被窜改,重放或延迟等。

    对密码系统的攻击主要有两类:一类是被动攻击,对手只是对截获的密文进行分析:另一类是主动攻击,对于通过采用删除、增添、重放和伪造等手段主动向系统注入假消息。认证是防止他人对系统进行主动攻击(如伪造,窜改信息等)的一种重要技术。

    1. 数字签名技术

    政治、军事、外交等活动中签署文件,商业上签定契约和合同以及日常生活中在书信、从银行取款等事务中的签字,传统上都采用手写签名或印鉴。签名起到认证、核准和生效作用。随着信息时代的来临,人们希望通过数字通信网络进行远距离的贸易合同的签名,数字签名应运而生,并开始时了商业通信系统,如电子邮递、电子转帐、办公室自动化等系统中。

    一个数字签名算法主要由两个算法组成,即签名算法和验证算法。签名者能使用一个(秘密)签名算法签一个消息,所得的签名能通过一个公开的验证算法来验证。给定一个签名,验证算法根据签名是否真实来作出一个"真"或"假"的问答。

    目前已有大量的数字签名算法,如RSA数字签名算法、EIGamal数字签名算法、Fiat一Shamir数字签名算法、Guillou一Quisquarter数字签名算法、Schnorr数字签名算法、0ng一Schnorr一Shamir数字签名算法、美国的数字签名标准/算法(D S S/D S A)、椭圆曲线数字签名算法和有限自动机数字签名算法等。

    A使一个签名算法对消息x签名和B验证签名(x,y)的过程可描述为:

    (l)A首先使用他的秘密密钥对x进行签名得y。

    (2)A然后将(x,y)发送给B。

    (3)最后B用A的公钥验证A的签名的合法性

    DSA是美国国家标准技术学会(NIST)的一个标准,它是ElGamal数字签名算法的一个修改。当选择p为512比特的素数时,ElGamal数字签名的尺寸是1024比特,而在DSA中通过选择一个160比特的素数可将签名的尺寸降低为320比特,这就大大地减少了存储空间和传输带宽。关于DSA也有一些批评意见,但它已被人们广泛地接受和应用,它的确为数字签名技术的应用提供了一个适当的内核。

    2. 身份识别技术

    通信和数据系统的安全性常常取决于能否正确识别通信用户或终端的个人身份。比如银行的自动取款机(ATM)可将现款发放给经它正确识别的帐号持卡人。对计算机的访问和使用、安全地区的出入和放行、出入境等都是以准确的身份识别为基础的。身份识别技术能使识别者让对方识别到自己的真正身份,确保识别者的合法权益。但是从更深一层意义上来说,它是社会责任制的体现和社会管理的需要。

    进入电子信息社会,虽然有不少学者试图使用电子化生物唯一识别信息(如指纹、掌纹、声纹、视网膜、脸形等),但由于代价高、准确性低、存储空间人和传输效率低,不适合计算机读取和判别,只能作为辅助措施应用。而使用密码技术,特别是公钥密码技术,能够设计出安全性高的识别协议,受到人们的青睐。

    身份识别的常用方式主要有两种,一种是使用通行字的方式;另一种是使用持证的方式。通行字是使时最广泛的一种身份识别方式,比如中国古代调兵用的虎符和现代通信网的拔入协议等。通行字一般由数字、字母、特殊字符、控制字符等组成的长为5--8的字符串。其选择规则为:易记,难于被别人猜中或发现,抗分析能力强,还需要考虑它的选择方法、使用期、长度、分配、存储和管理等。通行字方式识别的办法是:识别者A先输入他的通行字,然后计算机确认它的正确性。A和计算机都知道这个秘密通行字,A每次登录时,计算机都要求A输入通行字。这样就要求计算机存储通行字,一旦通行字文件暴露,就可获得通行字。为了克服这种缺陷,人们建议采用单向函数。此时,计算机存储通行字的单项函数值而不是存储通行字。其认证过程为:

    1.A将他的通行字传送给计算机。

    2.计算机完成通行字的单向函数值的计算。

    3.计算机把单向函数值和机器存储的值比较。

    由了计算机不再存储每个人的有效通行字表,某些人侵入计算机也无法从通行字的单向函数值表中获得通行字。当然,这种保护也抵抗不住某些攻击。不过,它的确是一种简单而有效的识别方法。

    持证(token)是一种个人持有物,它的作用类似于钥匙,用于启动电子设备。使用比较多的是一种嵌有磁条的塑料卡,磁条上记录有用于机器识别的个人信息。这类卡通常和个人识别号(PIN) 一起使用。这类卡易于制造,而且磁条上记录的数据也易于转录,因此要设法防止仿制。为了提高磁卡的安全性,人们建议使用一种被称作"智能卡"的磁卡来代替普通的磁卡,智能卡与普通的磁卡的主要区别在于智能卡带有智能化的微处理器和存储器。智能卡已成为目前身份识别的一种更有效、更安全的方法。智能卡仅仅为身份识别提供了一个硬件基础,要想得到安全的识别,还需要与安全协议配套使用。

    从实用角度来讲,人们最关心的是设计简单而且能在一个智能卡上实现的安全识别协议。一个安全的身份识别协议至少应满足以下两个条件:

    1.识别者A能向验证者B证明他的确是A。

    2.在识别者A向验证者B证明他的身份后,验证者B没有获得任何有用的信息,B不能模仿A向第三方证明他是A。

     目前已经设计出了许多满足这两个条件的识别协议。比如Schnorr身份识别协议、Okanmto身份识别协议、Guillou-Quisquater身份识别协议和基于身份的识别协议等.这些识别协议均为询问-应答式协议。询问-应答式协议的基本观点是:验证者提出问题(通常是随机选择一些随机数,称作口令),由识别者回答,然后验证者验证其真实性。另一类比较重要的识别协议是零知识身份识别协议。零知识的基本思想是:称为证明者的一方试图使被称为验证者的另一方相信某个论断是正确的,却又不向验证者提供任何有用的信息。Feige、Fiat和Shamir基于零知识的思想设计了第一个零知识身份识别协议,称为Feige-Fiat-Shamir零知识身份识别协议。

    3. 杂凑技术和消息的完整性

    杂凑函数(也称杂凑算法)就是把任意长的输入串变化成固定长的输出串的一种函数。因为杂凑函数是多对一的函数,所以一定将某些不同的输入变化成相同的输入。这就要求给定一个杂凑值,求其逆是比较难的,但给定的输入计算杂凑值必须是很容易的。

    一个安全的杂凑函数应该至少满足以下几个条件:

    1. 输入长度是任意的.

    2. 输出长度是固定的,根据目前的计算技术应至少取128比特长,以便抵抗生日攻击。

    3. 对每一个给定的输入,计算输出其杂凑值是很容易的。

    4. 给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值在计算上是不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值在计算上也是不可行的。

     攻击杂凑函数的典型方法是生日攻击,生日攻击的基本观点来自于生日问题:在一个教室里最少有多少学生时,可使得在这个教室里至少有两个学生的生日在同一天的概率不小于50%?这个问题的答案是23。

    目前已研制出适合于各种用途的杂凑算法,这些算法都是伪随机函数,任何杂凑值都是等可能的。输出并不以可辨别的方式依赖于输入。任何输入串中单个比特的变化,将会导致输出比特串中大约一般的比特发生变化。利用某些数学难题比如因子分解问题和离散对数问题等设计的杂凑函数有Davies-Price平方杂凑算法、CCITT建议、Juene man杂凑算法、Damgard平方杂凑算法、Damgard背包杂凑算法、Schnorr的FFT杂凑算法等。这些算法中有的已不安全,而有的仍然是安全的。利用某些私钥密码体制比如DES等设计的杂凑函数有Rabin杂凑算法、Winternitz杂凑算法、Quisquater-Girault杂凑算法、Merkle杂凑算法、N-Hash算法等,这种杂凑函数的安全性与所使用的基础密码算法有关。不基于任何假设和密码体制直接设计杂凑函数是当今比较流行的一种设计方法。美国的安全杂凑算法(SHA)就是这类算法,另外还有MD4、MD5、MD2、RIPE-MD、HAVAL等算法。

    美国国家标准与技术局和美国国家安全局共同设计了一个与美国数字签名算法(DSA)一起使用的安全杂凑算法(SHA),标准是安全杂凑标准(SHS),SHA是用于该标准的算法。SHA的设计原则与MD4算法的设计原则极其相似,它很象是MD4算法的一种变形,但SHA的设计者没有公开SHA的详细设计决策。SHA输入的长度限制在2比特之内,输出长度为160比特。

    消息认证是指使意定的接收者能够检验收到的消息是否真实的方法。检验的内容包括:证实消息的源和宿、消息的内容是否被窜改过(即消息的完整性)、消息的序号和时间性。可见,消息认证可使接收者识别消息的源和内容的真伪、时间性和意定的信宿。

    消息的源和宿的认证可使用数字签名技术和身份识别技术,常用的方法有两种:一种方法是通信双方事先约定发送消息的数据加密密钥,接收者只需证实发送来的消息是否能用该密钥还原成明文就能鉴定发送者。如果双方使用同一个数据加密密钥,那么只需在消息中嵌入发送者的识别符即可。另一种方法是通信双方事先约定各自发送消息所使用的通行字,发送消息中含有此通行字并进行加密,接收者只需判别消息中解密的通行字是否等于约定的通行字就能鉴定发送者。为了安全起见,通行字应该是可变的。

    消息的序号和时间性的认证主要是阻止消息的重放攻击。常用的方法有:消息的流水作业号、链接认证符,随机数认证法和时戳等。消息内容的认证即消息的完整性检验常用的方法是:消息发送者在消息中加入一个认证码并经加密后发送给接收者检验(有时只需加密认证码即可),接收者利用约定的算法对解密后的消息进行运算,将得到的认证码与收到的认证码进行比较,若二者相等,则接收,否则拒绝接收。目前实现这种方法的基本途径有两条:一条是采用消息认证码(MAC),另一条是采用窜改检测码(MDC)。MAC法利用函数f(x)(f(x)必须满足一定的条件)和密钥k将要发送的明文x或密文y变换成r比特的消息认证码f(x,k)或称其为认证符附加在x或y 之后发出,通常将f选为带密钥的杂凑函数。MDC法利用函数f(x)(f(x)必须满足一定的条件)将要发送的明文x变换成r比特的窜改检测码f(x)附加在x之后,在一起加密事先保密认证。当然,也可以只对窜改检测码f(x)加密。通常将f选为不带密钥的杂凑函数。接收者收到发送的消息后,按照发送这同样的方法对接收的数据或解密后的数据的前面部分进行计算,得到相应的r比特串,然后与接收恢复的r比特串逐位进行比较,若完全相同,则认为收到的消息未被窜改,否则,认为收到的消息已被窜改。

    三,密钥管理技术

    根据密码假设,一个密码系统的安全性取决于对密钥的保护,而不是对系统或硬件本身的保护。即使在密码体制公开或密码设备丢失的情况下,同一型号的密码机仍可继续使用。然而一旦密钥丢失或出错,不但合法用户不能提取信息,而且可能会是非法用户窃取信息。密钥的保密和安全管理在数据系统安全中是极为重要的 。

    密钥管理包括密钥的产生、存储、装入、分配、保护、丢失、销毁等内容.其中密钥的分配和存储可能是最棘手的问题.密钥管理不仅影响系统的安全性,而且涉及到系统的可靠性、有效性和经济性。当然,密钥管理过程中也不可能避免物理上、人事上、规程上等一些问题。

    1. 密钥分配协定

    密钥分配协定是这样的一种机制:系统中的一个成员先选择一个秘密密钥,然后将它传送另一个成员或别的成员。传统的方法是通过邮递或信使护送密钥。这种方法的安全性完全取决于信使的忠诚和素质,当很难完全消除信使被收买的可能性。另外,这种方法的传输量和存储量都很大。人们希望能设计出满足以下两个条件的密钥分配协议:

    1.传输量和存储量都比较小。

    2.每一对用户U和V都能独立地计算一个秘密密钥K。

    目前已经设计出了大量的满足上述两个条件的密钥分配协议,诸如Blom密钥分配协议,Diffie-Hellman密钥预分配协议、Kerboros 密钥分配协议、基于身份的密钥分配协议等。

    密钥协定是一个协议,它通过两个或多个成员在一个公开的信道上通信联络建立一个秘密密钥。在一个密钥协定方案中,密钥的值是由两个成员提供的输入的一个函数。现有的密钥协定方案有Diffie-Hellman密钥交换协议、MTI密钥协定方案、Girault密钥协定方案等。

    2. 秘密共享技术

    存储在系统中所有密钥的安全性可能最终取决于一个主密钥。这样做存在两个明显的缺陷:一是若主密钥偶然或有意地被暴露,整个系统就易受攻击;二是若主密钥丢失或损坏,系统中的所有信息就不能用了。关于这个问题,Shamir于1979年提出了一种解决方法,称为门限法,实质上是一种秘密共享的思想。这种方法的基本观点是:讲一个密钥K按下述方式破成n个小片k1,k2,......,kn:

    1.已知任意t个Ki的值易于计算出K。

    2.已知任意t---1个或更少个Ki,则由于信息短缺而不能确定出k。

     将n个小片分给n个用户。由于要重构密钥需要t个小片,故暴露一个小片或大到t-1个小片不会危及密钥,且少于t-1个用户不可能共谋到密钥,同时,若一个小片被丢失或损坏,认可恢复密钥(只要至少有t个有效的小片)。

     人们基于拉格朗日内插多项式法、射影几何、线性代数、孙子定理等提出了许多秘密共享方案。

     3. 密钥托管技术

     加密技术既可以帮助守法公民和企业保密,又可以被犯罪分子用于掩护其犯罪事实,这就为政府管理社会,法律执行部门跟踪犯罪分子带来了一定的困难。从国家的利益考虑,应该能控制加密技术的使用。美国于1993年提出的密钥托管加密技术正符合这种要求。密钥托管有时也叫做密钥恢复。现在密钥托管已经是一些系统的派生术语,包括密钥恢复、受信任的第三方、特别获取、数据恢复等。近几年,密钥托管加密技术已成为密码技术研究和应用的焦点。

     美国政府于1993年4月16日通过美国商业部颁布了具有密钥托管功能的加密标准(EES)。该标准规定使用专门授权制造的且算法(将该算法称之为Skipjack算法,目前已公布)不予公布的Clipper芯片实施商用加密。Clipper芯片是实现了EES标准的防窜扰芯片,它是由美国国家安全局(NSA)主持开发的硬件实现的密码部件。由于加密体制具有在法律许可时可以进行密钥合成的功能,所以政府在必要时无须花费巨大代价破译密码,而能够直接侦听。目前我们可以从网上搜集到近40种不同功能的密钥托管系统。 

     

    数据加密算法

    数据加密是实现网络安全的关键技术之一,本文首先介绍加密的基本概念,然后着重讨论两类最常见的加密技术:私用密钥加密和公开密钥加密,并详细探讨了它们的特点、发展及今后的研究方向。

    加密算法

    由于Internet的快速发展,网络安全问题日益受到人们的重视。面 临计算机网络存在的潜在威胁与攻击,一个计算机网络安全管理者要为自己所管辖的网络建造起强大、安全的保护手段,可以通过以下六个安全层次完成:即修补和阻止网络漏洞,加密,认证,防火墙,安全协议和法律事务。

    数据加密技术是网络中最基本的安全技术,主要是通过对网络中传输的信息进行数据加密来保障其安全性,这是一种主动安全防御策略,用很小的代价即可为信息提供相当大的安全保护。

    一、加密的基本概念

    "加密",是一种限制对网络上传输数据的访问权的技术。原始数据(也称为明文,plaintext)被加密设备(硬件或软件)和密钥加密而产生的经过编码的数据称为密文(ciphertext)。将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。

    加密的基本功能包括:

    1. 防止不速之客查看机密的数据文件;

    2. 防止机密数据被泄露或篡改;

    3. 防止特权用户(如系统管理员)查看私人数据文件;

    4. 使入侵者不能轻易地查找一个系统的文件。

    数据加密是确保计算机网络安全的一种重要机制,虽然由于成本、技术和管理上的复杂性等原因,目前尚未在网络中普及,但数据加密的确是实现分布式系统和网络环境下数据安全的重要手段之一。

    数据加密可在网络OSI七层协议(OSI是Open System Interconnect的缩写,意为开放式系统互联。国际标准组织(国际标准化组织)制定了OSI模型。这个模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。)的多层上实现、所以从加密技术应用的逻辑位置看,有三种方式:

    ①链路加密:通常把网络层以下的加密叫链路加密,主要用于保护通信节点间传输的数据,加解密由置于线路上的密码设备实现。根据传递的数据的同步方式又可分为同步通信加密和异步通信加密两种,同步通信加密又包含字节同步通信加密和位同步通信加密。

    ②节点加密:是对链路加密的改进。在协议传输层上进行加密,主要是对源节点和目标节点之间传输数据进行加密保护,与链路加密类似.只是加密算法要结合在依附于节点的加密模件中,克服了链路加密在节点处易遭非法存取的缺点。

    ③端对端加密:网络层以上的加密称为端对端加密。是面向网络层主体。对应用层的数据信息进行加密,易于用软件实现,且成本低,但密钥管理问题困难,主要适合大型网络系统中信息在多个发方和收方之间传输的情况。

    二、加密技术及其相关问题

    1.加密的分类

    加密类型可以简单地分为三种:

    1. 根本不考虑解密问题;

    2. 私用密钥加密技术;

    3. 公开密钥加密技术。

    第一种加密技术主要是针对一些像口令加密这样的类型,它只需要被加密,并与以前的加密进行比较;第二种和第三种加密技术是按如何使用密钥上的不同来划分的。以下主要介绍第二种和第三种加密技术。

    (1)私用密钥加密技术

    私用密钥加密利用一个密钥对数据进行加密,对方接收到数据后,需要用同一密钥来进行解密。这种加密技术的特点是数学运算量小,加密速度快,其主要弱点在于密钥管理困难,而且一旦密钥泄露则直接影响到信息的安全性。

    * 美国数据加密标准及其改进算法

    对称密钥加密技术中最具有代表性的算法是IBM公司提出的DES(Data Encryptiorn Standard)算法,该算法于1977年被美国国家标准局NBS颁布为商用数据加密标准。DES综合运用了置换、代替、代数多种密码技术,把消息分成64位大小的块,使用56位密钥,迭代轮数为l6轮的加密算法。它设计精巧,实现容易,使用方便。

    DES正式公布后,世界各国的许多公司都推出自己实现DES的软硬件产品。美国NBS至少已认可了30多种硬件和固件实现产品。硬件产品既有单片式的,也有单板式的;软件产品既有用于大中型机的,也有用于小型机和微型机的。

    三重DES(Triple DES)则是DES的加强版。是一种比较新的加密算法,它能够使用多个密钥,主要是对信息逐次作三次加密。

    随机化数据加密标准(RDES)算法是日本密码学家Nakao Y.Kaneko T等人于1996年初提出的一种新的DES改进算法。它只是在每轮迭代前的右半部增加了一个随机置换,其他均与DES相同,目前看来它比DES安全性要好。

    * 美国新数据加密标准CLIPPER和CAPSTONE

    l984年,美国总统里根签署154号国家安全决策会(NSDDl45)命令,国家保密局NSA着手制定美国政府非机要机构使用新的加密标准。NSA推行的商业安全通信签署计划CCEP完全改变了其密码政策,密码的算法不再公开,对用户只提供加密芯片及其硬件设备。NSA所推出加密芯片命名为CLIPPER,其加密算法命名为SKIPJACK,属于64位分组编码的对称密钥体制。

    CLIPPER主要是用于商用计算机网和通信网中对数据和语言进行加密,它被设计成允许法律监听的保密通信方式。在使用前需在一种称为SCIF的安全设备中进行编程,加解密时需将CLIPPER芯片装入加密设备中进行。

    l993年4月,美国白宫推出了EES(EscrowedEncryption Standard)加密标准,作为解决美国国家安全与美国公民需求之间的平衡问题。欲用EES来进行通信的双方都必须拥有带Clipper芯片的电信安全设备。

    美国NSA在推出CLIPPER的同时,还推出了军事通信网中进行数据加密的密码芯片CAPSTONE,并着手对CAPSTONE进行改进,以作为继CLIPPER之后的下一代的数据加密标准。CAPSTONE是在CLIPPER的基础上加入了数字签名算法,密钥交换及相关的数学函数。

    * 新一代加密算法IDEA

    IDEA(International Data Encryption Algorithm)是一种国际信息加密算法。它是1991年的瑞士ETH Zurich由James Massey 和Xueiia Lai发明的),于l992年正式公开,是一个分组大小为64位,密钥为l28位,迭代轮数为八轮的迭代型密码体制。密钥主要是通过二元和,模216加及216+l乘三种运算来完成,IDEA另一特点是用户可以根据需求选用64位或128位密钥以满足所需的安全要求。

    (2)公开密钥加密技术

    l976年,Diffie和Hellman首次提出公开密钥加密体制,即每个人都有一对密钥,其中一个为公开的,一个为私有的。发送信息时用对方的公开密钥加密,收信者用自己的私用密钥进行解密。公开密钥加密算法的核心是运用一种特殊的数学函数一单向陷门函数,即从一个方向求值是容易的。但其逆向计算却很困难,从而在实际上成为不可行的。公开密钥加密技术它不仅保证了安全性又易于管理。其不足是加密和解密的时间长。

    公开密钥算法有很多,一些算法如著名的背包算法和McELiece算法都被破译,目前公认比较安全的公开密钥算法主要就是RSA算法及其变种Rabin算法,离散对数算法等。

    RSA是Rivet,Shamir和Adleman于1978年在美国麻省理工学院研制出来的,它是一种比较典型的公开密钥加密算法,其安全性是建立在"大数分解和素性检测"这一已知的著名数论难题的基础上,即:将两个大素数相乘在计算上很容易实现,但将该乘积分解为两个大素数因子的计算量是相当巨大的,以至于在实际计算中是不能实现的。RSA被应用于保护电子邮件安全的Privacy Enhanced Mail(PEM)和Pretty Good Privacy(PGP)。

    我国学者陶仁骥。陈世华提出一种基于有限自动机的公开密钥加密方法:FAPKC0,FAPKC1,FAPKC2,FAPKC3。这是国际上的第一个时序公开密钥算法,其安全性是建立在非线性有限自动机求逆的困难上的。因为从数学上,线性有限自动机已有完美的可逆性理论,但迄今为止未解决非线性有限自动机可逆性理论,它可用于保密通信、数字签名,易于实现,密钥量适中,加解密速度快,已受到国际上的关注。此种密码体制的深人研究方向有:

    ①用大规模集成电路技术实现有限自动机公开密钥密码体制;

    ②对有限自动机公开密钥密码体制的安全做类似于针对RSA或流密码那样的充分分析。

    公开密钥加密技术在密钥管理上的优势使它越来越受到人们的重视,应用也日益广泛。

    2.加密技术发展趋势

    ①私用密钥加密技术与公开密钥加密技术相结合:鉴于两种密码体制加密的特点,在实际应用中可以采用折衷方案,即结合使用DES/IDEA和RSA,以DES为"内核",RSA为"外壳",对于网络中传输的数据可用DES或IDEA加密,而加密用的密钥则用RSA加密传送,此种方法既保证了数据安全又提高了加密和解密的速度,这也是目前加密技术发展的新方向之一。

    ②寻求新算法:跳出以常见的迭代为基础的构造思路,脱离基于某些数学问题复杂性的构造方法。如刘尊全先生提出的刘氏算法,是一种基于密钥的公开密钥体制,它采用了随机性原理构造加解密变换,并将其全部运算控制隐匿于密钥中,密钥长度可变。它是采用选取一定长度的分割来构造大的搜索空间,从而实现一次非线性变换。此种加密算法加密强度高、速度快、计算开销低。

    ③加密最终将被集成到系统和网络中,例如IPV6协议就已有了内置加密的支持,在硬件方面,Intel公司正研制一种加密协处理器。它可以集成到微机的主极上。

    3.密钥管理

    对于私用密钥加密和公开密钥加密系统来讲、并不强调对加密/解密算法的保密。计算机网络加密的安全性主要是依赖于算法本身的安全性和对密钥的保护。密钥主要有会话密钥(Session Key)、基本密钥(Basic Key)和主密钥(Master Key)三种。会话密钥是通信双方在会话中使用的密钥,此种密钥只在一次会话中有效,会话结束时密钥就失效;在网络中用来传送会话密钥的密钥,就是基本密钥;而对基本密钥进行加密的密钥则称为主密钥。网络中一般是采用这种三级密钥方案来进行保密通信的。

    从技术上看,密钥管理包括密钥的产生、存储、分配、使用和销毁等一系列技术问题,密钥分配是其中最重要的问题。从根本上讲,主要存在两种网络密钥管理:KDC(Key Distribution Center)和Diffie-Hellman方法。KDC使用可信第三方来验证通信双方的真实性,产生会话密钥,并通过数字签名等手段分自己密钥。Diffie-Hellmarl方法则不需KDC,通信发起方产生通信会话的私用密钥,并通过数字签名或零知识证明等方式安全传递通信密钥。IETF现在正在开发一种基于Diffi-Hellman技术的密钥交换协议Okaley,从而具有更好的安全性和强立性。目前多密钥分配是有待深入研究的领域。

    随着网络的应用与发展,网络安全问题日益突出。数据加密是确保计算机网络安全的一种重要的机制,虽然由于成本、技术和管理上的复杂性,目前尚未在网络中普及,但数据加密作为实现网络环境下数据安全的重要手段之一,必将得到广泛应用,设计优秀的现代加密技术还融入了防篡改和防否认等数字签名技术,故其不但适用于企业,而且也适用于其他用户。

     

    展开全文
  • 数据脱敏和数据加密的区别

    万次阅读 2018-04-23 14:48:33
    数据脱敏和数据加密是两种截然不同的技术,适用于不同目的。 脱敏技术主要是为了兼顾数据安全与数据使用,采用的是专业的数据脱敏算法;而加密则是通过对数据进行编码来保护数据,检索原始值的唯一方法是使用解密...

    数据脱敏和数据加密是两种截然不同的技术,适用于不同目的。

    脱敏技术主要是为了兼顾数据安全与数据使用,采用的是专业的数据脱敏算法;而加密则是通过对数据进行编码来保护数据,检索原始值的唯一方法是使用解密密钥解码数据。

    脱敏数据仍然便于使用,但加密数据不是。

    加密的主要优点在于它的可逆性,但是解密密钥存储位置、如何存储以及确定谁具有访问权限等工作都会给整个安全工作增加额外的成本、故障点,加剧复杂性。

    数据加密

    敏感数据的实际值被转换为“垃圾”值,除非通过解密还原出原始值,否则人类无法理解这些值。

    数据脱敏

    在一个不可逆转的过程中,敏感数据的真实值被转换成虚构的、但看起来逼真的值,原始值被永久改变且无法恢复。

    上面两个简图能够帮助我们清晰地了解加密和脱敏的概念区别,当然实际技术还要复杂得多。比如脱敏根据不同的数据类型可能会应用不同的脱敏规则。

    综上,我们总结一下数据加密相较于脱敏的不足之处:

    1. 数据加密不能完全从技术上保证数据的安全。严格来说,任何有权访问用户数据的人员,如ETL工程师或是数据分析人员等,均有可能导致数据泄漏(数据脱敏能够更好地保证数据隐私性)。

    2. 没有访问用户数据权限的人员,也可能存在对该数据进行分析挖掘的需求,数据的访问约束大大限制了充分挖掘数据价值的范围(数据脱敏能保证数据的可用性)。

    3. 解密密钥存储位置、如何存储以及确定谁具有访问权限等工作都会给整个安全项目增加额外的成本、故障点,扩大复杂度。

     

    数据脱敏和数据加密在数据层面的不同表现:

    脱敏:在此只是对数据如姓名,身份证号码等进行简单粗暴的脱敏,即改变数据
    加密:此处将对于两种加密算法进行讲述。
    例DES、MD5加密函数。例如:
    DES加密: update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5&124*!de');
    DES解密:select decrypt_des(s.staffpwd, 'test#5&124*!de') from tb_salarysign_staff s
    MD5加密: update tb_salarysign_staff s set s.staffpwd = md5(s.staffpwd);


    查看解密后的字段状态,判断字段是否已被加密、脱敏
    select unpassword(nik, 'key:78891234') from ods.O_GENERA_I;
    317103******0002-----解密后的脱敏状态
    select unpassword(nama, 'key:78891234') from ods.O_GENERA_I;
    MEYA NIGSSIH-------解密后的未脱敏状态

    展开全文
  • 数据加密原理详解

    千次阅读 2019-11-29 11:05:36
    数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。 数据加密仍是计算机系统对信息进行保护的一种最可靠的办法。...
  • 内存数据加密

    千次阅读 2017-12-17 15:11:54
    内存数据加密, 游戏数据合理性检测, 服务器重跑验证等都是有效的方案。 本文主介绍内存数据加密。正文内存修改器原理:修改器修改的数值都是在内存中常驻的,也就是说,数值在内存中的地址是不变的。我们通过一个...
  • 全栈工程师开发手册 (作者...java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥测试代码public static void main(String args[]) { try { RSADemo rsa=new RSADemo(); rsa.generateKey(); byte[] da
  • Android App数据加密

    千次阅读 2017-03-27 14:11:45
    Android App数据加密一、App数据加密概述:App数据加密从哪些方面去考虑呢?以及为什么要加密呢? 1.1、网络传输加密网络传输是不安全的,基于http 协议传输的内容是很容易被抓包提取数据。 1.2、跨进程intent ...
  • Android 常用的数据加密方式

    千次阅读 2017-06-22 15:46:08
    前言Android 很多场合需要使用到数据加密,比如:本地登录密码加密,网络传输数据加密,等。在android 中一般的加密方式有如下: 亦或加密 AES加密 RSA非对称加密 当然还有其他的方式,这里暂且介绍以上三种加密算法...
  • 数据加密以及国密基础知识

    千次阅读 2020-11-23 21:47:30
    数据加密是为了保证 数据存储 和 传输中 的保密性、完整性、及进行身份验证。 密码学的发展史 古典密码学 置换密码加密法 置换密码(Transposition Technique): 将明文字母互相换位,打乱顺序。 栅栏加密法 栅栏...
  • js数据加密解密

    千次阅读 2019-02-22 14:31:44
    利用String对象的charCodeAt()方法和fromCharCode()方法对数据加密解密 var Crypto = { //加密解密次数 num: 0, //加密 encryption: function (text) { this.num = this.num + 1; ...
  • MySQL数据加密

    千次阅读 2013-10-04 13:50:21
    数据加密、解密在安全领域非常重要。对程序员而言,在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大。 有多种前端加密算法可用于数据加密、解密,下面我向您推荐一种简单的数据库级别的数据加密、...
  • 数据加密和数据签名的本质区别 解释 数据加密: 用公钥加密,只能用自己的私钥解密,因为私钥只有你自己有,所以别人不可能能够解密,看到你的内容,保证了数据的保密性。 数据签名: 用私钥加密,只能用公钥...
  • MySQL数据加密与解密

    千次阅读 2019-06-29 16:11:45
    MySQL数据加密与解密 1.测试环境 MySQL 8.0 版本 .Net Framework 4.5.2 2.MySQL 自带的加密函数:aes_encrypt() 解密函数 aes_decrypt() 3.插入数据加密 INSERT INTO XXX VALUES(' aes_encrypt('加密的数据','...
  • 客户端与服务端数据加密传输方案

    千次阅读 2019-03-03 17:39:42
    从前一篇网络安全基础要点知识介绍中可以知道,在网络通信中数据容易被截取或篡改等,那么如果在传输用户隐私数据过程中,被不法分子截取或篡改,就容易导致用户受到伤害,所以对客户端与服务端的传输数据加密,是...
  • POST数据加密

    万次阅读 2015-07-28 15:47:21
    数据加密: GET请求和POST请求其中之一的区别:GET请求参数直接加在请求路径后面,很不安全; 所以一定要使用POST请求提交用户的隐私数据 1,GET请求的所有参数都是直接暴露在URL中 2,请求的URL...
  • 常用数据加密和解密方法

    千次阅读 2018-07-17 13:54:07
    关键词:数据加密用哪种方式更好? ASP.NET(C#)常用数据加密和解密方法汇总  一、数据加密的概念 1、 基本概念 2、 基本功能 3、 加密形式  二、 数据加密的项目应用和学习 1、 媒体加密:DRM 2、 ...
  • 对称数据加密技术

    千次阅读 2017-04-01 09:51:48
    对称数据加密技术是当前应用最广泛、使用频率最高的加密技术,对称加密算法是双向可逆的,加密密钥和解密密钥相同是最大的特点。对称加密算法由古典加密算法演变而来,大部分加密算法的解密算法是逆运算。特点对称...
  • Java对数据加密解密

    千次阅读 2018-05-15 15:20:30
    java使用RSA对数据加密解密RSA加密算法是非对称加密算法的一种,因为加密密钥和解密密钥不同,可以将公钥公开出去,通过公钥加密数据。数据的加密方法有很多,只要破解的难度大于数据的重要性就可以。import java....
  • C++密钥生成和数据加密

    千次阅读 2019-08-18 10:42:51
    1、最近在学习加密相关的东西,在这里将自己用到的密钥生成算法和加密算法记录下来 ... 使用ed25519公钥签名系统生成签名,密钥,向量iv 3、加密算法:这里使用openssl AES-CBC...在数据加密和解密的时候遇到一个问题...
  • 前后端数据加密传输

    千次阅读 2019-10-10 09:18:15
    想了半天,决定使用base64...解决方案:前端将数据加密后进行传输,后端把接受到的数据进行解密,再进行操作。 直接贴代码 //进行加密的密钥(可更换) var keyStr = "ABCDEFGHIJKLMNOP"+"QRSTUVWXYZabcdef"+...
  • Android数据加密之RSA+AES混合加密

    千次阅读 2016-09-19 16:51:55
    在上一篇Android数据加密 中已经介绍了Android中数据加密的情况,并且在总结中给出了RSA+AES混合加密的方案,下面就来介绍一下RSA+AES混合加密。该篇博客转载自:...
  •  数据加密又称密码学,它是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。数据加密目前仍是计算机系统对信息进行保护的一种最可靠的办法。它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,059
精华内容 29,623
关键字:

数据加密