Openssl基础

OpenSSL:

NIST:

  1. 保密性:
    1. 数据保密性
    2. 隐私性
  2. 完整性:
    1. 数据完整性
    2. 系统完整性
  3. 可用性

安全攻击:

  1. 被动攻击:窃听
  2. 主动攻击:伪装、重放、消息篡改、拒绝服务

安全机制:

  1. 加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证

安全服务:

  1. 认证
  2. 访问控制
  3. 数据保密性
    1. 连接保密性
    2. 无连接保密性
    3. 选择域保密性
    4. 流量保密性
  4. 数据完整性
  5. 不可否认性

密码算法和协议:

  1. 对称加密
  2. 公钥加密
  3. 单向加密
  4. 认证协议

Linux系统:OpenSSL, gpg(pgp)

加密算法和协议:

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

  1. 算法:
    1. DES:Data     Standard
    2. 3DES:
    3. AES:Advanced (128bits, 192bits, 258, 384, 512bits)
    4. Blowfish
    5. Twofish
    6. IDEA
    7. RC6
    8. CAST5
  1. 特性:
    1. 加密、解密使用同一个密钥;
    2. 将原始数据分割成固定大小的块,逐个进行加密;
  2. 缺陷:
    1. 密钥过多;
    2. 密钥分发;

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

  1. 公钥:公开给所有人;pubkey私钥:自己留存,必须保证其私密性;secret key
  2. 特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
  3. 用法:
    1. 数字签名:主要在于让接收方确认发送方身份;
    2. 密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
    3. 数据加密:
  4. 算法:RSA, DSA, ELGamal rsa即可以实现数据加密 也是能用于签名dsa只能用于签名,而不能用于数据加密]

单向加密:只能加密,不能解密;提取数据指纹;

  1. 特性:定长输出、雪崩效应;
  2. 算法:
    1. md5: 128bits
    2. sha1: 160bits
    3. sha224
    4. sha256
    5. sha384
    6. sha512
  1. 功能:
    1. 完整性;

密钥交换:IKE

  1. 公钥加密:
  2. DH (Deffie-Hellman)
    1. A: p, g1
  3. B:
  1. B:p, g,随机生成P,g两个大素数
  2. B计算p^x%g把结果与p、g发给A,而x自己保存
  3. A收到后计算 p^y%g 把结果与p、g发给B
  4. A计算p^y%g^x,B计算p^x%g^y
  5. p^x%g^y = p^xy%g 为数据加密的密钥。

A: x

p^x%g

            p^y%g^x = p^xy%g

B: y

p^y%g

p^x%g^y = p^xy%g

一次完整的过程

如何保证数据安全

  • A
    • 用单向算法计算出发送数据的数据指纹(md5、sha等)
    • 用随机的密钥(aes、eds、3des)加密数据及数据指纹
    • 用对方的公钥加密随机密钥(rsa)
    • 发送给B
  • B
    • 用自己的私钥解密出对方用自己的公钥加密的密钥(aes密钥),如果成功解密说明对方公钥正确
    • 用aes密钥解密数据以及对方数据指纹
    • 用同样的单向算法计算出数据指纹,并核对对方发来的数据指纹是否一致。
    • 完成

如何保证密钥安全

  • A
    • A收到B的公钥后,首先通过电脑内置的对应证书颁发机构ca的公钥解密证书中ca的数据指纹,如果解密成功说明数据指纹正确
    • 检查证书中ip地址是否与访问的ip相同
    • 用同样的算法计算出数据指纹,与解密的数据指纹核对数据完整性
    • 查看ca的证书的吊销列表是否有这个证书
    • 信任证书。

PKI: Public Key Infrastructure

签证机构:CA

注册机构:RA regist

证书吊销列表:CRL

证书存取库

X.509:定义了证书的结构以及认证协议标准

版本号:v1、v2、v3 目前默认v3

序列号:唯一的id,相当于证书的相当于身份证号

签名算法ID:用同样的单向算法解密需要说明

发行者名称:证书签发机构

有效期限:

主体名称:证书拥有者名称主体名称(key1)

主体公钥:主体公钥(key2)

发行者惟一标识:ca的标识不是公钥

主体的惟一标识:证书的唯一标识不是公钥

扩展

发行者签名:ca签名认可ca

  • Windos在系统里就加入了可信的ca 的公钥
  • 用户收到证书后用户系统内置的公钥解密收到的证书的签名。如果能够解密签名(加密了数据的特征码)说明公钥是正确的
  • 用同样的单向算法算出特征码,如果核对一致,验证了证书的数据的是完整性。

SSLTLS

SSL: Secure Socket Layer

TLS: Transport Layer Security

1995:SSL 2.0, Netscape

