美文网首页
加密算法

加密算法

作者: 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