zoukankan      html  css  js  c++  java
  • 安全和加密

    信息安全防护的目标
      保密性 Confidentiality
      完整性 Integrity
      可用性 Usability
      可控制性Controlability
      不可否认性 Non-repudiation

    安全防护环节

      物理安全:各种设备/主机、机房环境
      系统安全:主机或设备的操作系统
      应用安全:各种网络服务、应用程序
      网络安全:对网络访问的控制、防火墙规则
      数据安全:信息的备份与恢复、加密解密
      管理安全:各种保障性的规范、流程、方法

    安全攻击: STRIDE
      Spoofing 假冒
      Tampering 篡改
      Repudiation 否认
      Information Disclosure 信息泄漏
      Denial of Service 拒绝服务
      Elevation of Privilege 提升权限

    密码算法和协议

      对称加密

      公钥加密

      单向加密

      认证协议

    对称加密算法

      DES:Data Encryption Standard,56bits
      3DES:
      AES:Advanced (128, 192, 256bits)
      商业解决方案:Blowfish,Twofish,IDEA,RC6,CAST5

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

      缺陷:
        1、密钥过多
        2、密钥分发
        3、数据来源无法确认

    非对称加密算法

      公钥加密:密钥是成对出现

        公钥:公开给所有人;public key

         私钥:自己留存,必须保证其私密性;secret key

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

           可以根据该原理实现数字签名,实现数据来源的确认

        功能:

          数字签名:主要在于让接收方确认发送方身份

          对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

          数据加密:适合加密较小数据

         缺点:密钥长,加密解密效率低下

         算法:RSA(加密,数字签名),DSA(数字签名),ELGamal

         基于一对公钥/密钥对

          用密钥对中的一个加密,另一个解密

    单向散列

      hash(data)=digest 摘要

        1、data不同,摘要必不同

        2、摘要相同,data相同

        3、不论data大小,digest大小只与算法相关

        4、hash算法,不可逆

      计算哈希值:md5sum、sha1sum、sha512sum 

      比较哈希值用法:md5sum、sha1sum、sha512sum用法一样

        sha1sum f1.sh> f1.sh.sha1        生成哈希值文件

        sha1sum -c  f1.sh.sha1    比较哈希值

      多个文件可以生成一个校验文件,一次检查多个

        sha512sum f1.sh msconfig a.txt > all.sha

        sha512 -c all.sha

    应用程序:RPM

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

        被安装的文件

          MD5单向散列

            rpm --verify package_name (or -V)

      发行的软件包文件

        GPG公钥签名

          rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*

          rpm --checksig pakage_file_name (or -K)

    使用gpg实现对称加密

      对称加密file文件

        gpg -c file

        ls file.gpg

      在另一台主机上解密file

        gpg -o file -d file.gpg

    使用gpg工具实现公钥加密

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

      在hostA主机上生成公钥/私钥对 

        gpg --gen-key

      在hostA主机上查看公钥

        gpg --list-keys

      在hostA主机上导出公钥到wang.pubkey

        gpg -a --export -o wang.pubkey

      从hostA主机上复制公钥文件到需加密的B主机上

        scp wang.pubkey hostB:

      在需加密数据的hostB主机上生成公钥/私钥对   

        gpg --list-keys
        gpg --gen-key

      在hostB主机上导入公钥

        gpg --import wang.pubkey

        gpg --list-keys

      用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

        gpg -e -r wangxiaochun file

        file file.gpg

      复制加密文件到hostA主机

        scp fstab.gpg hostA:

      在hostA主机解密文件

        gpg -d file.gpg 

        gpg -o file -d file.gpg

      删除公钥和私钥

        gpg --delete-keys wangxiaochun

        gpg --delete-secret-keys wangxiaochun

    https工作原理:

      1、客户端向服务器发起请求

      2、服务器向客户端发送自己的证书(CA私钥签名的服务器证书)Sca(Pserver)

      3、客户端用CA的公钥解开私钥获取服务器公钥Pca[Sca(Psever)]=Pserver

      4、客户端随机生成一个对称密钥key

      5、用服务器的公钥加密对称密钥Pserver(key)并发送给服务器

      6、服务器用私钥解密收到的密钥获得对称密钥Sserver[Pserver(key)]=key

      7、客户端和服务器利用对称密钥(key)进行加密通信

    OpenSSL

      OpenSSL:开源项目

        三个组件:

          openssl: 多用途的命令行工具,包openssl

           libcrypto: 加密算法库,包openssl-libs

          libssl:加密模块应用库,实现了ssl及tls,包nss

      openssl命令:

        两种运行模式:交互模式和批处理模式

        openssl version:程序版本号

        标准命令、消息摘要命令、加密命令

        标准命令:

          enc, ca, req, ...

        对称加密:

          工具:openssl enc, gpg

          算法:3des, aes, blowfish, twofish

        enc命令:        

          帮助:man enc

          加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher             对称加密

          解密:openssl enc -d -des3 -a -salt –in testfile.cipher  -out testfile   对称解密    

      单向加密:

        工具:md5sum, sha1sum, sha224sum,sha256sum…

      dgst命令:

        帮助:man dgst

        openssl dgst -md5 [-hex默认] /PATH/SOMEFILE  生成文件的md5值

        openssl dgst -sha1 testfile              生成文件的sha1值

        md5sum /PATH/TO/SOMEFILE   生成文件的md5值

      生成用户密码:

        passwd命令:

        帮助:man sslpasswd

        openssl passwd -1 -salt SALT(最多8位)

        openssl passwd -1 –salt centos

      生成随机数:

        帮助:man sslrand

        openssl rand -base64|-hex NUM

        NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

      公钥加密:

        算法:RSA, ELGamal

        工具:gpg, openssl rsautl(man rsautl)

      数字签名:

        算法:RSA, DSA, ELGamal

      密钥交换:

        算法:dh

        DSA: Digital Signature Algorithm

        DSS:Digital Signature Standard

        RSA:

      生成密钥对儿:man genrsa

      生成私钥

        openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS 

        (umask 077; openssl genrsa –out test.key –des 2048)   生成私钥,直接在子shell里面设置了umask码并进行对称密钥加密,一步到位

        openssl rsa -in test.key –out test2.key   对上一步加密的私钥进行解密

      从私钥中提取出公钥

        openssl rsa –in test.key –pubout –out test.key.pub

      随机数生成器:伪随机数字

        键盘和鼠标,块设备中断

        /dev/random:仅从熵池返回随机数;随机数用尽,阻塞    

        /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

    创建CA和申请证书

    PKI:Public Key Infrastructure

      CA

      RA

      CRL

      证书存取库

    建立私有CA:

      OpenCA

      openssl

    证书申请及签署步骤:

      1、生成申请请求

      2、RA核验 

      3、CA签署 

      4、获取证书

    创建私有CA:

      openssl的配置文件:/etc/pki/tls/openssl.cnf

        CA文件路径都在/etc/pki/CA/

    dir             = /etc/pki/CA            # Where everything is kept
    certs           = $dir/certs             # Where the issued certs are kept
    crl_dir         = $dir/crl               # Where the issued crl are kept
    database        = $dir/index.txt         # database index file.
    #unique_subject = no                     # Set to 'no' to allow creation of
                                             # several ctificates with same subject.
    new_certs_dir   = $dir/newcerts          # default place for new certs.
    
    certificate     = $dir/cacert.pem         # The CA certificate    CA自签名证书
    serial          = $dir/serial             # The current serial number
    crlnumber       = $dir/crlnumber          # the current crl number
                                              # must be commented out to leave a V1 CRL
    crl             = $dir/crl.pem            # The current CRL
    private_key     = $dir/private/cakey.pem  # The private key   CA私钥
    RANDFILE        = $dir/private/.rand      # private random number file

      三种策略:匹配、支持和可选

        匹配指要求申请填写的信息跟CA设置信息必须一致

        支持指必须填写这项申请信息

        可选指可有可无

      1、创建所需要的文件

        touch /etc/pki/CA/index.txt 生成证书索引数据库文件

        echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

      2、 CA自签证书

        生成私钥

        cd /etc/pki/CA/

        (umask 066; openssl genrsa -out  /etc/pki/CA/private/cakey.pem 2048)

        生成自签名证书

        openssl req -new -x509 –key

        /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

          -new: 生成新证书签署请求

          -x509: 专用于CA生成自签证书

          -key: 生成请求时用到的私钥文件

          -days n:证书的有效期限

          -out /PATH/TO/SOMECERTFILE: 证书的保存路径

       3、颁发证书

        A 在需要使用证书的主机生成证书请求

          给web服务器生成私钥

            (umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)

          生成证书申请文件

            openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr

        B 将证书请求文件传输给CA

        C CA签署证书,并将证书颁发给请求者

          openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365

        注意:默认国家,省,公司名称三项必须和CA一致

        D 查看证书中的信息:

          openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates

          openssl ca -status SERIAL  查看指定编号的证书状态

       4、吊销证书

        A 在客户端获取要吊销的证书的serial

          openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

        B 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致

          吊销证书:

            openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

        C 指定第一个吊销证书的编号

          注意:第一次更新证书吊销列表前,才需要执行

            echo 01 > /etc/pki/CA/crlnumber

        D 更新证书吊销列表

          openssl ca -gencrl -out /etc/pki/CA/crl.pem

          查看crl文件:

            openssl crl -in /etc/pki/CA/crl.pem -noout -text

      重复申请证书需要更改index.txt.attr里的值改为no,即可     

    unique_subject = yes     改为no即可申请重复证书

      在配置文件/etc/pki/tls/openssl.cnf里的文件更改policy类型

    policy          = policy_match     此处可改为anything放宽限制
    
    # For the CA policy
    [ policy_match ]                match更改为optional可放宽限制
    countryName             = match             
    stateOrProvinceName     = match
    organizationName        = match
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    # For the 'anything' policy
    # At this point in time, you must list all acceptable 'object'
    # types.
    [ policy_anything ]
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/tony3154/p/10113575.html
Copyright © 2011-2022 走看看