zoukankan      html  css  js  c++  java
  • 加密方法、数字签名、RSA 算法、ELgamal 算法

    (1.) 对称加密

    (Alice)(Bob) 发送信息,用同一个密钥进行解密

    对称加密的优点在于加密速度快,难以破解

    问题在于,(Alice, Bob)网络上传输密钥的过程不安全

    另一方面,若 (n party) 需要互相传输信息,若两两之间需要一个密钥,那么需要设计 (C_{n}^{2}) 个密钥;如果共享一个密钥,只要这个密钥被截获,大家的信息交流都不安全

    (2.) 非对称加密

    (Alice) 生成自己的公钥和私钥

    (Bob)(Alice) 发消息,利用 (Alice) 的公钥进行加密

    (Alice) 收到消息后用自己的私钥进行解密

    同理,(Bob) 自己也会生成公钥和私钥,以便于其他人和自己进行通信

    但是,非对称加密的缺陷在于加密大数据的速度慢

    (3.) 混合加密

    非对称加密 ( ightarrow) 加密密钥

    对称加密 ( ightarrow) 加密消息

    (4.) 数字签名

    信息传输过程中,敌手 (Eve) 也可以用 (Alice) 的公钥发消息,也就是说,(Alice) 无法确认信息来自 (Bob) 还是 (Eve)

    (4.1) 数字签名

    解决方法是 (Bob)(Alice) 发消息的同时附上自己的数字签名,(Alice) 只要验证数字签名是否来自 (Bob) 即可

    具体来讲,私钥为个人独有,所以(Bob) 用私钥加密自己的信息,附在密文后面,(Alice)(Bob) 的公钥验签,即私钥签名-公钥验签

    鉴于非对称加密耗时较久,考虑用哈希函数计算消息的摘要,对摘要进行签名

    验证时 (Alice) 只需要用 (Bob) 的公钥解密摘要,便可以验证消息确实来自 (Bob)

    (Alice)(Bob) 的私钥解密密文得到明文,再对明文哈希,判断明文哈希与摘要是否一致,便可以验证消息是否被篡改

    但是 (Eve) 可以冒充 (Bob)(Alice) 发送自己的公钥,也就是说,(Alice) 无法确认手里的公钥是否是 (Bob) 的公钥

    (4.2) 数字证书

    引入可信第三方 (CA(Certificate Authority))

    (Bob) 花钱向 (CA) 申请数字证书,(CA) 用自己的私钥对证书颁发机构、有效期、公钥、持有者等信息进行签名,并把这些信息封装成数字证书

    数字证书可以理解为 (Bob) 的公钥的数字签名

    (Alice) 安装 (CA) 的数字证书,用 (CA) 的公钥验签,便可以验证消息确实来自 (Bob),随后得到 (Bob) 的公钥

    (4.3) 盲签名

    盲签名 签名者不知道消息内容的前提下进行数字签名,有如下性质

    • 不可抵赖
    • 不可追踪

    考虑信息持有者 (B) 希望让 (C) 签名,但不希望 (C) 知晓消息内容,进行如下操作

    • (B) 盲化消息,发送给 (C)
    • (C) 签名,发送给 (B)
    • (B) 去盲化

    由于签名存在,所以不可抵赖;由于去盲化的消息与盲化消息不同,所以签名者不可追踪

    (5. RSA) 加密

    (RSA) 基于大整数分解问题

    (5.1) 生成公钥和私钥

    选取互质的大素数 (p, q),计算 (n = pq, phi(n) = (p - 1)cdot (q - 1))

    选取与 (phi(n)) 互质的整数 (e),计算 (e) 在模 (phi(n)) 意义下的逆元 (d),即 (edequiv 1 (mod phi(n)))

    (e, n) 作为公钥,(d, p, q) 作为私钥

    (5.2) 加密过程

    将消息 (M) 映射到 (mathbb{Z_{n}}),并且利用公钥 (e, n) 加密为 (Cequiv M^{e} (mod n))

    (5.3) 解密过程

    计算 (M = C^{d} mod n)

    (5.4) 正确性

    考虑条件

    [edequiv 1 (mod phi(n)) ]

    以及如下同余式

    [C^dequiv M^{ed} (mod n) ]

    ((M, n) = 1),由欧拉定理 (M^{phi(n)}equiv 1 (mod n)) 知道,(M^{ed}equiv M^{ed mod phi(n)}equiv M (mod n))

    ((M, n) eq 1),因为 (n) 只有两个素因子 (p, q),所以 (M) 形如 (sp, tq),其中 (s < q, t < p),这意味着 ((sp, q) = 1, (tq, p) = 1),不妨设 (M = sp)

    通过验证

    [egin{aligned} M^{ed} & equiv M (mod p)\ M^{ed} & equiv M (mod q) end{aligned} ]

    可以根据中国剩余定理得到

    [M^{ed}equiv M (mod n) ]

    事实上,根据费马小定理,以及 (M = sp) 的形式

    [egin{aligned} M^{ed} & equiv (sp)cdot (sp)^{k(p - 1)(q - 1)}equiv M (mod q)\ M^{ed} & equiv 0equiv M (mod p) end{aligned} ]

    所以

    [M^{ed}equiv M (mod n) ]

    同理可证 (M = tq) 的形式

    所以,(RSA) 的正确性得到证明

    (6. ElGamal) 加密

    (ElGamal) 基于循环群上的离散对数问题

    (6.1) 密钥生成

    (Alice) 选取生成元 (g),生成一个 (q) 阶循环群 (G)

    (Alice)(left{1, 2,.., q - 1 ight}) 中随机选择一个 (x)

    计算 (h = g^x)

    选择 (h, G, q, g) 为公钥,(x) 为私钥

    (6.2) 加密

    (Bob)(left{1, 2,.., q - 1 ight})随机选择一个 (y),计算 (c_{1} = g^{y})

    (Bob) 计算共享秘密 (s = h^y)

    (Bob) 将消息 (m) 映射到 (G) 上元素 (m'),计算 (c_{2} = m'cdot s)

    (Bob)((c_{1}, c_{2}) = (g^y, m'cdot (g^{x})^{y})) 发送给 (Alice)

    (6.3) 解密

    (Alice) 利用密钥 (x) 计算共享秘密 (s = c_{1}^{x} = (g^{y})^x),以及 (s^{-1} = (g^{y})^{-x})

    进而计算出明文消息 (m' = s^{-1}cdot m'cdot (g^{x})^{y} = (g^{y})^{-x}cdot m'cdot (g^{x})^{y})

    (6.4) 特性

    非确定加密,加密的密文取决于随机数 (y)

  • 相关阅读:
    Python环境管理(虚拟环境)/包管理工具
    Java面试题集锦
    python跟踪脚本运行过程(类似bash shell -x)
    【ClickHouse问题】更新表字段类型为Nullable(Int32)的列值,最终结果都是固定一个值:93147008???
    【ClickHouse】0:clickhouse学习4之表相关操作
    【ClickHouse】0:clickhouse学习3之时间日期函数
    【ClickHouse】0:clickhouse学习2之数据类型
    【ClickHouse】0:clickhouse学习1之数据引擎(数据库引擎,表引擎)
    【ClickHouse】7:clickhouse多实例安装
    【ClickHouse】6:clickhouse集群高可用
  • 原文地址:https://www.cnblogs.com/ChenyangXu/p/14239971.html
Copyright © 2011-2022 走看看