加密和安全

Posted 黑夜天星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密和安全相关的知识,希望对你有一定的参考价值。

目录:

  • 安全机制
  • 安全算法 
  • gpg
  • PKI和CA
  • openssl
  • 证书管理
  • ssh服务和dropbear
  • aide
  • Sudo
  • TCP Wrappers
  • PAM模块。

 

1--[安全机制]

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

安全防护环节 物理安全:各种设备/主机、机房环境

                      系统安全:主机或设备的操作系统

                      应用安全:各种网络服务、应用程序

                      网络安全:对网络访问的控制、防火墙规则 数据安全:信息的备份与恢复、加密解密

                      管理安全:各种保障性的规范、流程、方

安全设计原则:使用成熟的安全系统     以小人之心度输入数据     外部系统是不安全的     最小授权     减少外部接口    缺省使用安全模式    安全不是似是而非    

       从STRIDE思考   在入口处检查    从管理上保护好你的系统

2--[安全算法]

常用安全技术

  认证

  授权

  安全通信

  审计

密码算法和协议: 对称加密      公钥加密      单向加密       认证协议

Linux系统:OpenSSL, gpg(pgp协议的实现)

不安全的传统协议 • telnet、FTP、POP3等等;

不安全密码 • http、smtp、NFS等等;

不安全信息 • Ldap、NIS、rsh等等;不安全验证

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

      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

   非对称加密:基于一对公钥/密钥对 • 用密钥对中的一个加密,另一个解密

      实现加密: • 接收者 生成公钥/密钥对:P和S 公开公钥P,保密密钥S

            • 发送者 使用接收者的公钥来加密消息M 将P(M)发送给接收者

              • 接收者 使用密钥S来解密:M=S(P(M))

      实现数字签名以确认身份:• 发送者 生成公钥/密钥对:P和S 公开公钥P,保密密钥S 使用密钥S来加密消息M 发送给接收者S(M)

                  • 接收者 使用发送者的公钥来解密M=P(S(M))

   结合签名和加密

   分离签名

   单向散列:将任意数据缩小成固定大小的“指纹”

   密钥交换:IKE( Internet Key Exchange )公钥加密: DH (Deffie-Hellman):生成会话密钥

   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,生成为密钥

 3--[gpg]


        1.使用gpg实现对称加密:gpg -c file ;输入密码;

   

       

       

        2.在另一台主机上解密:gpg  -o  file -d file.gpg

   

  3.使用gpg实现公钥加密:在hostB主机上用公钥加密,在hostA主机上解密 

  1.  在hostA主机上生成公钥/私钥对 gpg --gen-key  
  2.  在hostA主机上查看公钥 gpg --list-keys
  3.  在hostA主机上导出公钥root.pubkey gpg -a --export -o root.pubkey
  4.  从hostA主机上复制公钥文件到需加密的B主机上 scp root.pubkey hostB:
  5. 在需加密数据的hostB主机上生成公钥/私钥对 gpg --list-keys gpg --gen-key
  6. 在hostB主机上导入公钥 gpg --import root.pubkey gpg --list-keys
  7. 用从hostA主机导入的公钥,加密hostB主机的文件file,生成 file.gpg gpg -e -r mima file file file.gpg
  8. 复制加密文件到hostA主机 scp fstab.gpg hostA:
  9. 在hostA主机解密文件 gpg -d file.gpg gpg -o file -d file.gpg
  10. 删除公钥和私钥 gpg --delete-keys mima gpg --delete-secret-keys mima

4--[PKI和CA]

       PKI: Public Key Infrastructure

  •        签证机构: CA(Certificate Authority)
  •        注册机构:RA
  •        证书吊销列表:CRL 

       X.509:定义了证书的结构以及认证协议标准、 版本号、 序列号、 签名算法 、颁发者 、有效期限 、主体名称。

     证书类型: 证书授权机构的证书 、服务器、 用户证书

     获取证书两种方法:

      •          使用证书授权机构 生成签名请求(csr ) 将csr发送给CA 从CA处接收签名

      •          自签名的证书 自已签发自己的公钥

5--[openssl]

      对称加密:

        工具: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

      生成用户密码: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:生成密钥对儿:

             生成私钥 openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

                  (umask 077; openssl genrsa –out test.key –des 2048)

             从私钥中提取出公钥 openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE

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

