数据加密

前言

一般来说,目前的安全相关措施一共有两类,一种是加密,其次则是消息摘要。加密很容易理解,加解密数据以达到通信安全的目的。消息摘要则是根据原始数据计算相应编码,如果原始数据被篡改,重新计算时,编码会变化。

  • 加密,有对称加密和非对称加密两类,RSA则是非常常见和流行的一种数据加密方式
  • 消息摘要,常见的有MD5以及SHA-1等方式

在HTTPS原理文章中,介绍 HTTPS 原理时,可以看到,加密和消息摘要方式都用上了。

RSA

在介绍RSA之前,需要介绍一些数学知识。

互质关系:如果两个正整数,除了 1 以外没有其他公因子,就称这两个数是互质关系。比如 3 和 5,13 和 31 等

欧拉函数:求小于 N 的正整数中与 N 互质的数的数目。φ(N),如果 N 可以分解成两个互质的整数之积,N=pq,则 φ(N)=φ(p)φ(q)=(p−1)(q−1)

模反元素:如果两个正整数 a 和 n 互质,那么一定可以找到整数 b,使得 ab−1 被 n 整除:ab ≡ 1 (mod n)

欧拉定理:当 a,n 为两个互素的正整数时,则有 ≡ {1(modn)

RSA的安全性基于大数的因式分解难度,一般而言,RSA中的密钥长度为1024位,数太大了,目前已经的被破解的最大长度密钥是768位,所以说RSA是安全可靠的。它的原理最后分析,先看看过程。

(1)选择一对不同的、足够大的素数p,q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e,且1 (5)计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡e-1 mod f(n)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。

(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:

(8)解密过程为:

整个过程一共用到了以下几个数

  p    q    n    φ(n)    e    d

这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。

那么,有无可能在已知n和e的情况下,推导出d?

(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。

(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

(3)n=pq。只有将n因数分解,才能算出p和q。

而前文有提到,要将一个大整数进行因式分解,这是非常非常困难的一件事,所以RSA算法的安全性是有保障的。

最后,使用公钥加密,加密要用 (n,e)

≡ c (mod n)

而解密要用私钥(n,d)

≡ m (mod n)

消息摘要

消息摘要,其实非常得常见,如果MD5算法,在android中apk的签约中都会乃至的SHA算法等,都是消息摘要,它的特点是单向的,源数据通过算法得到编码,但无法通过编码反推源数据,同时源数据变化一点点都会导致编码变化。

所以消息摘要常常用在这种场景下:接收端收到信息以消息摘要,将信息解密之后,再计算它的消息摘要,如果和收到的消息摘要不一样,则可以判定收到的信息被它人篡改过。

apk签名中用到的SHA算法也是起到类似的作用,除非拥有原签名可以重新签名,否则破解的apk肯定会被识别的。

部分信息来源自:感谢分享
https://www.cnblogs.com/jiftle/p/7903762.html
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

你可能感兴趣的:(数据加密)