加密和安全

目录:

  • 安全机制
  • 安全算法
  • 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]] [[email protected]]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 [[email protected]]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

时间: 2024-10-10 19:25:48

加密和安全的相关文章

php7实现基于openssl的加密解密方法

还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $publicKeyFilePath = '/www/ceshi/rsa_public_key.pem'; extension_loaded('openssl') or die('php需要openssl扩展支持'); file_exists($publicKeyFilePath) or die('公钥的文

python实现网页登录时的rsa加密流程

对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录,需要模拟这个加密过程. 网上搜了下关于rsa加密的最简明的解释: rsa加密是非对称加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己

人工智能PK透明加密,数据安全保护谁能技高一筹

人工智能一直是全球的一大热点话题,从很久之前谷歌研发的人工智能机器人击败柯洁.李世石等众多围棋高手,到最近特斯拉CEO埃隆o马斯克投资的人工智能研究机构OpenAI研发的机器人击败了国外顶尖Dota 2玩家之一的Danil Ishutin.而重磅消息却是美国电商巨头亚马逊,已准备将人工智能技术用于商业服务中,计划将其用于云存储方面,用于保护用户数据的安全. 亚马逊的这一计划,主要是通过机器学习技术,自动识别.分类和保护用户保存在亚马逊云计算平台上的敏感数据.但引入人工智能技术之后,亚马逊的云存储

Java DES 加密和解密源码

Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互作用性. 算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法的概念,而不用去关心如何实现这些概念.实现的独立性和相互作用性通过密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一个或多个程序包.软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下. 该压缩包的特性: 使用标准的zip压缩格式(压缩算法没有深入探究) 压缩包中带有目录并且目录名称是中文 压缩时加了密码 因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包. 下面是解压的实现代码: 1 public class UnZip { 2 private final int BUFF_SIZE = 4096; 3 4 /* 5 获取ZIP文件中的文件名和目录名 6 */

关于数据传输中加密解密那点事儿(一)

随着互联网的兴起,越来越多的信息和资源要通过网络传输完成:然而在这些数据传输中总有一些"无关人员"做一些窃听.盗取.篡改等危害数据安全的行为,所以我们要对数据进行加密处理,以保证数据的安全传输: 所以有了一下几种加密方式: 一.对称加密: 这种算法简单来说就是 数据的发送方和接收方都必须要有同一种密钥(加密数据所用到的密钥),在数据的传输中 数据与密钥都通过加密的方式传送: 特性:在数据加密中,数据被分成固定大的块,逐个加密:加密和解密速度也快: 缺陷:因为加密和解密使用同一种密钥,所

如何有效的对PDF文件进行加密保护

PDF是办公中保存资料数据文件不可或缺的一类电子文件工具软件,它的优势在于清晰的位图显示形式和良好的阅读体验,所以很多合同报告.电子书.技术文档.设计图纸等都越来越倾向这种存储方式.和普通的电子文档一样,如Word.Excel,PDF文件也存在信息安全泄漏风险,因此加密保护也是必不可少的.下面就来分享下如何对PDF进行权限设置和PDF文件加密操作. PDF格式的官方编辑器Adobe acrobat 软件为我们提供的口令加密包含"打开文档的口令"和"限制文档编辑打印口令&quo

MD5加密和RSA加密

1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    ②.不同的输入得到的不同的结果(唯一性):    ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密:  MD5的用途:     1.防止被篡改:    1)比如发送一个电子文档,发送前,我先得到MD5的

AJAX+REA实现前后台数据交互的加密解密

AJAX+REA实现前后台数据交互的加密解密 1.创建js文件Encryption.js /**  * 加密解密  */ /** RSA加密用 生成key */ function bodyRSA(){ /** 1024位的key参数写130,2014位的key参数写260 */ setMaxDigits(130); /** ajax 调用后台方法,取回公钥 */ var keyR ;     $.ajax({      url: "/GHGL/Key/pk",//请求后台的url,本例

Android使用KeyStore对数据进行加密

谈到 Android 安全性话题,Android Developers 官方网站给出了许多很好的建议和讲解,涵盖了存储数据.权限.网络.处理凭据.输入验证.处理用户数据.加密等方方面面 密钥的保护以及网络传输安全 应该是移动应用安全最关键的内容.Android 提供大量用来保护数据的加密算法,例如 Cipher 类中提供了 AES 和 RSA 算法,再例如安全随机数生成器 SecureRandom 给 KeyGenerator 提供了更加可靠的初始化参数,避免离线攻击等等. 而如果需要存储密钥以