RAS数学原理

825 阅读7分钟

RAS数学原理

密码学

概念

  • 密码学是指研究信息加密,破解密码的技术科学。密码学的起源可追溯到2000年前。而当今的密码学是以数学为基础的。

发展历史

  • 密码学的历史大致可以追溯到两千年前,相传古罗马名将凯撒大帝为了防止敌方截获情报,用密码传送情报。凯撒的做法很简单,就是对二十几个罗马字母建立一张对应表。这样,如果不知道密码本,即使截获一段信息也看不懂。
  • 从凯撒大帝时代到上世纪70年代这段很长的时间里,密码学的发展非常的缓慢,因为设计者基本上靠经验。没有运用数学原理。

WeChat13b56cfebb351fd2249975beb7b9b3b4.png

外面的一圈是秘文, 中间的一圈是明文。 * 破解方式: * 拿到密码本 * 统计字母出现的频率

  • 在1976年以前,所有的加密方法都是同一种模式:加密、解密使用同一种算法。在交互数据的时候,彼此通信的双方就必须将规则告诉对方,否则没法解密。那么加密和解密的规则(简称密钥),它保护就显得尤其重要。传递密钥就成为了最大的隐患。这种加密方式被成为对称加密算法(symmetric encryption algorithm)
    • 对称加密密钥的保护非常重要
  • 1976年,两位美国计算机学家迪菲(W.Diffie)、赫尔曼( M.Hellman )提出了一种崭新构思,可以在不直接传递密钥的情况下,完成密钥交换。这被称为“迪菲赫尔曼密钥交换”算法。开创了密码学研究的新方向
    • 迪菲赫尔曼密钥交换目的是为了保护密钥
  • 1977年三位麻省理工学院的数学家 罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起设计了一种算法,可以实现非对称加密。这个算法用他们三个人的名字命名,叫做RSA算法

RSA数学原理 难点

离散数学问题

  • 思考题一:加密容易,破解很难数学运算?

    • 方案 取模运算 也叫时钟算数
    • 比如时钟是1到12, 共12格, 有一根绳子长13格, 绕着时钟转1圈,余出1个格子。如果绳子的长度是14格,绕着时钟转1圈,余出2个格子。 这就是取模运算早期的算法。
  • 质数 只有1和自己可以被整除

    1. 如果使用质数做模数,比如17;
    2. 再找一个比17小的数字,比如3
    3. 3的n次方模上17 就会出现下面这张表。会发现等号右边的结果都不一样,3的1到16次方的结果都会落到1到16
      WeChat792460227012395122d3310fefeb4021.png
    4. 使用python计算的结果
    >>> 3**1%17
    3
    >>> 3**2%17
    9
    >>> 3**3%17
    10
    >>> 3**4%17
    13
    >>> 3**5%17
    5
    >>> 3**6%17
    15
    >>> 3**7%17
    11
    >>> 3**8%17
    16
    >>> 3**9%17
    14
    >>> 3**10%17
    8
    >>> 3**11%17
    7
    >>> 3**12%17
    4
    >>> 3**13%17
    12
    >>> 3**14%17
    2
    >>> 3**15%17
    6
    >>> 3**16%17
    1
    >>> 3**17%17
    3
    >>> 
    
    
  • 将3称为17的原根

  • 3的n次方模以17,结果就会落到1到16之间, 但是知道结果,反推出n的值是比较麻烦的。比如结果是12,并且也知道算法,但是反推n的值.n会有多个值,12、29等,然后一个一个的去尝试

  • 那个一数字变大会加大反推的难度?17 质数变大会加大反推的难度。如果质数是长度是几百位的,想要反推回来几乎不可能。这就被称为离散对数问题

欧拉函数φ

互质关系

  • 如果两个正整数,除了1以外,没有其它公因数,我们就称这两个数是互质关系
    • 比如3和5 3和7 5和6

欧拉函数

  • 任意给定一个正整数n, 请问在小于等于n的正整数之中,有多少个与n构成互质关系?
    • 计算这个值的方式叫做欧拉函数,使用:Φ(n)表示 如: 计算8的欧拉函数,和8互质的 1、3、5、7 φ(8) = 4 计算7的欧拉函数,和7互质的 1、2、3、4、5、6、7 φ(7) = 6 计算56的欧拉函数 φ(56) = φ(8) * φ(7) = 4 * 6 = 24

欧拉函数特点

  • 一、当n是质数的时候,φ(n)=n-1。
  • 二、如果n可以分解成两个互质的整数之积,如n=A*B, 则φ(A*B)=φ(A)* φ(B)
  • 三、根据以上两点得到:如果N是两个质数P1 和 P2的乘积则 φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)

