快速加密Linux文件

2017-03-11 02:14
网络安全和信息化 2017年12期
关键词:私钥加密算法公钥

使用对称加密技术

在 Linux中,可以使用GPG,Openssl enc来实现对称加密。对于前者来说,在RedHat linux中 执行“gpg-a --cipher-algo TWOFISH--outfile bankinfo.2f -c bankinfo.txt”命令,可以使用“TWOFISH”加密算法,对“bankibfo.txt”的文件进行加密,输入密码后,得到的名为“bankinfo.2f”的加密文件。初次使用时,系统会提示“/root/.gnupg”等文件不存在,并自动创建这些文件。

进入“.gnupg”目录后,可以看到其中的“pubring.gpg”和“secrig.gpg”就是密钥数据库文件,分别存放和公钥和私钥相关的内容。这里使用的是对称加密,所以这两个文件的大小为零。“--cipher-algo”参数说明使用的加密算法。执行“gpg--versiom”命令,在帮助信息中的“Cipher”栏中显示所有可用的加密算法,包括3DES、CAST5、BLOWFISH、AES、AES192、AES256、TWOFISH等。解密时,可以执行“gpg--output bankinfo.txt -d bankibfo.2f”命令,输入密钥后,得到解密后的文件。

对于后者来说,可以执行“openssl enc -aes128 -a-in jimi.txt -out jimi.aes”命令,根据提示输入两次密钥,完成对“jimi.txt”文件的加密,得到加密后的 文件“jimi.aes”。“-aes128”参数表示使用128位的AES加密算法,“-a”参数表示生成的加密文件由ASCII码组成,如果不使用该参数,生成的加密文件是二进制状态,无法直接查看。当对方收到该文件后,执行“openssl enc -d-aes128 -a -in jimi.aes-out jimi.txt”命令,输入密码后,可以对其解密。

实现文件透明加密

使用AES加密模块对文件进行加密,执行“modprobe aes”命令,手工加载AES加密模块。执行“yum install dnsetup cryptsetup” 命令,安装DMsetup工具包。执行“modprobe dm-crypt” 命令,会使用Device-Mapper设备映射机制自动完成注册操作。Device mapper是Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,可以根据自己的需要制定实现存储资源的管理策略。

执行“dmsetup targets”命令,在输出列表中可以看到Crypt的版本信息。要想实现加密操作,需要创建对应的加密设备。利用dd命令创建一个空磁盘映像文件,加载为虚拟的存储设备,就可以加密文件系统了。执行“dd if=/dev/zero of=/xunijiami.img=1M count=200”命令,创建名称为xunijiami.img、容量为200MB的映像文件。

执行“losetup /dev/loo0 /virtual.img”命令,得到路径为“/dev/loop0”的虚拟存储设备。之后执行“cryptsetup -y create kp_vrd /dev/loop0”命令,系统会要求用户输入逻辑卷的密码,这对于保护文件安全很重要。您可以在其中存储机密文件,实现透明加密操作。 “y”参数的作用要求输入两次密码,防止因为失误导致忘记密码的情况。您可以在其中存储机密文件,实现透明加密操作。也可以在物理存储设备(例如“dev/hda1”等)上建立逻辑卷,实现与块设备的绑定。

执行“cryptsetup -y create kp_vrd /dev/hda1”命令,同样可以用于加密文件的逻辑卷。执行“dmsetup ls”命令,列出所有的逻辑卷信息。因为Device-Mapper机制会将虚拟设备装载到“dev/mapper”位置,所以上述虚拟块设备实际的位置应为“dev/mapper/kp_vrd”。具体使用时,必须创建文件系 统,执行“mkfs.Ext3 /dev/mapper/kp_vrd”命令即可。执行“mkdir /mnt/kp_vrd /”命令,创建用于装载的路径,执行“mount /dev/mapper/kp_vrd /mnt/ kp_vrd”命令,将虚拟设备加载到指定的装载点中。

完成以上操作后,加密存储设备就创建完成了。您可以像使用普通磁盘一样,向“/mnt/kp_vrd”目 录 存储机密文件。在文件写入该目录之前,都经过了透明的加密处理,之后才将其存放到该目录中。如果直接读取其中的文件,显示的是加密过的内容,无法查看其真实内容。使用完毕后,执行“cryptsetup remove kp_vrd”命令彻底卸载。

用OpenSSL实现非对称加密

非对称加密方式是使用私钥对数据进行签名,使用公钥对其进行校验。对于非对称加密,最常用的是RSA和EIGamal加密算法。RSA算法的特点是可以将公钥嵌入到私钥中,来形成钥匙对。缺点是只能对小于100个字节的文本进行加密,进行大量数据加密时效率较低。使用RSA的方法是在公私钥架构的基础上,来传输秘密的钥匙(Session Key),当传输完毕后再切换为更加高效的对称加密方式。使用gpg,openssl rsautl等工具,实现非对称加密。