1996: SSL 3.0

1999: TLS 1.0

2006: TLS 1.1 RFC 4346

2008:TLS 1.2

2015: TLS 1.3

分层设计:

  1. 最低层:基础算法原语的实现,aes, rsa, md5
  2. 向上一层:各种算法的实现
  3. 再向上一层:组合算法实现的半成品
  4. 用各种组件拼装而成的种种成品密码学协议/软件:tls, ssh,

OpenSSL:开源项目

三个组件:

  1. openssl: 多用途的命令行工具;
  2. libcrypto: 公共加密库;
  3. libssl: 库,实现了ssl及tls;

ssl建立会话的过程

  • 三次握手建立tcp连接
  • 请求网站服务器数字证书
  • 跟据电脑本地存储的数字证书公钥,解密网站服务器,ca的签名如果成功解密说明签名为真
  • 核对ip地址与访问的ip地址是否吻合。
  • 用相同的算法md5 sha1等单向计算出数据指纹,与解密后的数据指纹进行核对,如果相同说明数据未被修改过
  • 查看证书是否被吊销ca吊销列表
  • 信任证书

四步验证证书:

  1. 检查证书的ip地址域名是否与访问的主机地址一致
  2. 用ca的公钥解密证书的数字指纹验证证书是否为ca签发的
  3. 用相同的单向加密算法计算出指纹,检查证书是否被篡改过
  4. 检查证书有效期,以及是否在注销列表中

openssl命令:

  1. openssl version:程序版本号

    [root@repo Packages]# openssl version

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

[root@repo Packages]# openssl kl

openssl:Error: ‘kl’ is an invalid command.

随意敲错或者help进入:

标准命令:enc, ca, req, …

  1. 对称加密:
    1. 工具:openssl enc, gpg
    2. 算法:3des, aes, blowfish, twofish
  1. enc命令:
    1. [root@repo Packages]# whatis enc

  1. 加密:~]# openssl enc -e -des3 -a -salt -in fstab -out

[root@repo ~]# openssl enc -e -des3 -a -salt -in fstab -out fstaba.ciphertext

enc:标准命令

-e:加密算法

-a:基于文本编码64位

-salt:加入杂质

-in:需要加密的文件

-out:加密后的文件

des-ede3-cbc 默认调用此算法加密

  1. 解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

-des3 可以换的哈

openssl ?里面显示的算法都可以调用。

  1. 单向加密:
    1. 工具:md5sum, sha1sum, sha224sum, sha256sum,…, openssl dgst
    2. dgst命令:

[root@repo ~]# md5sum fstab

[root@repo ~]# openssl dgst -md5 fstab

命令不同,但是同种算法结果一致。

openssl dgst -md5 /PATH/TO/SOMEFILE

-hex . 十六进制默认就是

[root@repo ~]# openssl dgst -md5 -hex fstab

MD5(fstab)= f56bae789e1b9256d2fb2c7b4f6e4683

  1. MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在

网络通信中保证所传输的数据的完整性;

  1. 机制:
    1. CBC-MAC
    2. HMAC:使用md5或sha1算法
  1. 生成用户密码:
    1. passwd命令
      1. openssl passwd -1 -salt SALT

    -1 使用md5加密

[root@repo ~]# openssl passwd -1 -salt 12345678

[root@repo ~]# openssl passwd -1 -salt 12345679

改动一位雪崩效应。

  1. 生成随机数:
    1. openssl rand -base64|-hex NUM

NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;

[root@repo ~]# openssl rand -hex 4

[root@repo ~]# openssl rand -base64 4

取出==前面就是随机数

4代表四个字节,一个字节8位,也就是8个16进制数来表示。

  1. 公钥加密:
    1. 加密:
      1. 算法:RSA, ELGamal(dsa不支持加密只支持签名)
      2. 工具:gpg, openssl rsautl
    2. 数字签名:
      1. 算法:RSA, DSA, ELGamal
  1. 密钥交换:
    1. 算法:
      1. dh
      2. DSA: Digital Signature Algorithm
      3. DSS:Digital Signature Standard
      4. RSA:
    2. 使用工具
      1. Gendh
      2. Gendsa
      3. Genrsa

一般都使用rsa,dsa一般不推荐,功能薄弱。

  1. 生成密钥对儿:
    1. 生成私钥

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

    # (umask 077; openssl genrsa -out key.pri 2048)

    2048 是2048位的密钥

[root@repo ~]# openssl genrsa -out rsajia.private 2048

  1. 通过私钥提取出公钥:

# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout

[root@repo ~]# openssl rsa -in rsajia.private -pubout

  1. Genrsa依赖于随机数生成器

    随机数生成器:

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

你可能感兴趣的:(Openssl基础)