密码协议学习笔记(1):密码协议引论与密码学基础

发布时间 2023-06-27 21:43:00作者: Isakovsky

本博客主要参考书目为邱卫东的《密码协议基础》,本着知识共享的目的,博主自制了扫描版,下载地址

基本定义:

博主注:可信第三方(Trusted Third Party,TTP)

协议参与者诚实程度:

诚实参与者:

完全按照协议要求参与协议的执行.

半诚实参与者/被动攻击者/窃听者:

按照协议要求参与协议的执行,或者不参与协议(反正就是不提供非法输入),但会通过窃听方式获取自己不应知道的内容.

恶意攻击者:

拥有一个或多个伪装成参与者的"马甲",不仅窃听自己不应知道的内容,还会操控"马甲"提供非法输入以破坏协议的执行.

对于攻击者有更细致的分类:

静态攻击者:

在协议执行前,买通部分参与者作为自己的"马甲",协议开始后就不改变了.

动态攻击者:

协议执行过程中,通过协议的执行情况来决定买通哪些参与者作为"马甲".

移动攻击者:

比动态攻击者更强,被买通的"马甲"可随时转化为诚实参与者,诚实参与者也随时可能被买通变为它的"马甲".

攻击者能力:

无限计算能力:

在此类攻击下能保证安全的协议被称为信息论安全.

概念多项式计算能力(Probabilistic Polynomial Time,PPT):

在此类攻击下能保证安全的协议被称为密码学安全.

信道安全程度分类:

安全信道(secure channel):

诚实参与者之间的通信不会被窃听也不会被篡改.

非安全信道道(insecure channel)/认证的信道(authenticated channel):

诚实参与者之间的通信可能被窃听,但不会被篡改.

未认证的信道(unauthenticated channel):

完全被攻击者控制,通信会被窃听,也会被篡改.

博主注:这几个名字并不直观而且感觉怪怪的,在之后的表述中,博主会根据习惯将后两种信道称为可窃听信道可篡改信道.

数学基础:

抽象代数:

一个算符的代数结构:

幺半群:

数的集合和一个算符构成的代数结构$(G,+)$,且满足

  • 封闭性
  • 结合律
  • 存在单位元

群:

满足如下条件的代数结构$(G,+)$:

  • 封闭性
  • 结合律
  • 存在单位元
  • 对于每个元素均存在逆元

交换群/阿贝尔群:

满足如下条件的代数结构$(G,+)$.

  • 封闭性
  • 结合律
  • 存在单位元
  • 对于每个元素均存在逆元
  • 交换律

两个算符的代数结构:

环:

数的集合和两个算符构成的代数结构$(G,+,\cdot)$,且

  • $(G,+)$是一个交换群
  • $(G,\cdot)$是一个幺半群
  • $\cdot$对$+$满足分配律

在环中,加法的单位元记为$0$,也称零元,乘法的单位元记为$e$或$1$

要求$(G,\cdot)$是幺半群而非群的理由是,$0$元素无法存在对$\cdot$的逆元

交换环:

数的集合和两个算符构成的代数结构$(G,+,\cdot)$,且

  • $(G,+)$是一个交换群
  • $(G,\cdot)$是一个满足交换律的幺半群
  • $\cdot$对$+$满足分配律

域:

数的集合和两个算符构成的代数结构$(G,+,\cdot)$,且

  • $(G,+)$是一个交换群
  • $(G,\cdot)$是一个满足交换律的幺半群
  • $\cdot$对$+$满足分配律
  • $R \backslash \{0\}$对$\cdot$存在逆元

大佬博客上的一张图能直观说明这几个概念之间的联系:

图源:http://sparkandshine.net/algebraic-structure-primer-group-ring-field-vector-space/

其他概念:

阶:

群,环,域等代数结构中,$R$的大小$|R|$.

循环群,循环子群,生成元:

