工作原理:

  • ![[Pasted image 20240514131353.png]]
  • 所有AES的操作都基于FF
  • 分组长度:128bits
  • 密钥长度:128.192.256bits
  • 圈数: 10.12 .14
  • ![[Pasted image 20240514133026.png]]
    • R1:![[Pasted image 20240514133101.png]]
    • R10:![[Pasted image 20240514133204.png]]

圈函数

  • 字节代替变换(唯一的非线性变换)——S盒
    • ==S(a)=f(a的-1次方)==
    • ![[Pasted image 20240514133622.png]]
    • 将字节矩阵中的每个字节利用同一个S盒变换成另一个字节,变换后的位置不变
    • 有两个可逆变换而成
      • ![[Pasted image 20240514134837.png]]
      • ![[Pasted image 20240514134211.png]]
    • 面向字节的运算
      • ![[Pasted image 20240514134247.png]]
      • ![[Pasted image 20240514134424.png]]
        • ![[Pasted image 20240514134501.png]]
  • 行移位变换
    • ![[Pasted image 20240514135738.png]]
  • 列混合变换
    • ![[Pasted image 20240514135945.png]]
  • 圈密钥加
    • ![[Pasted image 20240514140026.png]]
  • 密钥生成算法
    • ![[Pasted image 20240514140306.png]]
    • ![[Pasted image 20240514140345.png]]
    • ![[Pasted image 20240514140711.png]]
    • ![[Pasted image 20240514140737.png]]
      • rotebyte 循环左移1个字节
      • Bytesub 字节代换

脱密算法

![[Pasted image 20240514140835.png]]

FF-finite fields(有限域)

  • 只存在p的m次方的有限域(p为质数,m为整数)
    • 例:
      • 11,256,128
        • 12就没有有限域
    • m为1时为素域
    • m>1时为扩展域

素域

  • 元素
    • {0,1,p-1}
  • 运算
    • 加法,减法,乘法
      ![[Pasted image 20240518155517.png]]

扩展域(2的m次方)

  • 元素
    • ![[Pasted image 20240518160616.png]]
  • 运算
    • 加法,减法
      • ![[Pasted image 20240518161527.png]]
    • 乘法:乘完后和加加减做相同运算
      • ![[Pasted image 20240518161752.png]]
      • 除法
        • ![[Pasted image 20240518162751.png]]

AES的结构

历史:

  • 1974年被IBM提出
  • 1977-1998,被美国政府当做最好的密码
  • 如今是不安全的(秘钥太短了)
    • 但是3次DES是安全的
  • ![[Pasted image 20240504131823.png]]
    ![[Pasted image 20240511161048.png]]

Q:我们如何建立这样的密码块

16个循环
![[Pasted image 20240504132812.png]]

feistel 网络

  • ![[Pasted image 20240511153113.png]]
    IP置换和逆IP置换
  • IP置换和密码学无关,只是技术问题
  • ![[Pasted image 20240504140344.png]]

f函数

  • ![[Pasted image 20240504141241.png]]
    • E盒(expansion——扩展)
      • ![[Pasted image 20240504141952.png]]
        • 有16个元素映射了两次
    • S盒
      • ![[Pasted image 20240504143035.png]]
      • ![[Pasted image 20240504143119.png]]
        • ![[Pasted image 20240504143325.png]]
        • 二进制转十进制然后查表得数,中间四位选列,前后两位选行

P排序

秘钥表

  • 有影响的秘钥为64-8=56,有八个无效
    • 没原因
  • ![[Pasted image 20240511155728.png]]

decrytion(解密)

  • 加密和解密一样
    • 只是反过来
    • ![[Pasted image 20240511163358.png]]
    • ![[Pasted image 20240511163409.png]]

安全

  • 密码分析攻击
    • 选择明文攻击
      • 需要2的47次方的明密文
        • 远小于原来的2的56次方,但也几乎不可能
    • 流密码攻击
      • 2的43次方
  • 蛮力攻击

例:

  • 手机信号加密
  • ![[Pasted image 20240427161800.png]]
    问:为什么加密和解密是一种方法
    ![[Pasted image 20240427162415.png]]
    mod2和xor(异或)是一样的操作
    ![[Pasted image 20240427163444.png]]
    实例:ASCII“A”![[Pasted image 20240427164203.png]]
    Q:如何得到si(流密码秘钥):
  • 随机数