例 如,用 户User1使用“openssl genrsa 1024>secret.key”命令,生成长度为1024的RSA私钥,保存在“secret.key”文件中。因为公钥嵌入在私钥中,所以执行“openssl rsa -pubout-in scret.Key > public.key”命令,将公钥提取到“public.key”文件中。对于用户User2,也需要执行同样的操作,得到RSA公钥和私钥,例 如“secret2.key”和“public2.key”。当需要对名为“jimi.txt”的文件进行加密时,执行“openssl rsautil-encrpyt -pubin -inkey public2.key -in jimi.txt-out jimi.enc”命令,使用User2的公钥对该文件进行加密,生成加密后的文件“jimi.enc”。用户User1将该加密文件发送给用户User2,用户User2执行“openssl rsautil-decrpyt -pubin -inkey secret1.key -in jimi.enc-out jimi.txt”命令,使用私钥文件“secret1.key”对加密的文件进行解密,得到所需的原文件。对应的,当User2对文件加密时,需要使用User1的公钥,当User1接收到加密文件后,使用自身的私钥对其解密。

使用GPG实现非对称加密

使用GPG也可以实现非对称加密,例如User1用户执行“gpg --gen-key”命令,根据提示选择加密类型,例如输入“1”,表示使用“DSA and Elgamal”方式,即可以实现加密也可以实现签名。输入长度(例如2048),设置密钥长度。根据提示输入“0”,表示密钥永不失效。在“Real name”栏中输入使用者的名字,长度不小于5个字符,这样做的好处在于根据不同的名称ID,来生成不同的私钥,可以适用于不同的加密场合。之后输入私钥的密码,这样可以保护私钥安全。当确认以上操作后,才可以生成公钥(pubring.gpg)和私钥(secring.gpg)。打开当前账户目录下“.gnupg”的隐藏目录,可以看到这些公私钥文件。

执行“gpg --expert -a>user1.gpgpub”命令,将公钥信息以ASCII格式导出为“user1.gpgpub”公钥文件。对应的,用户User2也执行同样的操作,生成自己的钥匙对,并将公钥导出为“user2.gpgpub”文件。User2执行“gpg--import user1.pgppub”命令,将User1的公钥导入进来。执行“gpg --list-key”命令,可以看到User2拥有的密钥列表。当User2想传输一个机密文件给User1,为了防止中途被黑客拦截,需要对其进行加密。执行“gpg-r user1 -e jimi.txt”命令,使用User1的公钥对文件进行加密,“-r”参数指明使用谁的公钥。将得到的加密文件“jimi.txt.gpg”发送给User1,User1执行“gpg -d jimi.txt.gpg > jimi.txt”命令,使用自己的私钥对该加密文件进行解密。

使用数字签名保证数据合法性

在非对称加密架构中,可以使用私钥进行数字签名,防止信息被模仿。例如,当用户User1使用私钥对发送的信息加密签名,将其发送给User2。User2使用User1的公钥将其打开后,那么User1将不可对其进行否认,这保证了数据的完整性和合法性。常用的签名算法包括 RSAE、EIGamal、DSA等。例如,User1可以执行“gpg -s kehao.txt” 命令,使用自己的GPG私钥对文件“kehao.txt”进行签名,会在同一路径下生成同名的后缀为“.gpg”的文件,在该文件包含了原文件和签名信息。这里的命令格式适用于存在单个密钥对的情况,如果存在多个密钥对,需要使用“-r keyID”参数指明具体的私钥。执行“gpg --list-key”命令,可以查看当前的密钥信息。执行“gpg --expert -a>user1.gpgpub”命令,将公钥信息以ASCII格式导出为“user1.gpgpub”公钥文件。

将签名文件和公钥文件发送给用户User2,用户User2执行“gpg --import user1.pgppub” 命令, 将User1的公钥导入进来。当User2收到“kehao.txt.gpg”文件后,执行“gpg -o kahao.txt -d kehao.txt.gpgpub”命令,可以使用User1的公钥对“kekao.txt”进行校验,在校验信息中会显示“Good signature from " User1"”内容,说明该文件的确是User1发送来的。因为签名信息嵌入到了原文件中,所以之后可以执行“cat kehao.txt”,来查看原文件内容。为了便于使用,可以将签名信息单独保存为文件,例如User1可以执行“gpg -b-s kehao.txt”命令,得到单独的签名文件“kehao.txt.sig”。 将“kehao.txt” 和“kehao.txt.sig”文件发送给User2,User2除了可以直接查看原文件外,还可以执行“gpg --verity kehao.txt.gpg kehao.txt”命令,同样可以执行签名校验操作。

猜你喜欢
私钥加密算法公钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
基于改进ECC 算法的网络信息私钥变换优化方法
基于整数矩阵乘法的图像加密算法
一种基于混沌的公钥加密方案
基于混沌系统和DNA编码的量子图像加密算法
神奇的公钥密码
一种基于虚拟私钥的OpenSSL与CSP交互方案
混沌参数调制下RSA数据加密算法研究
P2X7 receptor antagonism in amyotrophic lateral sclerosis