设$(G,\cdot)$是群(一般讨论生成元时指的都是乘法群),$a\in G$,记 $(a)=\{a^i| i \in Z\}$,可以证明,$((a),\cdot)$为$(G,\cdot)$的子群,称$(a)$为由$a$生成的循环子群,并称$a$为该循环子群的生成元.

设$(G,\cdot)$是群,$a\in G$,若$a^n=e$,则对于那个最小的$n$,称$a$的为$n$.

可以证明,生成元的阶等于该生成元生成的循环子群的阶.

若群$(G,\cdot)$中存在元素$a\in G$,其生成的循环子群$(a)$就是$G$本身,那么称这个群为循环群,$a$为该群的生成元.

可以证明,阶数相同的所有循环群相互之间均同构.

数论:

欧拉定理:

欧拉函数:

记为$\phi(n)$,是$[1,n-1]$之间与$n$的最大公约数为$1$的数的个数.

可以证明,若$n=a_1^{x_1}\cdot a_2^{x_2} \cdots $,其中$a_1,a_2,\cdots$为$n$的质因数,那么$\phi(n)=(a_1-1)\cdot a_1^{x_1-1} \cdot (a_2-1)\cdot a_2^{x_2-1} \cdos$

例如,$100=2^2\cdot 5^2$,那么$\phi(100)=(2-1) \cdot 2^{2-1} \cdot (5-1) \cdot 5^{2-1}=40$,实际上,$[1,99]$中与$100$最大公约数为$1$的数有$1,3,7,9,11,13,17,19,21,23,27,29,31,33,37,39,41,43,47,49,51,53,57,59,61,63,67,69,71,73,77,79,81,83,87,89,91,93,97,99$,共计$40$个.

欧拉定理:

若$a,n$互质,则$a^{\phi(n)}=1 \mod n$

费马小定理:

首先不难看出,若$n$为质数,则$\phi(n)=n-1$

费马小定理本质上是欧拉定理的特殊形式,其形式为,若$n$为质数,那么任意$a\in[1,n-1]$,$a^{n-1}=1 \mod 1$,因此可以记$a^{n-2}=a^{-1} \mod n$,结合快速幂算法,这是一个计算模素数域的乘法逆元的简便方法.

原根:

阶:

回到欧拉定理,若$a,n$互质,则$a^{\phi(n)}=1 \mod n$,可将$\phi(n)$看作一个"循环节",但这个循环节并非最小循环节,例如,考虑$a=2,n=7$的情况,$\phi(7)=6$,固然有$2^6=1 \mod 7$,但实际上,$2^3=1 \mod 7$,$3$才是$2$在模$7$下的"最小循环节",称$2$在模$7$意义下的为$3$.写作$\mathrm{ord}_7(2)=3$.

原根:

若某数$a$模$n$的阶恰好有$\mathrm{ord}_n(a)=\phi(n)$,那么称$a$是$n$的一个原根.

有些数不存在原根,如$8$,$\phi(8)=4$,但$1,2,3,4,5,6,7$模$8$的阶均不为$4$.

原根存在的性质:

正整数有原根的充要条件为:它能表示为下列形式之一:$2,4,p^n,2p^n$其中$p$为奇素数.

证明略.

密码学基础:

博主注:密码学中,"密码(cipher)"与"口令(password)"是两个应当区分的概念,前者的例子如c4d038b4bed09fdb1471ef51ec3a32cd,xNA4tL7Qn9sUce9R7DoyzQ==,后者的例子如abc123,admin.

对称密码体系:

加密与解密使用同一个密钥的密码体系.

非对称密码/公钥密码体系:

加密与解密使用不同密钥的密码体系,一般分为公钥与私钥,私钥可以计算出公钥,反之则在计算复杂度理论上不可行,公钥可以在信道上进行传输,私钥则只保存在本地.在常见的场景下,公钥用于加密,私钥用于解密,私钥用于签名,公钥用于验证签名.

散列函数/哈希函数:

将任意长的字符串信息"摘要"为定长的16进制串的函数,并且很难从函数输出反推输入.