随机数生成器(Random Number Generators)-RNG

  • True Random Number Generators(TRNG):随机的物理过程.etc
    • 掷硬币
    • 彩票
    • 热噪音
    • 鼠标点击节奏
  • pseudo(伪) Random Number Generators(PRNG):确定的
    • C语言的rand函数
  • cryptogiaphycally secure PRANG(CPRNG):密码安全的PRNG
    • ==不可预测的==
      • 无法被现代计算机所计算出来

one time pad(OTP):一次性密码

  • 流密码秘钥来自TRNG
  • 每一个秘钥只使用一次
  • 绝对安全
  • 但是使用起来极其复杂,秘钥保存,生成,使用完的销毁

linear congruential geneator(LCG):

  • 使用一个由PRNG生成的流密码秘钥
  • ![[Pasted image 20240427171851.png]]
  • 熵的概念

    • ![[Pasted image 20240427115134.png]]
      • 因此熵有概率分布p唯一确定,熵就是一个概率分布所包含的未知信息量
      • ![[Pasted image 20240427115611.png]]
  • 理论上的保密性
    • 唯密文攻击平均所能获得的最大信息量
    • ![[Pasted image 20240427120250.png]]
      • H(M|C)=0一样的
      • 也就是明文和密文的关联性为0

密码体制的必要条件

![[Pasted image 20240427120631.png]]

密码体制的充分条件![[Pasted image 20240427121350.png]]

![[Pasted image 20240427121929.png]]
![[Pasted image 20240427121947.png]]

LFSR(线性反馈移位寄存器)

  • 最小元素:Flip-flop(触发器)
    • 存储1bit
    • ![[Pasted image 20240501135740.png]]
      • clk:时钟脉冲
      • o:output
      • I:输入序列
  • ![[Pasted image 20240501143717.png]]
  • 数学描述
    • ![[Pasted image 20240501143215.png]]

属性(general LFSR)

  • ![[Pasted image 20240501150000.png]]
  • 反馈配置是p值的集合
  • 最大周期=2的n次方-1
    - 少了一个全零序列
    - ![[Pasted image 20240501151719.png]]![[Pasted image 20240501152403.png]]

袭击

![[Pasted image 20240501154451.png]]

![[Pasted image 20240425172457.png]]敌手攻击方法

  • 被动攻击(窃听):获取但不改变传输信息
  • 主动攻击:窃听且改变信息
    • 目的为了伪造和欺骗

密码学的基本目标

  • 信息的机密性保证(对抗窃听的技术):
    • 加密技术
      • 加密算法
  • 信息的真实性认证(对抗主动攻击的方法):
    • 认证技术
      • 认证算法和配套的协议
      • 在信源增添认证码,在信宿进行认证
  • 承认的不可否认性问题(对抗抵赖的技术):
    • 在信源增添认证码,在信宿进行认证
      • 数字签名和仲裁机构
      • 要求添加认证码后使所有人都能够进行认证

加密算法的基本概念

![[Pasted image 20240425174343.png]]

  • 把密钥分配给双方的过程叫做密钥分配
  • Kerckhoffs假设:
    • 敌人知道除密钥之外的所有知识
      • 加密算法
      • 脱密算法
      • 明文空间——明文的取值范围
      • 密文空间——
      • 密钥空间——参数的取值范围

攻击方法的分类

  • 唯密文攻击
  • 唯明文攻击
  • 选择明文(密文)攻击
    • 在已知明文的基础上,选择明文(密文)会得到相对应的密文(明文)

破译方法

  • 对密钥的穷举攻击
    • 在可能密钥小于2的64次方的密码算法不能对抗穷举算法
      • 64个二进制的数所能表示的总是
    • 为2的128次方的可能密钥的算法能对抗穷举攻击![[Pasted image 20240425175247.png]]

密码算法的三个编码技术

  • 信息加密的一般流程![[Pasted image 20240425175512.png]]
  • 代替密码
  • 移位密码
  • 加减密码——一种特殊的代替密码
    • 将明文逐字符或连字符相加相减
      单表代替:(m+a)mod26
      多表代替:(m+k)mod26

一次一密

![[Pasted image 20240425175954.png]]

  • 拉丁方变换
    • 拉丁方表的各列各行互不相同![[Pasted image 20240425180052.png]]
    • 密钥相同,不同的明文加密为不同的密文
    • 明文相同,不同的密钥加密为不同的密文
  • 缺点:
    • 密钥序列不能周期重复
    • 必须与明文序列等长
    • 脱密前分配完毕
    • 大量通信不实用
  • 解决:
    • 用伪随机
  • 序列密码![[Pasted image 20240425180419.png]]
  • 仿射密码
    • ![[Pasted image 20240425180631.png]]
    • 已知明文条件,能解方程组,求出A
  • 美链是一个部署在以太坊上的智能合约,有自己的代币
    - 没有自己的区块链,转账都是通过调用智能合约实现的
    - 货币发行标准,ERC20![[Pasted image 20240511172326.png]]