6--[证书管理]

         创建私有CA: openssl的配置文件:/etc/pki/tls/openssl.cnf

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

         匹配指要求申请填写的信息跟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)

                         3、生成自签名证书 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: 证书的保存路径

                         4、颁发证书

           • 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 查看指定编号的证书状态

        5、吊销证书

            • 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/crl.pem 查看crl文件: openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text

 

7--[ssh服务和dropbear]

         ssh: secure shell, protocol, 22/tcp, 安全的远程登录

         具体的软件实现: OpenSSH: ssh协议的开源实现,CentOS默认安装

                                      dropbear:另一个开源实现

         两种方式的用户登录认证: 基于password

                                                    基于key

         基于用户名口令登录验证原理:

        

          基于key认证原理:

              (1) 在客户端生成密钥对 ssh-keygen -t rsa [-P \'\'] [-f “~/.ssh/id_rsa"]

         (2) 把公钥文件传输至远程服务器对应用户的家目录 ssh-copy-id [-i [identity_file]] [user@]host

         (3) 测试

       (4) 在SecureCRT或Xshell实现基于key验证 在SecureCRT工具—>创建公钥—>生成Identity.pub文件 转化为openssh兼容格式

        (适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中, 注意权限必须为600,

         在需登录的ssh主机上执行: ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys 47 基于key认证

       (5)重设私钥口令: ssh-keygen –p

       (6)验证代理(authentication agent)保密解密后的密钥 • 这样口令就只需要输入一次 • 在GNOME中,代理被自动提供给root用户

         否则运行ssh-agent bash

                        (7)钥匙通过命令添加给代理 ssh-add

          ssh客户端组件:ssh, 配置文件:/etc/ssh/ssh_config

       Host PATTERN StrictHostKeyChecking no 首次登录不显示检查提示

                 格式:ssh [user@]host [COMMAND] ssh [-l user] host [COMMAND]

             -p port:远程服务器监听的端口

             -b:指定连接的源IP

             -v:调试模式

             -C:压缩方式

             -X:支持x11转发

             -Y:支持信任x11转发   ForwardX11Trusted yes

                -t: 强制伪tty分配 ssh -t remoteserver1 ssh remoteserver2

   其他工具:scp(传发文件)、rsync(增量备份转发文件)、sftp(基于数据安全加密的ftp)、pssh(方便批量处理的远程连接工具) 

   ssh最佳实践:不要使用默认端口

           禁止使用protocol version 1

           限制可登录用户

           设定空闲会话超时时长

           利用防火墙设置ssh访问策略

           仅监听特定的IP地址

           基于口令认证时,使用强密码策略 tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

           使用基于密钥的认证

           禁止使用空密码

           禁止root用户直接登录

           限制ssh的访问频度和并发在线数

           做好日志,经常分析

    ssh的另一种实现:dropbear

                                 • 1、安装开发包组:

                                 • 2、下载dropbear-2017.75.tar.bz2

                                 • 3、tar xf dropbear-2017.75.tar.bz2

                                 • 4、less INSTALL README

                                 • 5、./configure

                                 • 6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"     (INSTALL)

                                 • 7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install 60 dropbear (INSTALL)

         启动ssh服务: • 8、ls /usr/local/sbin/ /usr/local/bin/

                                 • 9、/usr/local/sbin/dropbear -h

           • 10、mkdir /etc/dropbear

           • 11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048

           • 12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key

           • 13、dropbear -p :2222 -F –E #前台运行 dropbear -p :2222 #后台运行

    客户端访问: • 14、ssh -p 2222 root@127.0.0.1

           • 15、dbclient -p 2222 root@127.0.0.1

 8--[AIDE]

          AIDE(Adevanced Intrusion Detection Environment) • 高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的 完整性,

审计计算机上的那些文件被更改过了。 AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配 置文件。AIDE数据库能够保

存文件的各种属性,包括:权限 (permission)、索引节点序号(inode number)、所属用户(user)、 所属用户组(group)、文件大小、最

后修改时间(mtime)、创建时间 (ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE 还能够使用下列算法:sha1、md5、

rmd160、tiger,以密文形式 建立每个文件的校验码或散列号. • 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件 、邮

件、/proc文件系统、用户起始目录以及临时目。aide也是一款免费的但功能也很强 大的工具。

    安装 yum install aide

    修改配置文件 vim /etc/aide.conf (指定对哪些文件进行检测)

          /test/chameleon R

          /bin/ps R+a /usr/bin/crontab R+a

          /etc PERMS !/etc/mtab #“!”表示忽略这个文件的检查

          R=p+i+n+u+g+s+m+c+md5 权限+索引节点+链接数+用 户+组+大小+最后一次修改时间+创建时间+md5校验值

          NORMAL = R+rmd60+sha256

          初始化默认的AIDE的库: /usr/local/bin/aide --init

          生成检查数据库(建议初始数据库存放到安全的地方)

          cd /var/lib/aide mv aide.db.new.gz aide.db.gz

          检测: /usr/local/bin/aide --check

          更新数据库 aide --update

  9--[Sudo]

          sudo能够授权指定用户在指定主机上运行某些命令。如果 未授权用户尝试使用 sudo,会提示联系管理员

   sudo可以提供日志,记录每个用户使用sudo操作

     sudo为系统管理员提供配置文件,允许系统管理员集中地 管理用户的使用权限和使用的主机

   sudo使用时间戳文件来完成类似“检票”的系统,默认存 活期为5分钟的“入场券”

 

   通过visudo命令编辑配置文件,具有语法检查功能 visudo –c 检查语法     

          配置文件:/etc/sudoers, /etc/sudoers.d/

   时间戳文件:/var/db/sudo

          日志文件:/var/log/secure

          配置文件支持使用通配符glob: ?:任意单一字符 * :匹配任意长度字符 [wxc]:匹配其中一个字符

                 [!wxc]:除了这三个字符的其它字符 \\x : 转义 [[alpha]] :字母 示例: /bin/ls  [[alpha]]*

          配置文件规则有两类; 1、别名定义:不是必须的 2、授权规则:必须的

          授权规则格式: 用户 登入主机=(代表用户) 命令

       示例: root ALL=(ALL) ALL

       格式说明: user: 运行命令者的身份 host: 通过哪些主机 (runas):以哪个用户的身份 command: 运行哪些命令

 10--[TCP Wrappers]

          对有状态连接的特定服务进行安全检测并实现访问控制

          以库文件形式实现

          某进程是否接受libwrap的控制取决于发起此进程的程序在编 译时是否针对libwrap进行编译的

          判断服务程序是否能够由tcp_wrapper进行访问控制的方法: ldd /PATH/TO/PROGRAM|grep libwrap.so

          配置文件:/etc/hosts.allow, /etc/hosts.deny    (帮助参考:man 5 hosts_access,man 5 hosts_options )

          检查顺序:hosts.allow,hosts.deny(默认允许) 注意:一旦前面规则匹配,直接生效,将不再继续

          基本语法:  daemon_list@host: client_list [ :options :option… ]

                           Daemon_list@host格式 : 单个应用程序的二进制文件名,而非服务名,例如vsftpd 以逗号或空格分隔的应用程序文件名列表,

                   如 :sshd,vsftpd

                   ALL表示所有接受tcp_wrapper控制的服务程序 

                   主机有多个IP,可用@hostIP来实现控制 如:in.telnetd@192.168.0.254

                           客户端Client_list格式 : 以逗号或空格分隔的客户端列表

                  基于IP地址:192.168.10.1 192.168.1.

                  基于主机名:www.magedu.com .magedu.com 较少用

                  基于网络/掩码:192.168.0.0/255.255.255.0

                  基于net/prefixlen: 192.168.1.0/24(CentOS7)

                  基于网络组(NIS 域):@mynetwork

                  内置ACL:ALL,LOCAL,KNOWN,UNKNOWN, PARANOID

        ***EXCEPT用法: 示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1 76

                 示例:只允许192.168.1.0/24的主机访问sshd /etc/hosts.allow -----------(sshd: 192.168.1. /etc/hosts.deny sshd :ALL)

                 示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务 /etc/hosts.allow ---------(vsftpd,in.telnetd: 192.168.1. /etc/host.deny                                                                                vsftpd,in.telnetd: ALL)

 11--[PAM]

 

         PAM:Pluggable Authentication Modules

         认证库:文本文件,mysql,NIS,LDAP等  

         PAM 是关注如何为服务验证用户的 API,通过提供一些动 态链接库和一套统一的API,将系统提供的服务和该服务的 认证方式分开,使得系统管理员

  可以灵活地根据需要给不同   的服务配置不 同的认证方式而无需更改服务程序  一种认证框架,自身不做认证.

         提供了对所有服务进行认证的中央机制,适用于login,远 程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等 应用程序中。系统管理员通过

 PAM配置文件来制定不同应   用 程序的不同认证策略;应用程序开发者通过在服务程序中使 用PAM API(pam_xxxx( ))来实现对认证方法的调用;而

PAM服务模块的开发者则利用PAM SPI来编写模块(主要是     引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不 同的认证机制加入到系统中;

PAM接口库(libpam)则读取 配置文件,将应用程序和相应的PAM服务模块联系起来。

         PAM架构:

         

          PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文 件)→pam_*.so

          PAM认证首先要确定那一项服务,然后加载相应的PAM的配 置文件(位于/etc/pam.d下),最后调用认证文件(位于 /lib/security下)进行安全认证

          PAM认证过程: 1.使用者执行/usr/bin/passwd 程序,并输入密码

                                    2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的 PAM相关设定文件,这个设定文件一般是在/etc/pam.d/里 边的

           与程序同名的文件,即PAM会搜 寻/etc/pam.d/passed 这个设置文件

                                    3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提 供的相关模块来进行验证

                                    4.将验证结果回传给passwd这个程序,而passwd这个程序会 根据PAM回传的结果决定下一个动作(重新输入密码或者通 过验证)

          PAM相关文件 ----模块文件目录:/lib64/security/*.so

                                ---- 环境相关的设置:/etc/security/

            ---- 主配置文件:/etc/pam.conf,默认不存在

          ---- 为每种应用模块提供一个专用的配置文件: /etc/pam.d/APP_NAME (注意:如/etc/pam.d存在,/etc/pam.conf将失效)

   通用配置文件/etc/pam.conf格式 application      type       control        module-path arguments

          专用配置文件/etc/pam.d/* 格式 type control module-path arguments

                               说明: 服务名(application) telnet、login、ftp等,服务名字“OTHER”代表所有没 有在该文件中明确配置的其它服务

               模块类型(module-type)

            control PAM库该如何处理与该服务相关的PAM模块的成 功或失败情况

            module-path 用来指明本模块对应的程序文件的路径名

            Arguments 用来传递给该模块的参数

           模块类型(module-type)-----Auth 账号的认证和授权

                 -----Account 与账号管理相关的非认证类的功能,如:用来限 制/允许用户对某个服务的访问时间,当前有效的系统资源

                  (最多可以有多少个用户),限制用户的位置(例如:root用 户只能从控制台登录)

                 -----Password 用户修改密码时密码复杂度检查机制等功能

                 -----Session 用户获取到服务之前或使用服务完成之后需要进 行一些附加的操作,如:记录打开/关闭数据的信息,监视 目录等

                 -----type 表示因为缺失而不能加载的模块将不记录到系统日 志,对于那些不总是安装在系统上的模块有用

           Control: PAM库如何处理与该服务相关的PAM模块成功或失败情况

       两种方式实现: 简单和复杂

               简单方式实现:一个关健词实现

               required :一票否决,表示本模块必须返回成功才能通过 认证,但是如果该模块返回失败,失败结果也不会立即通 知用户,

                   当-type中的所有模块全部执行完毕 再将失败结果返回给应用程序。即为必要条件

                    requisite :一票否决,该模块必须返回成功才能通过认证, 但是一旦该模块返回失败,将不再执行同一type内的任何模 块,

                   而是直接将控制权返回给应用程序。是一个必要条件

               sufficient :一票通过,表明本模块返回成功则通过身份认 证的要求,不必再执行同一type内的其它模块,但如果本模 块

                    返回失败可忽略。即为充分条件

               optional :表明本模块是可选的,它的成功与否不会对身份 认证起关键作用,其返回值一般被忽略

               include: 调用其他的配置文件中定义的配置信息。

            module-path: 模块路径

           相对路径: /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so

           绝对路径: 模块通过读取配置文件完成用户对系统资源的使用控制 /etc/security/*.conf (注意:修改PAM配置文件将马上生效)

           建议:编辑pam规则时,保持至少打开一个root会话,以防止 root身份验证错误  Arguments 用来传递给该模块的参数

 

以上是关于加密和安全的主要内容,如果未能解决你的问题,请参考以下文章

安全和加密

Linux之加密和安全

Android安全加密:数字签名和数字证书

Android安全加密:对称加密

加密和安全相关

加密和安全