根据欧拉函数的特点,计算56的欧拉函数 φ(56) = φ(8) * φ(7) = 4 * 6 = 24 φ(35)= φ(5)* φ(7)= 4 * 6 = 24

欧拉定理

  • 如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。

16205712419385.png

费马小定理

  • 欧拉定理的特殊情况:如果两个正整数m和n互质,而且n为质数!那么φ(n)结果就是n-1。

16205713737163.png

公式转换

16205723182150.png

迪菲赫尔曼密钥交换

  • 服务端取一个随机数 3^15 mod 17 = 6 15就是随机数,15只有服务器知道
  • 将6传给客户端 三方可以窃取到6
  • 客户端用同样的算法 3^13 mod 17 = 12,取一个随机数 13
  • 将12发送给服务器 三方可以窃取到12
  • 客户端拿到服务端发送的6 6^13 mod 17 = 10
  • 服务端拿到客户端发送的12 12^15 mod 17 = 10
  • 客户端和服务端都会得到10 服务端和客户端想交换的数字是10

WeChat79c18d1fcd7fc3021d3348a6a2927e9d.png

原理

WeChat740184a5281364c321434c629c1f0b65.png

RSA的诞生

WeChat2e5c4df203f8b7b1d04f9940aafd4da8.png

  • m和n既要互质, 又要m是n的原根
  • 公钥 n和e一起是公钥
  • 私钥 n和d一起是私钥

RSA算法

WeChatd441d833468b5b753144ea09a5108634.png

RSA终端命令

  • 由于mac系统内置OpenSSL(开源密码库), 所以我们可以直接在终端使用命令来玩RSA。OpenSSL中RSA算法常用指令主要有三个

    命令含义
    genrsa生成并输入一个RSA私钥
    rsaatl使用RSA密钥进行加密、解密、签名和验证等运算
    rsa处理RSA密钥的格式转换等问题
  • 生成RSA私钥, 密钥的长度为1024bit

    openssl genrsa -out private.gem 1024
    

WeChatabcbe79678581f7d8bd4fc951c160aa8.png

  • 从私钥中提取公钥

    openssl rsa -in private.gem -pubout -out public.gem
    

WeChata45f921f1589ee777c78d72fb0a166a6.png

WeChate0b1fdbbca9983af538264a98340654f.png

WeChatad38819fc60756bd089abd37af5aa0fd.png

PS: 公钥比私钥小很多

  • 生成的文件如下

16211518618191.png

  • 将私钥转换成为明文

    // 转化为明文信息
    openssl rsa -in private.gem -text -out private.txt
    // 查看文本信息
    cat private.txt
    

    WeChat2f95b474e7b35ab0586505e530bff6e3.png

    WeChat6127bcb1ad74762f40f6ed7209a6e80e.png

  • 通过公钥加密数据, 私钥解密数据

    // 生成明文文件
    vi message.txt
    // 查看文件内容
    cat message.txt
    // 通过公钥加密数据
    openssl rsautl -encrypt -in message.txt -inkey public.gem -pubin -out enc.txt
    // 通过私钥解密数据
    openssl rsautl -decrypt -in enc.txt -inkey private.gem -out dec.txt
    

    WeChat5e4648ab872a1af6b09fb7d176092a2e.png

    WeChatae885c751f1866845ecfc0df5da08912.png

发现加密之后的文件会变大

  • 通过私钥加密数据, 公钥解密数据

    // 通过私钥加密数据 也叫签名
    openssl rsautl -sign -in message.txt -inkey private.gem -out enc.txt
    // 通过公钥解密数据 解密变成了签名验证
    openssl rsautl -verify -in enc.txt -inkey public.gem -pubin -out dec.txt
    

    PS: 私钥加密数据 也叫签名. 公钥解密数据, 解密变成了签名验证 PS: iOS 中使用的是p12和der,p12就是私钥

RSA代码演示 openssl

总结

  • 加密算法都是数学知识
  • 对称加密 又叫传统加密算法
  • RSA非对称加密 (现代加密算法)RSA是三个人的名字
    • 原根
    • 欧拉函数,欧拉定理(费马小定理)
    • 模反元素
    • m ^(e * d)mod n ≡ m
    • 迪菲赫尔曼密钥交换
  • RSA算法
    • RSA 拆解两个(大)质数的乘积很难,所以RSA相对安全
    • 加密:M ^ E % N = C
    • 解密: C ^ D % N = M
    • 密文: C 明文: M
    • 公钥: N 和 E
    • 私钥: N 和 D
    • 条件
      • N是由两个很大的质数(P1、P2)相乘得到,为了方便求出φ(N)
      • D 是 E (65537) 相对于φ(N)的模反元素
    • M < N

PS 什么是填充模式?