现代密码学一些基础

现代密码学一些基础

bg 这篇属于积累,可能会涉及一些密码学基础和密码学相关的数学基础

位运算

这个更是密码学基础中的基础了

  • 与运算
规则:两位都为1,结果才为1
0 & 0 = 0
0 & 1 = 0  
1 & 0 = 0
1 & 1 = 1
  • 或运算
规则:有一位为1,结果就为1
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
  • 异或运算
规则:两位不同为1,相同为0
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1  
1 ^ 1 = 0
  • 取反运算
规则:位取反
~0 = 1
~1 = 0
  • 左移运算
  1. 普通左移
规则:二进制位向左移动,低位补0,高位丢弃
示例(8位):10101010 << 2 => 10101000
          ↑↑丢弃      ↑↑补0
  1. 循环左移
规则:二进制位向左移动,高位移出的位依次补充到低位
示例(8位):10001001 <<< 2 => 00100110
           ↑↑移出放到右边→→→→→↑↑
  • 右移运算
  1. 逻辑右移
规则:二进制位向右移动,高位补0,低位丢弃
示例:10101010 >> 2 => 00101010
        ↑↑补0      ↑↑丢弃
  1. 算术右移
规则:二进制位向右移动,高位补符号位,低位丢弃
示例(有符号):10101010 >> 2 => 11101010
              ↑↑补符号位
  1. 循环右移
规则:二进制位向右移动,低位移出的位依次补充到高位
示例:10001001 >>> 2 => 01100010
       ←←←←←↑↑移出放到左边↑↑

模运算 (Modular Arithmetic)

欧几里得算法

gcd(a,b)
if a > b:
    a / b % x
    b / x % y
    if y == 0:
        return x
    else
        x / y % z
        ....

gcd(a, b):
    while b ≠ 0:
        r = a mod b
        a = b
        b = r
    return a

拓展欧几里得

函数 gcd_extended(a, b):
    输入:两个整数 a, b
    输出:三元组 (gcd, x, y),满足 a*x + b*y = gcd
    
    步骤:
    1. 如果 b == 0:
        - 此时 gcd(a, 0) = a
        - 因为 a*1 + 0*0 = a,所以返回 (a, 1, 0)
        
    2. 否则(b ≠ 0):
        a. 递归调用:gcd, x1, y1 = gcd_extended(b, a % b)
           - 这里我们计算更小规模的 gcd(b, a % b)
           - 并得到对应的系数 x1, y1,满足:b*x1 + (a % b)*y1 = gcd
           
        b. 计算当前层的系数 x 和 y:
           - x = y1
           - y = x1 - (a // b) * y1
           
        c. 返回 (gcd, x, y)

群是一个代数结构,包含一个集合G和一个二元运算,如果满足一下定理那么这个就是一个群

在G中任意取出元素a,b指定某个运算,得到结果依旧属于G 运算符号代指 => ⋅

  1. 封闭性
    对于任意a,b∈G,有a⋅b∈G
  2. 结合律
    当a,b,c∈G,并且(a⋅b)⋅c = a⋅(b⋅c)
  3. 单位元存在
    存在e∈G,使得对所有a∈G,有e⋅a = a ⋅ e = e
  4. 逆元存在
    对任意a∈G,存在b∈G,使得a⋅b=b⋅a=e,称a为b的逆元,记作a^-1

阿贝尔群

在群的基础上加了

  • 交换律
    对任意a,b∈G,有a⋅b = b⋅a