DAO:

(Decemtraliazed Autonomous Organization)-去中心化的自治组织

The DAO- 去中心化的风投组织

  • 只存在了三个月
  • 取钱方式
    • spilt DAO
      • 在投资意见产生分歧时,拆分得到child DAO(子资金),然后把个人资金转成ETH传到子资金中
      • 代码实例:![[Pasted image 20240501120248.png]]
        • 应该先把账户清零,在转账,不然会被进行重入攻击
          • 弥补措施(28天锁定期)
            • 在出问题的前一个区块进行分叉(错误)
              • ![[Pasted image 20240501121145.png]]
              • 锁定黑客的账户
                • 软件升级:凡是和The DAO账户相关的交易都不能进行交易(软分叉)
                  - 要收取gas fee,但并没有(失败原因)

                • 软件升级:把The DAO上的所有资金转到一个新的智能合约(将代币转换成ETH)—硬分叉
                  • 投票决定
                    - ETH和ETC

比特币中的共识机制

  • 只有在最长合法链上的出块奖励是被承认合法的
  • BTC中30算力的mining pool一般获得超过30的出块奖励
    • 因为更有可能成为最长合法链,而个体节点的链可能无效,这个可能带来centrelization bias(中心化带来的不成比例的优势)

ETH中的共识机制—GHOST协议

==注意现在的出块奖励为2==

  • ==初版==:把没有成为最长合法链的上的区块(uncle block),包含进最长合法链的区块中,uncle block能得到7/8的出块奖励,而合法区块多得到1/32的出块奖励![[Pasted image 20240425162801.png]]
    • 问题:出现第三个uncle block怎么办
    • 问题:最长合法链不包含uncle block怎么办
    • 问题:在挖第二个区块时刚被告知uncle block怎么办
  • ==二版==:最长合法链上的每个区块都可以找任意的七代以内的两个uncle block包含![[Pasted image 20240425163616.png]]
    • 每代uncle block的出块奖励(uncle reward)会递减![[Pasted image 20240425164326.png]]
      • 不限制,对全节点的压力太大
      • 有利于尽早进行合并
      • 该共识机制只能解决对当前状态问题的分叉不能解决意见分歧的分叉
    • uncle block中的交易信息不会被包含在合法区块中
      • 因为会出现冲突交易,有些合法交易会变成非法交易
    • 只有分叉的第一个区块会被视作uncle block![[Pasted image 20240425171312.png]]
      • 否则forking attack反而会收到奖励
  • uncle block得不到gas fee
  • 以太坊当前状态

交易树和收据树都只包含当前交易的区块,但状态树是包含所有区块
每个交易完后会形成一个收据
每个交易的交易树和收据树都是独立的
作用:提供merkle proof
bloom filter():把每个元素取哈希在向量上映为1,把所有元素处理完形成的向量,就是该集合的digest(摘要)![[Pasted image 20240425152643.png]]
注意:1.任选一个元素,如果映射到向量的值为0,该集合肯定不含该元素,但值为1不能说明含该元素(collision resistance)。
2.bloom filter这个数据结构不支持删除操作
3.一般取出来的向量要远小于原集合
4.在查找时会出现fasle positive(错报),但不会false negetive(漏报)
5.每个交易产生的收据中都有一个bloom filter,在每个区块的block header里也有一个总的bloom filter,是每个交易中的bloom filter的并集
作用:1.查找,在查找时现在block header里的bloom filter中查找,如果有在去每个交易里查找

以太坊的运行状态:transacion——driven state machine(交易驱动的状态机)

  • 状态:每个账户的状态
  • 交易:区块正在进行的交易
  • 这些交易会会驱动状态的改变
  • 状态转移必须是确定性的

具体代码![[Pasted image 20240425155749.png]]

创建交易树,调用函树的得到root hash,创建交易列表
![[Pasted image 20240425155926.png]]
创建交易树,同样得到root hash,创建bloom filter
![[Pasted image 20240425160025.png]]
计算叔父区块的hash值,构建叔父数组![[Pasted image 20240425160105.png]]
deriveSha函数,得到前两个根hash的函数,用的是MPT
![[Pasted image 20240425160614.png]]
查询函数:查找topic,用bloom9函数把topic变成一个victor(向量),然后用and操作比较是否相等