美文网首页
加密算法

加密算法

作者: Simon_Ye | 来源:发表于2020-03-10 12:13 被阅读0次

对称加密算法

对称加密:加密和解密使用同一个密钥

  • 免费
    • DES:Data Encryption Stadard,56bits
    • 3DES
    • AES:Advanced(128,192,256bits)
  • 商用
    • Blowfish,Twofish
    • IDEA,RC6,CAST5

特性

  1. 加密、解密使用同一个密钥,效率高
  2. 将原始数据分割成固定大小的块,逐个进行加密

缺陷:

  1. 密钥过多
  2. 密钥分发困难
  3. 数据来源无法确认

非对称加密算法

基于一对公钥/私钥对

密钥是成对出现,用密钥对中的一个加密,另一个解密

  • 公钥:公开给所有人;public key
  • 私钥:自己留存,必须保证其私密性;secret key

特点

用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能

  • 数字签名:主要在于让接收方确认发送方身份
  • 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
  • 数据加密:适合加密较小数据

缺点

密钥长,加密解密效率低下

算法

  • RSA(加密,数字签名)
  • DSA(数字签名)
  • ELGamal

实现加密

  1. 接收者:
    生成公钥/密钥对:P和S
    公开公钥P,保密密钥S
  2. 发送者:
    使用接收者的公钥来加密消息M
    将P(M)发送给接收者
  3. 接收者:
    使用密钥S来解密:M=S(P(M))

实现数字签名

  1. 发送者:
    生成公钥/密钥对:P和S
    公开公钥P,保密密钥S
    使用密钥S来加密消息M
    发送给接收者S(M)
  2. 接收者
    使用发送者的公钥来解密M=P(S(M))

单向散列(hash)算法

将任意数据缩小成固定大小的“指纹”

  • 任意长度输入
  • 固定长度输出
  • 若修改数据,指纹也会改变(“不会产生冲突”)
  • 无法从指纹中重新生成数据(“单向”)

功能:

数据完整性

常见算式:

md5:128bits
sha1:160bits
sha224:224bits
sha256:256bits
sha384:384bits
sha512:512bits

常用工具:

  • md5sum | sha1sum [--check] file
  • openssl、gpg
  • rpm -V

密钥交换

密钥交换:IKE(Internet Key Exchange)

DH

  1. A:a,p协商生成公开的整数a,大素数p
    B:a,p
  2. A:生成隐私数据:x(x<p),计算得出a^x%p,发送给B
    B:生成隐私数据:y,计算得出a^y%p,发送给A
  3. A:计算得出[(a^y%p)^x]%p=a^xy%p,生成为密钥
    B:计算得出[(a^x%p)^y]%p=a^xy%p,生成为密钥

应用程序:RPM

文件完整性的两种实施方式

  1. 被安装的文件
    • MD5单向散列
    • rpm --verify package_name(or -V)
  2. 发行的软件报文件
    • GPG公钥签名
    • rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
    • rpm --checksig pakage_file_name(or -k)

使用gpg实现对称加密

示例

  • 对称加密 file1 文件
    [root@node2 tmp]# gpg -c file1
    gpg: directory `/root/.gnupg' created
    gpg: new configuration file `/root/.gnupg/gpg.conf' created
    gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
    gpg: keyring `/root/.gnupg/pubring.gpg' created
    [root@node2 tmp]# ls
    file1  file1.gpg
    [root@node2 tmp]# ll
    total 8
    -rw-r--r--. 1 root root 257 Mar 10 10:03 file1
    -rw-r--r--. 1 root root 185 Mar 10 11:31 file1.gpg
    
  • 解密 file1.gpg 文件为 f1
    [root@node2 tmp]# gpg -o f1 -d file1.gpg 
    gpg: keyring `/root/.gnupg/secring.gpg' created
    gpg: CAST5 encrypted data
    gpg: encrypted with 1 passphrase
    gpg: WARNING: message was not integrity protected
    [root@node2 tmp]# ll
    total 8
    -rw-r--r--. 1 root root 257 Mar 10 11:37 f1
    -rw-r--r--. 1 root root 257 Mar 10 10:03 file1
    -rw-r--r--. 1 root root 185 Mar 10 11:31 file1.gpg
    

使用gpg工具实现公钥加密

在hostB主机上用公钥加密,在hostA主机上解密

  1. 在hostA主机上生成公钥/私钥对,保存路径为/root/.gnupg目录
    ~]# gpg -gen-key
  2. 在hostA主机上查看公钥
    ~]# gpg --list-keys
  3. 在hostA主机上导出公钥为可读格式的指定文件名
    ~]# gpg -a --export -o wang.pubkey
    -a:编码格式
    --export:导出
    -o:指定文件名
  4. 从hostA主机上复制公钥文件到需加密的B主机上
    ~]# scp wang.pubkey hostB:
  5. 在需加密数据的hostB主机上生成公钥/私钥对
    ~]# gpg --list-keys
    ~]# gpg --gen-key
  6. 在hostB主机上导入hostA的公钥
    ~]# gpg --import wang.pubkey
    ~]# gpg --list-keys
  7. 用从hostA主机导入的公钥,加密hostB主机的文件 file1 ,生成 file1.gpg
    ~]# gpg -e -r wange file1
    ~]# file file1.gpg
  8. 从hostB主机上把刚刚加密生成的文件 file1.gpg 复制给hostA主机
    ~]# scp file1.gpg hostA:
  9. 在hostA主机上解密hostB主机传来的文件 file1.gpg
    ~]# gpg -o file1 -d file1.pgp
  10. 删除公钥和私钥
    ~]# gpg --delete-keys wange
    ~]# gpg --delete-secret-keys wange

相关文章

网友评论

      本文标题:加密算法

      本文链接:https://www.haomeiwen.com/subject/afvidhtx.html